MySQL 9.1.0
Source Code Documentation
que0que.h File Reference

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_tque_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_tque_fork_get_first_thr (que_fork_t *fork)
 Gets the first thr in a fork. More...
 
static que_node_tque_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_tque_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_tque_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_tque_fork_start_command (que_fork_t *fork)
 Starts execution of a command in a query fork. More...
 
static trx_tthr_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_tque_node_get_data_type (que_node_t *node)
 Gets pointer to the value data type field of a graph node. More...
 
static dfield_tque_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_tque_node_get_next (que_node_t *node)
 Gets the next list node in a list of query graph nodes. More...
 
static que_node_tque_node_get_parent (que_node_t *node)
 Gets the parent node of a query graph node. More...
 
que_node_tque_node_get_containing_loop_node (que_node_t *node)
 Get the first containing loop node (e.g. More...
 
static que_node_tque_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_tque_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_tque_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
 

Detailed Description

Query graph.

Created 5/27/1996 Heikki Tuuri

Enumeration Type Documentation

◆ que_cur_t

enum que_cur_t

From where the cursor position is counted.

Enumerator
QUE_CUR_NOT_DEFINED 
QUE_CUR_START 
QUE_CUR_END 

◆ que_thr_lock_t

Query thread lock states.

Enumerator
QUE_THR_LOCK_NOLOCK 
QUE_THR_LOCK_ROW 
QUE_THR_LOCK_TABLE 

◆ que_thr_state_t

Query thread states.

Enumerator
QUE_THR_RUNNING 
QUE_THR_PROCEDURE_WAIT 
QUE_THR_COMPLETED 

in selects this means that the thread is at the end of its result set (or start, in case of a scroll cursor); in other statements, this means the thread has done its task

QUE_THR_COMMAND_WAIT 
QUE_THR_LOCK_WAIT 
QUE_THR_SUSPENDED 

Function Documentation

◆ que_close()

void que_close ( void  )

Close the query sub-system.

◆ que_eval_sql()

dberr_t que_eval_sql ( pars_info_t info,
const char *  sql,
trx_t trx 
)

Evaluate the given SQL.

Parameters
[in]infoInfo struct, or nullptr.
[in]sqlSQL string.
[in]trxTransaction.
Returns
error code or DB_SUCCESS

◆ que_fork_create()

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.

Returns
own: fork node in: memory heap where created
own: fork node
Parameters
graphin: graph, if NULL then this fork node is assumed to be the graph root
parentin: parent node
fork_typein: fork type
heapin: memory heap where created

◆ que_fork_get_child()

static que_node_t * que_fork_get_child ( que_fork_t fork)
inlinestatic

Gets the child node of the first thr in a fork.

in: query fork

◆ que_fork_get_first_thr()

static que_thr_t * que_fork_get_first_thr ( que_fork_t fork)
inlinestatic

Gets the first thr in a fork.

in: query fork

◆ que_fork_scheduler_round_robin()

que_thr_t * que_fork_scheduler_round_robin ( que_fork_t fork,
que_thr_t thr 
)

Round robin scheduler.

Returns
a query thread of the graph moved to QUE_THR_RUNNING state, or NULL; the query thread should be executed by que_run_threads by the caller in: current pos
a query thread of the graph moved to QUE_THR_RUNNING state, or NULL; the query thread should be executed by que_run_threads by the caller
Parameters
forkin: a query fork
thrin: current pos

◆ que_fork_start_command()

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.

Returns
a query thread of the graph moved to QUE_THR_RUNNING state, or NULL; the query thread should be executed by que_run_threads by the caller 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.

Returns
a query thread of the graph moved to QUE_THR_RUNNING state, or NULL; the query thread should be executed by que_run_threads by the caller
Parameters
forkin: a query fork

◆ que_graph_free()

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!

Parameters
graphin: 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!

◆ que_graph_free_recursive()

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.

Parameters
nodein: query graph node

◆ que_graph_is_select()

static bool que_graph_is_select ( que_t graph)
inlinestatic

Returns true if the query graph is for a SELECT statement.

Returns
true if a select in: graph

◆ que_init()

void que_init ( void  )

Initialise the query sub-system.

◆ que_node_get_containing_loop_node()

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.

Returns
containing loop node, or NULL. in: node

while_node_t or for_node_t) for the given node, or NULL if the node is not within a loop.

Returns
containing loop node, or NULL.
Parameters
nodein: node

◆ que_node_get_data_type()

static dtype_t * que_node_get_data_type ( que_node_t node)
inlinestatic

Gets pointer to the value data type field of a graph node.

in: graph node

◆ que_node_get_next()

static que_node_t * que_node_get_next ( que_node_t node)
inlinestatic

Gets the next list node in a list of query graph nodes.

in: node in a list

◆ que_node_get_parent()

static que_node_t * que_node_get_parent ( que_node_t node)
inlinestatic

Gets the parent node of a query graph node.

Returns
parent node or NULL in: node

◆ que_node_get_type()

static ulint que_node_get_type ( const que_node_t node)
inlinestatic

Gets the type of a graph node.

in: graph node

◆ que_node_get_val()

static dfield_t * que_node_get_val ( que_node_t node)
inlinestatic

Gets pointer to the value dfield of a graph node.

in: graph node

◆ que_node_get_val_buf_size()

static ulint que_node_get_val_buf_size ( que_node_t node)
inlinestatic

Gets the value buffer size of a graph node.

Returns
val buffer size, not defined if val.data == NULL in node in: graph node

◆ que_node_list_add_last()

static que_node_t * que_node_list_add_last ( que_node_t node_list,
que_node_t node 
)
inlinestatic

Catenates a query graph node to a list of them, possible empty list.

Parameters
[in]node_listnode list, or NULL
[in]nodenode
Returns
one-way list of nodes

◆ que_node_list_get_last()

static que_node_t * que_node_list_get_last ( que_node_t node_list)
inlinestatic

◆ que_node_list_get_len()

static ulint que_node_list_get_len ( que_node_t node_list)
inlinestatic

Gets a query graph node list length.

Returns
length, for NULL list 0 in: node list, or NULL

◆ que_node_print_info()

void que_node_print_info ( que_node_t node)

Prints info of an SQL query graph node.

in: query graph node

◆ que_node_set_parent()

static void que_node_set_parent ( que_node_t node,
que_node_t parent 
)
inlinestatic

Sets the parent of a graph node.

Parameters
[in]nodegraph node
[in]parentparent

◆ que_node_set_val_buf_size()

static void que_node_set_val_buf_size ( que_node_t node,
ulint  size 
)
inlinestatic

Sets the value buffer size of a graph node.

Parameters
[in]nodegraph node
[in]sizesize

◆ que_run_threads()

void que_run_threads ( que_thr_t thr)

Run a query thread.

Handles lock waits. in: query thread

Handles lock waits.

Parameters
thrin: query thread

◆ que_thr_create()

que_thr_t * que_thr_create ( que_fork_t parent,
mem_heap_t heap,
row_prebuilt_t prebuilt 
)

Creates a query graph thread node.

Parameters
[in]parentparent node, i.e., a fork node
[in]heapmemory heap where created
[in]prebuiltrow prebuilt structure
Returns
own: query thread node

◆ que_thr_end_lock_wait()

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.

This function should be used to end the wait state of a query thread waiting for a lock or a stored procedure completion.

Returns
query thread instance of thread to wakeup or NULL in: transaction in the QUE_THR_LOCK_WAIT state

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.

Returns
the query thread that needs to be released.
Parameters
trxin: transaction with que_state in QUE_THR_LOCK_WAIT

◆ que_thr_move_to_run_state_for_mysql()

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.

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.

Parameters
thrin: an query thread
trxin: transaction

◆ que_thr_peek_stop()

static bool que_thr_peek_stop ( que_thr_t thr)
inlinestatic

Checks if graph, trx, or session is in a state where the query thread should be stopped.

Returns
true if should be stopped; NOTE that if the peek is made without reserving the trx_t::mutex, then another peek with the mutex reserved is necessary before deciding the actual stopping in: query thread

◆ que_thr_stop()

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.

Parameters
[in,out]thrquery thread
Returns
true if stopped

◆ que_thr_stop_for_mysql()

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.

Parameters
thrin: query thread

◆ que_thr_stop_for_mysql_no_error()

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.

Parameters
[in]thrQuery thread
[in]trxTransaction

◆ thr_get_trx()

static trx_t * thr_get_trx ( que_thr_t thr)
inlinestatic

Gets the trx of a query thread.

in: query thread

◆ thr_is_recv()

static bool thr_is_recv ( const que_thr_t thr)
inlinestatic

Determines if this thread is rolling back an incomplete transaction in crash recovery.

Returns
true if thr is rolling back an incomplete transaction in crash recovery in: query thread

Variable Documentation

◆ QUE_FORK_ACTIVE

constexpr uint32_t QUE_FORK_ACTIVE = 1
constexpr

◆ QUE_FORK_BEING_FREED

constexpr uint32_t QUE_FORK_BEING_FREED = 4
constexpr

◆ QUE_FORK_COMMAND_WAIT

constexpr uint32_t QUE_FORK_COMMAND_WAIT = 2
constexpr

◆ QUE_FORK_EXECUTE

constexpr uint32_t QUE_FORK_EXECUTE = 7
constexpr

◆ QUE_FORK_INSERT

constexpr uint32_t QUE_FORK_INSERT = 3
constexpr

◆ QUE_FORK_INVALID

constexpr uint32_t QUE_FORK_INVALID = 3
constexpr

◆ QUE_FORK_MYSQL_INTERFACE

constexpr uint32_t QUE_FORK_MYSQL_INTERFACE = 10
constexpr

◆ QUE_FORK_PROCEDURE

constexpr uint32_t QUE_FORK_PROCEDURE = 8
constexpr

◆ QUE_FORK_PROCEDURE_CALL

constexpr uint32_t QUE_FORK_PROCEDURE_CALL = 9
constexpr

◆ QUE_FORK_PURGE

constexpr uint32_t QUE_FORK_PURGE = 6
constexpr

◆ QUE_FORK_RECOVERY

constexpr uint32_t QUE_FORK_RECOVERY = 11
constexpr

◆ QUE_FORK_ROLLBACK

constexpr uint32_t QUE_FORK_ROLLBACK = 5
constexpr

◆ QUE_FORK_SELECT_NON_SCROLL

constexpr uint32_t QUE_FORK_SELECT_NON_SCROLL = 1
constexpr

◆ QUE_FORK_SELECT_SCROLL

constexpr uint32_t QUE_FORK_SELECT_SCROLL = 2
constexpr

◆ QUE_FORK_UPDATE

constexpr uint32_t QUE_FORK_UPDATE = 4
constexpr

◆ QUE_NODE_AGGREGATE

constexpr uint32_t QUE_NODE_AGGREGATE = 7
constexpr

◆ QUE_NODE_ASSIGNMENT

constexpr uint32_t QUE_NODE_ASSIGNMENT = 21
constexpr

◆ QUE_NODE_CALL

constexpr uint32_t QUE_NODE_CALL = 28
constexpr

◆ QUE_NODE_COL_ASSIGNMENT

constexpr uint32_t QUE_NODE_COL_ASSIGNMENT = 24
constexpr

◆ QUE_NODE_COMMIT

constexpr uint32_t QUE_NODE_COMMIT = 11
constexpr

◆ QUE_NODE_CONTROL_STAT

constexpr uint32_t QUE_NODE_CONTROL_STAT = 1024
constexpr

◆ QUE_NODE_CURSOR

constexpr uint32_t QUE_NODE_CURSOR = 5
constexpr

◆ QUE_NODE_ELSIF

constexpr uint32_t QUE_NODE_ELSIF = 27
constexpr

◆ QUE_NODE_EXIT

constexpr uint32_t QUE_NODE_EXIT = 29
constexpr

◆ QUE_NODE_FETCH

constexpr uint32_t QUE_NODE_FETCH = 22
constexpr

◆ QUE_NODE_FOR

constexpr uint32_t QUE_NODE_FOR = 25 + QUE_NODE_CONTROL_STAT
constexpr

◆ QUE_NODE_FORK

constexpr uint32_t QUE_NODE_FORK = 8
constexpr

◆ QUE_NODE_FUNC

constexpr uint32_t QUE_NODE_FUNC = 16
constexpr

◆ QUE_NODE_IF

constexpr uint32_t QUE_NODE_IF = 19 + QUE_NODE_CONTROL_STAT
constexpr

◆ QUE_NODE_INSERT

constexpr uint32_t QUE_NODE_INSERT = 2
constexpr

◆ QUE_NODE_LOCK

constexpr uint32_t QUE_NODE_LOCK = 1
constexpr

◆ QUE_NODE_OPEN

constexpr uint32_t QUE_NODE_OPEN = 23
constexpr

◆ QUE_NODE_ORDER

constexpr uint32_t QUE_NODE_ORDER = 17
constexpr

◆ QUE_NODE_PROC

constexpr uint32_t QUE_NODE_PROC = 18 + QUE_NODE_CONTROL_STAT
constexpr

◆ QUE_NODE_PURGE

constexpr uint32_t QUE_NODE_PURGE = 13
constexpr

◆ QUE_NODE_RES_WORD

constexpr uint32_t QUE_NODE_RES_WORD = 15
constexpr

◆ QUE_NODE_RETURN

constexpr uint32_t QUE_NODE_RETURN = 26
constexpr

◆ QUE_NODE_ROLLBACK

constexpr uint32_t QUE_NODE_ROLLBACK = 12
constexpr

◆ QUE_NODE_SELECT

constexpr uint32_t QUE_NODE_SELECT = 6
constexpr

◆ QUE_NODE_SYMBOL

constexpr uint32_t QUE_NODE_SYMBOL = 14
constexpr

◆ QUE_NODE_THR

constexpr uint32_t QUE_NODE_THR = 9
constexpr

◆ QUE_NODE_UNDO

constexpr uint32_t QUE_NODE_UNDO = 10
constexpr

◆ QUE_NODE_UPDATE

constexpr uint32_t QUE_NODE_UPDATE = 4
constexpr

◆ QUE_NODE_WHILE

constexpr uint32_t QUE_NODE_WHILE = 20 + QUE_NODE_CONTROL_STAT
constexpr

◆ QUE_THR_MAGIC_FREED

constexpr uint32_t QUE_THR_MAGIC_FREED = 123461526
constexpr

◆ QUE_THR_MAGIC_N

constexpr uint32_t QUE_THR_MAGIC_N = 8476583
constexpr

◆ que_thr_mutex

ib_mutex_t que_thr_mutex
extern

Mutex protecting the query threads.