MySQL 5.6.14 Source Code Document
|
#include "univ.i"
#include "data0data.h"
#include "dict0types.h"
#include "trx0trx.h"
#include "trx0roll.h"
#include "srv0srv.h"
#include "usr0types.h"
#include "que0types.h"
#include "row0types.h"
#include "pars0types.h"
#include "que0que.ic"
Go to the source code of this file.
Classes | |
struct | que_thr_t |
struct | que_fork_t |
Macros | |
#define | QUE_THR_MAGIC_N 8476583 |
#define | QUE_THR_MAGIC_FREED 123461526 |
#define | QUE_FORK_SELECT_NON_SCROLL 1 /* forward-only cursor */ |
#define | QUE_FORK_SELECT_SCROLL 2 /* scrollable cursor */ |
#define | QUE_FORK_INSERT 3 |
#define | QUE_FORK_UPDATE 4 |
#define | QUE_FORK_ROLLBACK 5 |
#define | QUE_FORK_PURGE 6 |
#define | QUE_FORK_EXECUTE 7 |
#define | QUE_FORK_PROCEDURE 8 |
#define | QUE_FORK_PROCEDURE_CALL 9 |
#define | QUE_FORK_MYSQL_INTERFACE 10 |
#define | QUE_FORK_RECOVERY 11 |
#define | QUE_FORK_ACTIVE 1 |
#define | QUE_FORK_COMMAND_WAIT 2 |
#define | QUE_FORK_INVALID 3 |
#define | QUE_FORK_BEING_FREED 4 |
#define | QUE_NODE_CONTROL_STAT 1024 |
#define | QUE_NODE_LOCK 1 |
#define | QUE_NODE_INSERT 2 |
#define | QUE_NODE_UPDATE 4 |
#define | QUE_NODE_CURSOR 5 |
#define | QUE_NODE_SELECT 6 |
#define | QUE_NODE_AGGREGATE 7 |
#define | QUE_NODE_FORK 8 |
#define | QUE_NODE_THR 9 |
#define | QUE_NODE_UNDO 10 |
#define | QUE_NODE_COMMIT 11 |
#define | QUE_NODE_ROLLBACK 12 |
#define | QUE_NODE_PURGE 13 |
#define | QUE_NODE_CREATE_TABLE 14 |
#define | QUE_NODE_CREATE_INDEX 15 |
#define | QUE_NODE_SYMBOL 16 |
#define | QUE_NODE_RES_WORD 17 |
#define | QUE_NODE_FUNC 18 |
#define | QUE_NODE_ORDER 19 |
#define | QUE_NODE_PROC (20 + QUE_NODE_CONTROL_STAT) |
#define | QUE_NODE_IF (21 + QUE_NODE_CONTROL_STAT) |
#define | QUE_NODE_WHILE (22 + QUE_NODE_CONTROL_STAT) |
#define | QUE_NODE_ASSIGNMENT 23 |
#define | QUE_NODE_FETCH 24 |
#define | QUE_NODE_OPEN 25 |
#define | QUE_NODE_COL_ASSIGNMENT 26 |
#define | QUE_NODE_FOR (27 + QUE_NODE_CONTROL_STAT) |
#define | QUE_NODE_RETURN 28 |
#define | QUE_NODE_ROW_PRINTF 29 |
#define | QUE_NODE_ELSIF 30 |
#define | QUE_NODE_CALL 31 |
#define | QUE_NODE_EXIT 32 |
#define | QUE_THR_RUNNING 1 |
#define | QUE_THR_PROCEDURE_WAIT 2 |
#define | QUE_THR_COMPLETED |
#define | QUE_THR_COMMAND_WAIT 4 |
#define | QUE_THR_LOCK_WAIT 5 |
#define | QUE_THR_SUSPENDED 7 |
#define | QUE_THR_ERROR 8 |
#define | QUE_THR_LOCK_NOLOCK 0 |
#define | QUE_THR_LOCK_ROW 1 |
#define | QUE_THR_LOCK_TABLE 2 |
#define | QUE_CUR_NOT_DEFINED 1 |
#define | QUE_CUR_START 2 |
#define | QUE_CUR_END 3 |
Functions | |
UNIV_INTERN que_fork_t * | que_fork_create (que_t *graph, que_node_t *parent, ulint fork_type, mem_heap_t *heap) |
UNIV_INLINE que_thr_t * | que_fork_get_first_thr (que_fork_t *fork) |
UNIV_INLINE que_node_t * | que_fork_get_child (que_fork_t *fork) |
UNIV_INLINE void | que_node_set_parent (que_node_t *node, que_node_t *parent) |
UNIV_INTERN que_thr_t * | que_thr_create (que_fork_t *parent, mem_heap_t *heap) |
UNIV_INTERN void | que_graph_free_recursive (que_node_t *node) |
UNIV_INTERN void | que_graph_free (que_t *graph) |
UNIV_INTERN ibool | que_thr_stop (que_thr_t *thr) |
UNIV_INTERN void | que_thr_move_to_run_state_for_mysql (que_thr_t *thr, trx_t *trx) |
UNIV_INTERN void | que_thr_stop_for_mysql_no_error (que_thr_t *thr, trx_t *trx) |
UNIV_INTERN void | que_thr_stop_for_mysql (que_thr_t *thr) |
UNIV_INTERN void | que_run_threads (que_thr_t *thr) |
UNIV_INTERN que_thr_t * | que_thr_end_lock_wait (trx_t *trx) |
UNIV_INTERN que_thr_t * | que_fork_start_command (que_fork_t *fork) |
UNIV_INLINE trx_t * | thr_get_trx (que_thr_t *thr) |
UNIV_INLINE ibool | thr_is_recv (const que_thr_t *thr) |
UNIV_INLINE ulint | que_node_get_type (que_node_t *node) |
UNIV_INLINE dtype_t * | que_node_get_data_type (que_node_t *node) |
UNIV_INLINE dfield_t * | que_node_get_val (que_node_t *node) |
UNIV_INLINE ulint | que_node_get_val_buf_size (que_node_t *node) |
UNIV_INLINE void | que_node_set_val_buf_size (que_node_t *node, ulint size) |
UNIV_INLINE que_node_t * | que_node_get_next (que_node_t *node) |
UNIV_INLINE que_node_t * | que_node_get_parent (que_node_t *node) |
UNIV_INTERN que_node_t * | que_node_get_containing_loop_node (que_node_t *node) |
UNIV_INLINE que_node_t * | que_node_list_add_last (que_node_t *node_list, que_node_t *node) |
UNIV_INLINE que_node_t * | que_node_list_get_last (que_node_t *node_list) |
UNIV_INLINE ulint | que_node_list_get_len (que_node_t *node_list) |
UNIV_INLINE ibool | que_thr_peek_stop (que_thr_t *thr) |
UNIV_INLINE ibool | que_graph_is_select (que_t *graph) |
UNIV_INTERN void | que_node_print_info (que_node_t *node) |
UNIV_INTERN dberr_t | que_eval_sql (pars_info_t *info, const char *sql, ibool reserve_dict_mutex, trx_t *trx) |
UNIV_INTERN que_thr_t * | que_fork_scheduler_round_robin (que_fork_t *fork, que_thr_t *thr) |
UNIV_INTERN void | que_init (void) |
UNIV_INTERN void | que_close (void) |
Variables | |
ibool | que_trace_on |
ib_mutex_t | que_thr_mutex |
#define QUE_THR_COMPLETED |
UNIV_INTERN void que_close | ( | void | ) |
Close the query sub-system.
Definition at line 1314 of file que0que.cc.
UNIV_INTERN dberr_t que_eval_sql | ( | pars_info_t * | info, |
const char * | sql, | ||
ibool | reserve_dict_mutex, | ||
trx_t * | trx | ||
) |
Evaluate the given SQL
Evaluate the given SQL.
info | in: info struct, or NULL |
sql | in: SQL string |
reserve_dict_mutex | in: if TRUE, acquire/release dict_sys->mutex around call to pars_sql. |
trx | in: trx |
Definition at line 1252 of file que0que.cc.
UNIV_INTERN que_fork_t* que_fork_create | ( | que_t * | graph, |
que_node_t * | parent, | ||
ulint | fork_type, | ||
mem_heap_t * | heap | ||
) |
Creates a query graph fork node.
Creates a query graph fork node.
graph | in: graph, if NULL then this fork node is assumed to be the graph root |
parent | in: parent node |
fork_type | in: fork type |
heap | in: memory heap where created |
Definition at line 129 of file que0que.cc.
UNIV_INLINE que_node_t* que_fork_get_child | ( | que_fork_t * | fork | ) |
Gets the child node of the first thr in a fork. in: query fork
UNIV_INLINE que_thr_t* que_fork_get_first_thr | ( | que_fork_t * | fork | ) |
Gets the first thr in a fork. in: query fork
UNIV_INTERN que_thr_t* que_fork_scheduler_round_robin | ( | que_fork_t * | fork, |
que_thr_t * | thr | ||
) |
Round robin scheduler.
Round robin scheduler.
fork | in: a query fork |
thr | in: current pos |
Definition at line 254 of file que0que.cc.
UNIV_INTERN que_thr_t* que_fork_start_command | ( | que_fork_t * | fork | ) |
Starts execution of a command in a query fork. Picks a query thread which is not in the QUE_THR_RUNNING state and moves it to that state. If none can be chosen, a situation which may arise in parallelized fetches, NULL is returned.
Starts execution of a command in a query fork. Picks a query thread which is not in the QUE_THR_RUNNING state and moves it to that state. If none can be chosen, a situation which may arise in parallelized fetches, NULL is returned.
fork | in: a query fork |
Definition at line 304 of file que0que.cc.
UNIV_INTERN void que_graph_free | ( | que_t * | graph | ) |
Frees a query graph. in: query graph; we assume that the memory heap where this graph was created is private to this graph: if not, then use que_graph_free_recursive and free the heap afterwards!
Frees a query graph.
graph | in: query graph; we assume that the memory heap where this graph was created is private to this graph: if not, then use que_graph_free_recursive and free the heap afterwards! |
Definition at line 600 of file que0que.cc.
UNIV_INTERN void que_graph_free_recursive | ( | que_node_t * | node | ) |
Frees a query graph, but not the heap where it was created. Does not free explicit cursor declarations, they are freed in que_graph_free. in: query graph node
Frees a query graph, but not the heap where it was created. Does not free explicit cursor declarations, they are freed in que_graph_free.
node | in: query graph node |
Definition at line 429 of file que0que.cc.
UNIV_INLINE ibool que_graph_is_select | ( | que_t * | graph | ) |
Returns TRUE if the query graph is for a SELECT statement.
UNIV_INTERN void que_init | ( | void | ) |
Initialise the query sub-system.
Definition at line 1304 of file que0que.cc.
UNIV_INTERN que_node_t* que_node_get_containing_loop_node | ( | que_node_t * | node | ) |
Get the first containing loop node (e.g. while_node_t or for_node_t) for the given node, or NULL if the node is not within a loop.
Get the first containing loop node (e.g. while_node_t or for_node_t) for the given node, or NULL if the node is not within a loop.
node | in: node |
Definition at line 928 of file que0que.cc.
UNIV_INLINE dtype_t* que_node_get_data_type | ( | que_node_t * | node | ) |
Gets pointer to the value data type field of a graph node. in: graph node
UNIV_INLINE que_node_t* que_node_get_next | ( | que_node_t * | node | ) |
Gets the next list node in a list of query graph nodes. in: node in a list
UNIV_INLINE que_node_t* que_node_get_parent | ( | que_node_t * | node | ) |
Gets the parent node of a query graph node.
UNIV_INLINE ulint que_node_get_type | ( | que_node_t * | node | ) |
Gets the type of a graph node. in: graph node
UNIV_INLINE dfield_t* que_node_get_val | ( | que_node_t * | node | ) |
Gets pointer to the value dfield of a graph node. in: graph node
UNIV_INLINE ulint que_node_get_val_buf_size | ( | que_node_t * | node | ) |
Gets the value buffer size of a graph node.
UNIV_INLINE que_node_t* que_node_list_add_last | ( | que_node_t * | node_list, |
que_node_t * | node | ||
) |
Catenates a query graph node to a list of them, possible empty list.
node_list | in: node list, or NULL |
UNIV_INLINE ulint que_node_list_get_len | ( | que_node_t * | node_list | ) |
Gets a query graph node list length.
UNIV_INTERN void que_node_print_info | ( | que_node_t * | node | ) |
Prints info of an SQL query graph node. in: query graph node
Prints info of an SQL query graph node.
node | in: query graph node |
Definition at line 957 of file que0que.cc.
UNIV_INLINE void que_node_set_parent | ( | que_node_t * | node, |
que_node_t * | parent | ||
) |
Sets the parent of a graph node. in: parent
node | in: graph node |
UNIV_INLINE void que_node_set_val_buf_size | ( | que_node_t * | node, |
ulint | size | ||
) |
Sets the value buffer size of a graph node. in: size
node | in: graph node |
UNIV_INTERN void que_run_threads | ( | que_thr_t * | thr | ) |
Run a query thread. Handles lock waits. in: query thread
Run a query thread. Handles lock waits.
thr | in: query thread |
Definition at line 1199 of file que0que.cc.
UNIV_INTERN que_thr_t* que_thr_create | ( | que_fork_t * | parent, |
mem_heap_t * | heap | ||
) |
Creates a query graph thread node.
Creates a query graph thread node.
parent | in: parent node, i.e., a fork node |
heap | in: memory heap where created |
Definition at line 164 of file que0que.cc.
Moves a suspended query thread to the QUE_THR_RUNNING state and release a worker thread to execute it. This function should be used to end the wait state of a query thread waiting for a lock or a stored procedure completion.
Moves a suspended query thread to the QUE_THR_RUNNING state and may release a worker thread to execute it. This function should be used to end the wait state of a query thread waiting for a lock or a stored procedure completion.
trx | in: transaction with que_state in QUE_THR_LOCK_WAIT |
Definition at line 200 of file que0que.cc.
Moves a thread from another state to the QUE_THR_RUNNING state. Increments the n_active_thrs counters of the query graph and transaction. in: transaction
Moves a thread from another state to the QUE_THR_RUNNING state. Increments the n_active_thrs counters of the query graph and transaction if thr was not active.
thr | in: an query thread |
trx | in: transaction |
Definition at line 861 of file que0que.cc.
UNIV_INLINE ibool que_thr_peek_stop | ( | que_thr_t * | thr | ) |
Checks if graph, trx, or session is in a state where the query thread should be stopped.
UNIV_INTERN ibool que_thr_stop | ( | que_thr_t * | thr | ) |
Stops a query thread if graph or trx is in a state requiring it. The conditions are tested in the order (1) graph, (2) trx. The lock_sys_t::mutex has to be reserved.
Stops a query thread if graph or trx is in a state requiring it. The conditions are tested in the order (1) graph, (2) trx.
thr | in: query thread |
Definition at line 701 of file que0que.cc.
UNIV_INTERN void que_thr_stop_for_mysql | ( | que_thr_t * | thr | ) |
A patch for MySQL used to 'stop' a dummy query thread used in MySQL. The query thread is stopped and made inactive, except in the case where it was put to the lock wait state in lock0lock.cc, but the lock has already been granted or the transaction chosen as a victim in deadlock resolution. in: query thread
A patch for MySQL used to 'stop' a dummy query thread used in MySQL. The query thread is stopped and made inactive, except in the case where it was put to the lock wait state in lock0lock.cc, but the lock has already been granted or the transaction chosen as a victim in deadlock resolution.
thr | in: query thread |
Definition at line 812 of file que0que.cc.
A patch for MySQL used to 'stop' a dummy query thread used in MySQL select, when there is no error or lock wait. in: transaction
A patch for MySQL used to 'stop' a dummy query thread used in MySQL select, when there is no error or lock wait.
thr | in: query thread |
trx | in: transaction |
Definition at line 893 of file que0que.cc.
Gets the trx of a query thread. in: query thread
UNIV_INLINE ibool thr_is_recv | ( | const que_thr_t * | thr | ) |
Determines if this thread is rolling back an incomplete transaction in crash recovery.
ib_mutex_t que_thr_mutex |
Mutex protecting the query threads.