📄 que0que.ic
字号:
/******************************************************Query graph(c) 1996 Innobase OyCreated 5/27/1996 Heikki Tuuri*******************************************************/#include "usr0sess.h"/***************************************************************************Gets the trx of a query thread. */UNIV_INLINEtrx_t*thr_get_trx(/*========*/ que_thr_t* thr) /* in: query thread */{ ut_ad(thr); return(thr->graph->trx);}/***************************************************************************Gets the first thr in a fork. */UNIV_INLINEque_thr_t*que_fork_get_first_thr(/*===================*/ que_fork_t* fork) /* in: query fork */{ return(UT_LIST_GET_FIRST(fork->thrs));}/***************************************************************************Gets the child node of the first thr in a fork. */UNIV_INLINEque_node_t*que_fork_get_child(/*===============*/ que_fork_t* fork) /* in: query fork */{ que_thr_t* thr; thr = UT_LIST_GET_FIRST(fork->thrs); return(thr->child);}/***************************************************************************Gets the type of a graph node. */UNIV_INLINEulintque_node_get_type(/*==============*/ que_node_t* node) /* in: graph node */{ ut_ad(node); return(((que_common_t*)node)->type);}/***************************************************************************Gets pointer to the value dfield of a graph node. */UNIV_INLINEdfield_t*que_node_get_val(/*=============*/ que_node_t* node) /* in: graph node */{ ut_ad(node); return(&(((que_common_t*)node)->val));}/***************************************************************************Gets the value buffer size of a graph node. */UNIV_INLINEulintque_node_get_val_buf_size(/*======================*/ /* out: val buffer size, not defined if val.data == NULL in node */ que_node_t* node) /* in: graph node */{ ut_ad(node); return(((que_common_t*)node)->val_buf_size);}/***************************************************************************Sets the value buffer size of a graph node. */UNIV_INLINEvoidque_node_set_val_buf_size(/*======================*/ que_node_t* node, /* in: graph node */ ulint size) /* in: size */{ ut_ad(node); ((que_common_t*)node)->val_buf_size = size;}/***************************************************************************Sets the parent of a graph node. */UNIV_INLINEvoidque_node_set_parent(/*================*/ que_node_t* node, /* in: graph node */ que_node_t* parent) /* in: parent */{ ut_ad(node); ((que_common_t*)node)->parent = parent;}/***************************************************************************Gets pointer to the value data type field of a graph node. */UNIV_INLINEdtype_t*que_node_get_data_type(/*===================*/ que_node_t* node) /* in: graph node */{ ut_ad(node); return(&(((que_common_t*)node)->val.type));}/*************************************************************************Catenates a query graph node to a list of them, possible empty list. */UNIV_INLINEque_node_t*que_node_list_add_last(/*===================*/ /* out: one-way list of nodes */ que_node_t* node_list, /* in: node list, or NULL */ que_node_t* node) /* in: node */{ que_common_t* cnode; que_common_t* cnode2; cnode = node; cnode->brother = NULL; if (node_list == NULL) { return(node); } cnode2 = node_list; while (cnode2->brother != NULL) { cnode2 = cnode2->brother; } cnode2->brother = node; return(node_list);}/*************************************************************************Gets the next list node in a list of query graph nodes. */UNIV_INLINEque_node_t*que_node_get_next(/*==============*/ /* out: next node in a list of nodes */ que_node_t* node) /* in: node in a list */{ return(((que_common_t*)node)->brother);}/*************************************************************************Gets a query graph node list length. */UNIV_INLINEulintque_node_list_get_len(/*==================*/ /* out: length, for NULL list 0 */ que_node_t* node_list) /* in: node list, or NULL */{ que_common_t* cnode; ulint len; cnode = node_list; len = 0; while (cnode != NULL) { len++; cnode = cnode->brother; } return(len);}/*************************************************************************Gets the parent node of a query graph node. */UNIV_INLINEque_node_t*que_node_get_parent(/*================*/ /* out: parent node or NULL */ que_node_t* node) /* in: node */{ return(((que_common_t*)node)->parent);}/**************************************************************************Checks if graph, trx, or session is in a state where the query thread shouldbe stopped. */UNIV_INLINEiboolque_thr_peek_stop(/*==============*/ /* out: TRUE if should be stopped; NOTE that if the peek is made without reserving the kernel mutex, then another peek with the mutex reserved is necessary before deciding the actual stopping */ que_thr_t* thr) /* in: query thread */{ trx_t* trx; que_t* graph; graph = thr->graph; trx = graph->trx; if (graph->state != QUE_FORK_ACTIVE || trx->que_state == TRX_QUE_LOCK_WAIT || (UT_LIST_GET_LEN(trx->signals) > 0 && trx->que_state == TRX_QUE_RUNNING)) { return(TRUE); } return(FALSE);}/***************************************************************************Returns TRUE if the query graph is for a SELECT statement. */UNIV_INLINEiboolque_graph_is_select(/*================*/ /* out: TRUE if a select */ que_t* graph) /* in: graph */{ if (graph->fork_type == QUE_FORK_SELECT_SCROLL || graph->fork_type == QUE_FORK_SELECT_NON_SCROLL) { return(TRUE); } return(FALSE);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -