24#ifndef MYSQL_ASYNC_INCLUDED
25#define MYSQL_ASYNC_INCLUDED
207#define NET_EXTENSION_PTR(N) \
208 ((NET_EXTENSION *)((N)->extension ? (N)->extension : NULL))
210#define NET_ASYNC_DATA(M) \
211 ((NET_EXTENSION_PTR(M)) ? (NET_EXTENSION_PTR(M)->net_async_context) : NULL)
264 const unsigned char *packet,
265 size_t len,
bool *res);
267 NET *
net,
unsigned char command,
const unsigned char *prefix,
268 size_t prefix_len,
const unsigned char *packet,
size_t packet_len,
#define COMP_HEADER_SIZE
compression header extra size
Definition: mysql_com.h:1123
#define NET_HEADER_SIZE
standard header size
Definition: mysql_com.h:1122
unsigned char uchar
Definition: my_inttypes.h:52
This file defines the client API to MySQL and also the ABI of the dynamically linked libmysqlclient.
NET_EXTENSION * net_extension_init()
Definition: net_serv.cc:100
struct MYSQL_ASYNC MYSQL_ASYNC
int mysql_get_socket_descriptor(MYSQL *mysql)
Definition: client.cc:4771
net_read_query_result_status
Different states when reading a query result.
Definition: mysql_async.h:58
@ NET_ASYNC_READ_QUERY_RESULT_FIELD_COUNT
read Ok or read field count sent as part of COM_QUERY
Definition: mysql_async.h:60
@ NET_ASYNC_READ_QUERY_RESULT_IDLE
default state
Definition: mysql_async.h:59
@ NET_ASYNC_READ_QUERY_RESULT_FIELD_INFO
read result of above COM_* command
Definition: mysql_async.h:63
void net_extension_free(NET *)
Definition: net_serv.cc:109
enum net_async_status net_write_command_nonblocking(NET *net, unsigned char command, const unsigned char *prefix, size_t prefix_len, const unsigned char *packet, size_t packet_len, bool *res)
Send a command to the server in asynchronous way.
Definition: net_serv.cc:787
net_async_read_packet_state
Reading a packet is a multi-step process, so we have a state machine.
Definition: mysql_async.h:49
@ NET_ASYNC_PACKET_READ_COMPLETE
state to define if packet is completely read
Definition: mysql_async.h:53
@ NET_ASYNC_PACKET_READ_BODY
read packet contents
Definition: mysql_async.h:52
@ NET_ASYNC_PACKET_READ_IDLE
default packet read state
Definition: mysql_async.h:50
@ NET_ASYNC_PACKET_READ_HEADER
read packet header
Definition: mysql_async.h:51
enum net_async_status my_net_read_nonblocking(NET *net, unsigned long *len_ptr)
net_async_block_state
Async operations are broadly classified into 3 phases: Connection phase, phase of sending data to ser...
Definition: mysql_async.h:81
@ NET_NONBLOCKING_READ
Definition: mysql_async.h:83
@ NET_NONBLOCKING_WRITE
Definition: mysql_async.h:84
@ NET_NONBLOCKING_CONNECT
Definition: mysql_async.h:82
net_send_command_status
Sending a command involves the write as well as reading the status.
Definition: mysql_async.h:68
@ NET_ASYNC_SEND_COMMAND_IDLE
default send command state
Definition: mysql_async.h:69
@ NET_ASYNC_SEND_COMMAND_READ_STATUS
read result of above COM_* command
Definition: mysql_async.h:71
@ NET_ASYNC_SEND_COMMAND_WRITE_COMMAND
send COM_* command
Definition: mysql_async.h:70
struct NET_ASYNC NET_ASYNC
mysql_async_query_state_enum
Query execution in an asynchronous fashion is broadly divided into 3 states which is described in bel...
Definition: mysql_async.h:229
@ QUERY_READING_RESULT
Definition: mysql_async.h:232
@ QUERY_IDLE
Definition: mysql_async.h:230
@ QUERY_SENDING
Definition: mysql_async.h:231
mysql_async_operation_status
Asynchronous operations are broadly classified into 2 categories.
Definition: mysql_async.h:219
@ ASYNC_OP_CONNECT
Definition: mysql_async.h:221
@ ASYNC_OP_UNSET
Definition: mysql_async.h:220
@ ASYNC_OP_QUERY
Definition: mysql_async.h:222
enum net_async_status my_net_write_nonblocking(NET *net, const unsigned char *packet, size_t len, bool *res)
Definition: net_serv.cc:839
net_async_operation
This enum is to represent different asynchronous operations like reading the network,...
Definition: mysql_async.h:41
@ NET_ASYNC_OP_IDLE
default state
Definition: mysql_async.h:42
@ NET_ASYNC_OP_READING
used by my_net_read calls
Definition: mysql_async.h:43
@ NET_ASYNC_OP_WRITING
used by my_net_write calls
Definition: mysql_async.h:44
@ NET_ASYNC_OP_COMPLETE
network read or write is complete
Definition: mysql_async.h:45
Definition: instrumented_condition_variable.h:32
net_async_status
Definition: plugin_auth_common.h:137
@ NET_ASYNC_COMPLETE
Definition: plugin_auth_common.h:138
Definition: mysql_async.h:235
MYSQL_ROWS ** prev_row_ptr
a pointer to keep track of the previous row of the current result row
Definition: mysql_async.h:239
enum mysql_async_query_state_enum async_query_state
If a query is running, this is its state.
Definition: mysql_async.h:247
unsigned int async_read_metadata_cur_field
Definition: mysql_async.h:252
MYSQL_FIELD * async_read_metadata_fields
Definition: mysql_async.h:250
struct mysql_async_connect * connect_context
Context needed to track the state of a connection being established.
Definition: mysql_async.h:241
MYSQL_ROWS async_read_metadata_data
Definition: mysql_async.h:251
struct MYSQL_RES * async_store_result_result
a pointer to keep track of the result sets
Definition: mysql_async.h:254
unsigned long async_qp_data_length
the query parameters data length
Definition: mysql_async.h:259
size_t async_query_length
Size of the current running async query.
Definition: mysql_async.h:245
MYSQL_DATA * rows_result_buffer
Buffer storing the rows result for cli_read_rows_nonblocking.
Definition: mysql_async.h:237
unsigned long * async_read_metadata_field_len
context needed to support metadata read operation
Definition: mysql_async.h:249
uchar * async_qp_data
the query parameters data
Definition: mysql_async.h:257
enum mysql_async_operation_status async_op_status
Status of the current async op.
Definition: mysql_async.h:243
Definition: mysql_async.h:116
struct io_vec * async_write_vector
Definition: mysql_async.h:146
enum net_async_operation async_operation
Our current operation.
Definition: mysql_async.h:125
size_t async_write_vector_size
Definition: mysql_async.h:147
unsigned char inline_async_write_header[NET_HEADER_SIZE+COMP_HEADER_SIZE+NET_HEADER_SIZE+1]
If the packet length is less than MAX_PACKET_LENGTH then use a static array to hold the meta packet h...
Definition: mysql_async.h:188
enum net_async_block_state async_blocking_state
Blocking state.
Definition: mysql_async.h:123
struct io_vec inline_async_write_vector[3]
Definition: mysql_async.h:189
bool read_rows_is_first_read
Simple state to know if we're reading the first row, and command/query statuses.
Definition: mysql_async.h:132
enum net_send_command_status async_send_command_status
Definition: mysql_async.h:133
size_t async_packet_length
Size of the packet we're currently reading.
Definition: mysql_async.h:139
size_t async_bytes_wanted
How many bytes we want to read.
Definition: mysql_async.h:127
unsigned char * cur_pos
The position in buff we continue reads from when data is next available.
Definition: mysql_async.h:121
unsigned char * async_write_headers
Headers and vector for our async writes; see net_serv.c for detailed description.
Definition: mysql_async.h:145
unsigned char ** compressed_write_buffers
Keep track of compressed buffers.
Definition: mysql_async.h:192
size_t compressed_buffers_size
Size of the compressed buffer.
Definition: mysql_async.h:194
enum net_async_read_packet_state async_packet_read_state
State when waiting on an async read.
Definition: mysql_async.h:137
size_t async_write_vector_current
Definition: mysql_async.h:148
enum net_read_query_result_status async_read_query_result_status
Definition: mysql_async.h:134
Definition: mysql_async.h:199
mysql_compress_context compress_ctx
Definition: mysql_async.h:201
NET_ASYNC * net_async_context
Definition: mysql_async.h:200
Definition: mysql_com.h:914
Represents the packet to be sent on wire asynchronously.
Definition: mysql_async.h:90
size_t iov_len
Number of bytes to transfer.
Definition: mysql_async.h:92
void * iov_base
Starting address.
Definition: mysql_async.h:91
Local state for multipacket processing.
Definition: mysql_async.h:96
size_t mp_buf_length
Definition: mysql_async.h:100
void reset()
Definition: mysql_async.h:105
ulong mp_total_length
Definition: mysql_async.h:103
size_t mp_first_packet_offset
Definition: mysql_async.h:99
uint mp_multi_byte_packet
Definition: mysql_async.h:101
net_async_status mp_status
Definition: mysql_async.h:97
ulong mp_save_pos
Definition: mysql_async.h:102
size_t mp_start_of_packet
Definition: mysql_async.h:98
Definition: client_async_authentication.h:164
Compression context information.
Definition: my_compress.h:74
command
Definition: version_token.cc:280