MySQL 8.0.39
Source Code Documentation
|
Query graph. More...
#include "data0data.h"
#include "dict0types.h"
#include "pars0types.h"
#include "que0types.h"
#include "row0types.h"
#include "srv0srv.h"
#include "trx0roll.h"
#include "trx0trx.h"
#include "univ.i"
#include "usr0types.h"
#include "que0que.ic"
Go to the source code of this file.
Classes | |
struct | que_thr_t |
struct | que_fork_t |
Enumerations | |
enum | que_thr_state_t { QUE_THR_RUNNING , QUE_THR_PROCEDURE_WAIT , QUE_THR_COMPLETED , QUE_THR_COMMAND_WAIT , QUE_THR_LOCK_WAIT , QUE_THR_SUSPENDED } |
Query thread states. More... | |
enum | que_thr_lock_t { QUE_THR_LOCK_NOLOCK , QUE_THR_LOCK_ROW , QUE_THR_LOCK_TABLE } |
Query thread lock states. More... | |
enum | que_cur_t { QUE_CUR_NOT_DEFINED , QUE_CUR_START , QUE_CUR_END } |
From where the cursor position is counted. More... | |
Functions | |
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. More... | |
static que_thr_t * | que_fork_get_first_thr (que_fork_t *fork) |
Gets the first thr in a fork. More... | |
static que_node_t * | que_fork_get_child (que_fork_t *fork) |
Gets the child node of the first thr in a fork. More... | |
static void | que_node_set_parent (que_node_t *node, que_node_t *parent) |
Sets the parent of a graph node. More... | |
que_thr_t * | que_thr_create (que_fork_t *parent, mem_heap_t *heap, row_prebuilt_t *prebuilt) |
Creates a query graph thread node. More... | |
void | que_graph_free_recursive (que_node_t *node) |
Frees a query graph, but not the heap where it was created. More... | |
void | que_graph_free (que_t *graph) |
Frees a query graph. More... | |
bool | que_thr_stop (que_thr_t *thr) |
Stops a query thread if graph or trx is in a state requiring it. More... | |
void | que_thr_move_to_run_state_for_mysql (que_thr_t *thr, trx_t *trx) |
Moves a thread from another state to the QUE_THR_RUNNING state. More... | |
void | que_thr_stop_for_mysql_no_error (que_thr_t *thr, trx_t *trx) |
A patch for MySQL used to 'stop' a dummy query thread used in MySQL select, when there is no error or lock wait. More... | |
void | que_thr_stop_for_mysql (que_thr_t *thr) |
A patch for MySQL used to 'stop' a dummy query thread used in MySQL. More... | |
void | que_run_threads (que_thr_t *thr) |
Run a query thread. More... | |
que_thr_t * | que_thr_end_lock_wait (trx_t *trx) |
Moves a suspended query thread to the QUE_THR_RUNNING state and release a worker thread to execute it. More... | |
que_thr_t * | que_fork_start_command (que_fork_t *fork) |
Starts execution of a command in a query fork. More... | |
static trx_t * | thr_get_trx (que_thr_t *thr) |
Gets the trx of a query thread. More... | |
static bool | thr_is_recv (const que_thr_t *thr) |
Determines if this thread is rolling back an incomplete transaction in crash recovery. More... | |
static ulint | que_node_get_type (const que_node_t *node) |
Gets the type of a graph node. More... | |
static dtype_t * | que_node_get_data_type (que_node_t *node) |
Gets pointer to the value data type field of a graph node. More... | |
static dfield_t * | que_node_get_val (que_node_t *node) |
Gets pointer to the value dfield of a graph node. More... | |
static ulint | que_node_get_val_buf_size (que_node_t *node) |
Gets the value buffer size of a graph node. More... | |
static void | que_node_set_val_buf_size (que_node_t *node, ulint size) |
Sets the value buffer size of a graph node. More... | |
static que_node_t * | que_node_get_next (que_node_t *node) |
Gets the next list node in a list of query graph nodes. More... | |
static que_node_t * | que_node_get_parent (que_node_t *node) |
Gets the parent node of a query graph node. More... | |
que_node_t * | que_node_get_containing_loop_node (que_node_t *node) |
Get the first containing loop node (e.g. More... | |
static 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. More... | |
static que_node_t * | que_node_list_get_last (que_node_t *node_list) |
static ulint | que_node_list_get_len (que_node_t *node_list) |
Gets a query graph node list length. More... | |
static bool | 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. More... | |
static bool | que_graph_is_select (que_t *graph) |
Returns true if the query graph is for a SELECT statement. More... | |
void | que_node_print_info (que_node_t *node) |
Prints info of an SQL query graph node. More... | |
dberr_t | que_eval_sql (pars_info_t *info, const char *sql, trx_t *trx) |
Evaluate the given SQL. More... | |
que_thr_t * | que_fork_scheduler_round_robin (que_fork_t *fork, que_thr_t *thr) |
Round robin scheduler. More... | |
void | que_init (void) |
Initialise the query sub-system. More... | |
void | que_close (void) |
Close the query sub-system. More... | |
Variables | |
ib_mutex_t | que_thr_mutex |
Mutex protecting the query threads. More... | |
constexpr uint32_t | QUE_THR_MAGIC_N = 8476583 |
constexpr uint32_t | QUE_THR_MAGIC_FREED = 123461526 |
constexpr uint32_t | QUE_FORK_SELECT_NON_SCROLL = 1 |
constexpr uint32_t | QUE_FORK_SELECT_SCROLL = 2 |
constexpr uint32_t | QUE_FORK_INSERT = 3 |
constexpr uint32_t | QUE_FORK_UPDATE = 4 |
constexpr uint32_t | QUE_FORK_ROLLBACK = 5 |
constexpr uint32_t | QUE_FORK_PURGE = 6 |
constexpr uint32_t | QUE_FORK_EXECUTE = 7 |
constexpr uint32_t | QUE_FORK_PROCEDURE = 8 |
constexpr uint32_t | QUE_FORK_PROCEDURE_CALL = 9 |
constexpr uint32_t | QUE_FORK_MYSQL_INTERFACE = 10 |
constexpr uint32_t | QUE_FORK_RECOVERY = 11 |
constexpr uint32_t | QUE_FORK_ACTIVE = 1 |
constexpr uint32_t | QUE_FORK_COMMAND_WAIT = 2 |
constexpr uint32_t | QUE_FORK_INVALID = 3 |
constexpr uint32_t | QUE_FORK_BEING_FREED = 4 |
constexpr uint32_t | QUE_NODE_CONTROL_STAT = 1024 |
constexpr uint32_t | QUE_NODE_LOCK = 1 |
constexpr uint32_t | QUE_NODE_INSERT = 2 |
constexpr uint32_t | QUE_NODE_UPDATE = 4 |
constexpr uint32_t | QUE_NODE_CURSOR = 5 |
constexpr uint32_t | QUE_NODE_SELECT = 6 |
constexpr uint32_t | QUE_NODE_AGGREGATE = 7 |
constexpr uint32_t | QUE_NODE_FORK = 8 |
constexpr uint32_t | QUE_NODE_THR = 9 |
constexpr uint32_t | QUE_NODE_UNDO = 10 |
constexpr uint32_t | QUE_NODE_COMMIT = 11 |
constexpr uint32_t | QUE_NODE_ROLLBACK = 12 |
constexpr uint32_t | QUE_NODE_PURGE = 13 |
constexpr uint32_t | QUE_NODE_SYMBOL = 14 |
constexpr uint32_t | QUE_NODE_RES_WORD = 15 |
constexpr uint32_t | QUE_NODE_FUNC = 16 |
constexpr uint32_t | QUE_NODE_ORDER = 17 |
constexpr uint32_t | QUE_NODE_PROC = 18 + QUE_NODE_CONTROL_STAT |
constexpr uint32_t | QUE_NODE_IF = 19 + QUE_NODE_CONTROL_STAT |
constexpr uint32_t | QUE_NODE_WHILE = 20 + QUE_NODE_CONTROL_STAT |
constexpr uint32_t | QUE_NODE_ASSIGNMENT = 21 |
constexpr uint32_t | QUE_NODE_FETCH = 22 |
constexpr uint32_t | QUE_NODE_OPEN = 23 |
constexpr uint32_t | QUE_NODE_COL_ASSIGNMENT = 24 |
constexpr uint32_t | QUE_NODE_FOR = 25 + QUE_NODE_CONTROL_STAT |
constexpr uint32_t | QUE_NODE_RETURN = 26 |
constexpr uint32_t | QUE_NODE_ELSIF = 27 |
constexpr uint32_t | QUE_NODE_CALL = 28 |
constexpr uint32_t | QUE_NODE_EXIT = 29 |
Query graph.
Created 5/27/1996 Heikki Tuuri
enum que_cur_t |
enum que_thr_lock_t |
enum que_thr_state_t |
Query thread states.
void que_close | ( | void | ) |
Close the query sub-system.
dberr_t que_eval_sql | ( | pars_info_t * | info, |
const char * | sql, | ||
trx_t * | trx | ||
) |
Evaluate the given SQL.
[in] | info | Info struct, or nullptr. |
[in] | sql | SQL string. |
[in] | trx | Transaction. |
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.
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 |
|
inlinestatic |
Gets the child node of the first thr in a fork.
in: query fork
|
inlinestatic |
Gets the first thr in a fork.
in: query fork
que_thr_t * que_fork_scheduler_round_robin | ( | que_fork_t * | fork, |
que_thr_t * | thr | ||
) |
Round robin scheduler.
fork | in: a query fork |
thr | in: current pos |
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.
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 |
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!
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! |
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
Does not free explicit cursor declarations, they are freed in que_graph_free.
node | in: query graph node |
|
inlinestatic |
Returns true if the query graph is for a SELECT statement.
void que_init | ( | void | ) |
Initialise the query sub-system.
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.
while_node_t or for_node_t) for the given node, or NULL if the node is not within a loop.
node | in: node |
|
inlinestatic |
Gets pointer to the value data type field of a graph node.
in: graph node
|
inlinestatic |
Gets the next list node in a list of query graph nodes.
in: node in a list
|
inlinestatic |
Gets the parent node of a query graph node.
|
inlinestatic |
Gets the type of a graph node.
in: graph node
|
inlinestatic |
Gets pointer to the value dfield of a graph node.
in: graph node
|
inlinestatic |
Gets the value buffer size of a graph node.
|
inlinestatic |
Catenates a query graph node to a list of them, possible empty list.
[in] | node_list | node list, or NULL |
[in] | node | node |
|
inlinestatic |
|
inlinestatic |
Gets a query graph node list length.
void que_node_print_info | ( | que_node_t * | node | ) |
Prints info of an SQL query graph node.
in: query graph node
|
inlinestatic |
Sets the parent of a graph node.
[in] | node | graph node |
[in] | parent | parent |
|
inlinestatic |
Sets the value buffer size of a graph node.
[in] | node | graph node |
[in] | size | size |
void que_run_threads | ( | que_thr_t * | thr | ) |
Run a query thread.
Handles lock waits. in: query thread
Handles lock waits.
thr | in: query thread |
que_thr_t * que_thr_create | ( | que_fork_t * | parent, |
mem_heap_t * | heap, | ||
row_prebuilt_t * | prebuilt | ||
) |
Creates a query graph thread node.
[in] | parent | parent node, i.e., a fork node |
[in] | heap | memory heap where created |
[in] | prebuilt | row prebuilt structure |
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 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 |
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
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 |
|
inlinestatic |
Checks if graph, trx, or session is in a state where the query thread should be stopped.
bool 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. Caller must hold the trx mutex.
[in,out] | thr | query thread |
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
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 |
A patch for MySQL used to 'stop' a dummy query thread used in MySQL select, when there is no error or lock wait.
[in] | thr | Query thread |
[in] | trx | Transaction |
Gets the trx of a query thread.
in: query thread
|
inlinestatic |
Determines if this thread is rolling back an incomplete transaction in crash recovery.
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
extern |
Mutex protecting the query threads.