MySQL 8.0.37
Source Code Documentation
sql_common.h
Go to the documentation of this file.
1#ifndef SQL_COMMON_INCLUDED
2#define SQL_COMMON_INCLUDED
3
4/* Copyright (c) 2003, 2024, Oracle and/or its affiliates.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License, version 2.0,
8 as published by the Free Software Foundation.
9
10 This program is designed to work with certain software (including
11 but not limited to OpenSSL) that is licensed under separate terms,
12 as designated in a particular file or component or in included license
13 documentation. The authors of MySQL hereby grant you an additional
14 permission to link the program and your derivative works with the
15 separately licensed software that they have either included with
16 the program or referenced in the documentation.
17
18 This program is distributed in the hope that it will be useful,
19 but WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 GNU General Public License, version 2.0, for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software
25 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
26
27/**
28 @file include/sql_common.h
29*/
30
31#include <mysql.h>
32#include <stddef.h>
33#include <sys/types.h>
34
35#include "errmsg.h"
36#include "my_command.h"
37#include "my_compiler.h"
38#include "my_inttypes.h"
39#include "my_list.h"
40#include "mysql_com.h"
41#ifdef MYSQL_SERVER
42#include "mysql_com_server.h"
43#endif
44struct MEM_ROOT;
45
46#ifdef __cplusplus
47extern "C" {
48#endif
49
50#ifdef IMPORT_UNKNOWN_SQLSTATE
51__declspec(dllimport)
52#endif
53 extern const char *unknown_sqlstate;
54extern const char *cant_connect_sqlstate;
55extern const char *not_error_sqlstate;
56
57/*
58 Free all memory allocated in MYSQL handle except the
59 current options.
60*/
62
63/*
64 Clear connection options stored in MYSQL handle and
65 free memory used by them.
66*/
68
69/**
70 The structure is used to hold the state change information
71 received from the server. LIST functions are used for manipulation
72 of the members of the structure.
73*/
75 /** head_node->data is a LEX_STRING which contains the variable name. */
78};
79
80/**
81 Store the change info received from the server in an array of linked lists
82 with STATE_INFO_NODE elements (one per state type).
83*/
84struct STATE_INFO {
85 /** Array of STATE_NODE_INFO elements (one per state type). */
87};
88
89/*
90 Access to MYSQL::extension member.
91
92 Note: functions mysql_extension_{init,free}() are defined
93 in client.c.
94*/
95
96struct st_mysql_trace_info;
98
100 struct st_mysql_trace_info *trace_data;
102 /* Struct to track the state of asynchronous operations */
104#ifdef MYSQL_SERVER
105 // Used by replication to pass around compression context data.
107 /* used by mysql_init() api for mysql command service related information */
108 void *mcs_extn;
109#endif
110 struct {
112 char **names;
115};
116
117/* "Constructor/destructor" for MYSQL extension structure. */
120/* cleanup for the MYSQL extension bind structure */
122/*
123 Note: Allocated extension structure is freed in mysql_close_free()
124 called by mysql_close().
125*/
126#define MYSQL_EXTENSION_PTR(H) \
127 ((MYSQL_EXTENSION *)((H)->extension \
128 ? (H)->extension \
129 : ((H)->extension = mysql_extension_init(H))))
130
131#define ASYNC_DATA(M) \
132 (NULL != (M) ? (MYSQL_EXTENSION_PTR(M)->mysql_async_context) : NULL)
133/**
134 Sets the MYSQL_EXTENSION::server_extn attribute by the use of NET_SERVER which
135 contains information about compression context and compression attributes.
136 This attribute needs to be set each time mysql_real_connect() is called to
137 make a connection. When a connection attempt fails or when a connection is
138 closed, as part of the MYSQL handle cleanup, mysql_close_free() is called and
139 that will free MYSQL_EXTENSION::server_extn.
140
141 mysql_close_free() will free all the memory allocated in the MYSQL handle but
142 preserves MYSQL::options. These options are later free'd by
143 mysql_close_free_options() unless the client flag CLIENT_REMEMBER_OPTIONS is
144 set.
145
146 @param mysql The MYSQL handle
147 @param extn The NET_SERVER handle that contains compression context info.
148*/
149#ifdef MYSQL_SERVER
151 MYSQL_EXTENSION_PTR(mysql)->server_extn = extn;
152}
153#endif /* MYSQL_SERVER*/
154
155/*
156 Maximum allowed authentication plugins for a given user account.
157*/
158#define MAX_AUTHENTICATION_FACTOR 3
159/*
160 Placeholder to save plugin name and password of 1st, 2nd and 3rd
161 factor authentication methods.
162*/
165 char *password;
166};
167
171 char *ssl_crl; /* PEM CRL file */
172 char *ssl_crlpath; /* PEM directory of CRL-s? */
177 bool get_server_public_key; /* Former ssl_enforce */
178 char *tls_version; /* TLS version option */
179 long ssl_ctx_flags; /* SSL ctx options flag */
180 unsigned int ssl_mode;
181 unsigned int retry_count;
182 unsigned int ssl_fips_mode; /* SSL fips mode for enforced encryption.*/
190 void *ssl_session_data; /** the session serialization to use */
191};
192
194 MYSQL *(*connect_method)(mysql_async_connect *connect_args);
197 const unsigned char *header, size_t header_length,
198 const unsigned char *arg, size_t arg_length,
199 bool skip_check, MYSQL_STMT *stmt);
200 MYSQL_DATA *(*read_rows)(MYSQL *mysql, MYSQL_FIELD *mysql_fields,
201 unsigned int fields);
202 MYSQL_RES *(*use_result)(MYSQL *mysql);
204 void (*fetch_lengths)(unsigned long *to, MYSQL_ROW column,
205 unsigned int field_count);
206 void (*flush_use_result)(MYSQL *mysql, bool flush_all_results);
208#if !defined(MYSQL_SERVER) && !defined(MYSQL_COMPONENT)
209 MYSQL_FIELD *(*list_fields)(MYSQL *mysql);
210 bool (*read_prepare_result)(MYSQL *mysql, MYSQL_STMT *stmt);
211 int (*stmt_execute)(MYSQL_STMT *stmt);
212 int (*read_binary_rows)(MYSQL_STMT *stmt);
213 int (*unbuffered_fetch)(MYSQL *mysql, char **row);
214 const char *(*read_statistics)(MYSQL *mysql);
215 bool (*next_result)(MYSQL *mysql);
216 int (*read_rows_from_cursor)(MYSQL_STMT *stmt);
217 void (*free_rows)(MYSQL_DATA *cur);
218#endif
222 const unsigned char *header, unsigned long header_length,
223 const unsigned char *arg, unsigned long arg_length, bool skip_check,
224 MYSQL_STMT *stmt, bool *error);
226 MYSQL_FIELD *mysql_fields,
227 unsigned int fields,
230 bool flush_all_results);
233 ulong *res);
234};
235
236#define simple_command(mysql, command, arg, length, skip_check) \
237 ((mysql)->methods \
238 ? (*(mysql)->methods->advanced_command)(mysql, command, 0, 0, arg, \
239 length, skip_check, NULL) \
240 : (set_mysql_error(mysql, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate), \
241 1))
242#define simple_command_nonblocking(mysql, command, arg, length, skip_check, \
243 error) \
244 (*(mysql)->methods->advanced_command_nonblocking)( \
245 mysql, command, 0, 0, arg, length, skip_check, NULL, error)
246
247#define stmt_command(mysql, command, arg, length, stmt) \
248 ((mysql)->methods \
249 ? (*(mysql)->methods->advanced_command)(mysql, command, 0, 0, arg, \
250 length, 1, stmt) \
251 : (set_mysql_error(mysql, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate), \
252 1))
253
256 uint fields, bool default_value,
257 uint server_capabilities);
259 unsigned long field_count,
260 unsigned int fields);
261MYSQL_FIELD *cli_read_metadata(MYSQL *mysql, unsigned long field_count,
262 unsigned int fields);
265void free_rows(MYSQL_DATA *cur);
267void end_server(MYSQL *mysql);
270 const char *filename, const char *group);
272 const unsigned char *header, size_t header_length,
273 const unsigned char *arg, size_t arg_length,
274 bool skip_check, MYSQL_STMT *stmt);
275unsigned long cli_safe_read(MYSQL *mysql, bool *is_data_packet);
277 bool *is_data_packet,
278 ulong *res);
279unsigned long cli_safe_read_with_ok(MYSQL *mysql, bool parse_ok,
280 bool *is_data_packet);
281void net_clear_error(NET *net);
282void set_stmt_errmsg(MYSQL_STMT *stmt, NET *net);
283void set_stmt_error(MYSQL_STMT *stmt, int errcode, const char *sqlstate);
284void set_stmt_extended_error(MYSQL_STMT *stmt, int errcode,
285 const char *sqlstate, const char *format, ...)
286 MY_ATTRIBUTE((format(printf, 4, 5)));
287void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate);
288void set_mysql_extended_error(MYSQL *mysql, int errcode, const char *sqlstate,
289 const char *format, ...)
290 MY_ATTRIBUTE((format(printf, 4, 5)));
291
292/* client side of the pluggable authentication */
294
296int run_plugin_auth(MYSQL *mysql, char *data, uint data_len,
297 const char *data_plugin, const char *db);
300
302
307void read_ok_ex(MYSQL *mysql, unsigned long len);
308
309bool fix_param_bind(MYSQL_BIND *param, uint idx);
311 NET *net, unsigned int param_count, MYSQL_BIND *params, const char **names,
312 unsigned long n_param_sets, uchar **ret_data, ulong *ret_length,
313 uchar send_types_to_server, bool send_named_params,
314 bool send_parameter_set_count, bool send_parameter_count_when_zero);
315
316#ifdef __cplusplus
317}
318#endif
319
320#define protocol_41(A) ((A)->server_capabilities & CLIENT_PROTOCOL_41)
321
322/*
323 AuthNextFactor packet is defined to have value 2 in 1st byte.
324*/
325#define AUTH_NEXT_FACTOR_PACKETTYPE 2
326#endif /* SQL_COMMON_INCLUDED */
Error messages for MySQL clients.
enum_server_command
A list of all MySQL protocol commands.
Definition: my_command.h:48
Header for compiler-dependent features.
Some integer typedefs for easier portability.
unsigned char uchar
Definition: my_inttypes.h:52
static const char * filepath
Definition: myisamlog.cc:94
static MYSQL mysql
Definition: mysql.cc:154
This file defines the client API to MySQL and also the ABI of the dynamically linked libmysqlclient.
char ** MYSQL_ROW
Definition: mysql.h:145
Common definition between mysql server & client.
#define MYSQL_VIO
Definition: mysql_com.h:894
#define SESSION_TRACK_END
End of enum_session_state_type.
Definition: mysql_com.h:1082
Definitions private to the server, used in the networking layer to notify specific events.
Log info(cout, "NOTE")
Definition: buf0block_hint.cc:30
Json_data_extension ext
Definition: backend.cc:51
Definition: instrumented_condition_variable.h:32
Definition: buffer.h:45
Definition: options.cc:49
const char * filename
Definition: pfs_example_component_population.cc:67
struct result result
Definition: result.h:34
net_async_status
Definition: plugin_auth_common.h:136
void mysql_extension_bind_free(MYSQL_EXTENSION *ext)
Definition: client.cc:3362
const char * unknown_sqlstate
Definition: client.cc:214
void set_stmt_extended_error(MYSQL_STMT *stmt, int errcode, const char *sqlstate, const char *format,...)
Set statement error code, sqlstate, and error message from given errcode and sqlstate.
Definition: libmysql.cc:1201
void mysql_close_free(MYSQL *mysql)
Definition: client.cc:7458
void set_stmt_errmsg(MYSQL_STMT *stmt, NET *net)
Set statement error code, sqlstate, and error message from NET.
Definition: libmysql.cc:1222
void end_server(MYSQL *mysql)
Definition: client.cc:1887
void set_mysql_extended_error(MYSQL *mysql, int errcode, const char *sqlstate, const char *format,...)
Set an error message on the client.
Definition: client.cc:385
bool libmysql_cleartext_plugin_enabled
Definition: client.cc:5474
bool fix_param_bind(MYSQL_BIND *param, uint idx)
Definition: bind_params.cc:408
bool mysql_reconnect(MYSQL *mysql)
Definition: client.cc:7127
int mysql_client_plugin_init()
Initializes the client plugin layer.
Definition: client_plugin.cc:320
#define MYSQL_EXTENSION_PTR(H)
Definition: sql_common.h:126
MYSQL_FIELD * cli_read_metadata(MYSQL *mysql, unsigned long field_count, unsigned int fields)
void mpvio_info(MYSQL_VIO vio, MYSQL_PLUGIN_VIO_INFO *info)
void net_clear_error(NET *net)
Clear possible error state of struct NET.
Definition: client.cc:368
const char * cant_connect_sqlstate
Definition: client.cc:216
unsigned long cli_safe_read(MYSQL *mysql, bool *is_data_packet)
Read a packet from server.
Definition: client.cc:1309
MYSQL_RES * use_result(MYSQL *mysql)
Definition: client.cc:8223
void read_ok_ex(MYSQL *mysql, unsigned long len)
enum net_async_status cli_safe_read_nonblocking(MYSQL *mysql, bool *is_data_packet, ulong *res)
Its a non blocking version of cli_safe_read.
Definition: client.cc:1154
bool cli_advanced_command(MYSQL *mysql, enum enum_server_command command, const unsigned char *header, size_t header_length, const unsigned char *arg, size_t arg_length, bool skip_check, MYSQL_STMT *stmt)
Definition: client.cc:1321
void free_rows(MYSQL_DATA *cur)
Definition: client.cc:1313
void mysql_client_plugin_deinit()
Deinitializes the client plugin layer.
Definition: client_plugin.cc:360
unsigned long cli_safe_read_with_ok(MYSQL *mysql, bool parse_ok, bool *is_data_packet)
Read a packet from server.
Definition: client.cc:1176
bool mysql_int_serialize_param_data(NET *net, unsigned int param_count, MYSQL_BIND *params, const char **names, unsigned long n_param_sets, uchar **ret_data, ulong *ret_length, uchar send_types_to_server, bool send_named_params, bool send_parameter_set_count, bool send_parameter_count_when_zero)
Serialize the query parameters.
Definition: bind_params.cc:311
int is_file_or_dir_world_writable(const char *filepath)
Check if a file/dir is world-writable (only on non-Windows platforms)
Definition: my_path_permissions.cc:43
MYSQL_FIELD * cli_read_metadata_ex(MYSQL *mysql, MEM_ROOT *alloc, unsigned long field_count, unsigned int fields)
MYSQL * connect_helper(mysql_async_connect *ctx)
Definition: client.cc:6130
MYSQL_FIELD * unpack_fields(MYSQL *mysql, MYSQL_ROWS *data, MEM_ROOT *alloc, uint fields, bool default_value, uint server_capabilities)
Definition: client.cc:2490
int run_plugin_auth(MYSQL *mysql, char *data, uint data_len, const char *data_plugin, const char *db)
Client side of the plugin driver authentication.
Definition: client.cc:5542
void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate)
Set the internal error message to mysql handler.
Definition: client.cc:337
#define MAX_AUTHENTICATION_FACTOR
Definition: sql_common.h:158
CHARSET_INFO * default_client_charset_info
Definition: client.cc:226
void free_old_query(MYSQL *mysql)
Definition: client.cc:1612
uchar * send_client_connect_attrs(MYSQL *mysql, uchar *buf)
Definition: client.cc:4114
const char * not_error_sqlstate
Definition: client.cc:215
MYSQL_EXTENSION * mysql_extension_init(MYSQL *)
Definition: client.cc:3341
void set_stmt_error(MYSQL_STMT *stmt, int errcode, const char *sqlstate)
Set statement error code, sqlstate, and error message from given errcode and sqlstate.
Definition: libmysql.cc:1186
void mysql_close_free_options(MYSQL *mysql)
Definition: client.cc:7417
void mysql_extension_set_server_extn(MYSQL *mysql, NET_SERVER *extn)
Sets the MYSQL_EXTENSION::server_extn attribute by the use of NET_SERVER which contains information a...
Definition: sql_common.h:150
void mysql_extension_free(MYSQL_EXTENSION *)
Definition: client.cc:3373
struct st_mysql_client_plugin * mysql_client_builtins[]
Definition: client.cc:4085
void mysql_read_default_options(struct st_mysql_options *options, const char *filename, const char *group)
Definition: client.cc:2105
Definition: m_ctype.h:385
Definition: my_list.h:36
The MEM_ROOT is a simple arena, where allocations are carved out of larger blocks.
Definition: my_alloc.h:83
Definition: mysql_async.h:212
Definition: mysql.h:656
Definition: mysql.h:163
Definition: sql_common.h:99
char ** names
Definition: sql_common.h:112
uint n_params
Definition: sql_common.h:111
struct MYSQL_ASYNC * mysql_async_context
Definition: sql_common.h:103
NET_SERVER * server_extn
Definition: sql_common.h:106
struct st_mysql_trace_info * trace_data
Definition: sql_common.h:100
STATE_INFO state_change
Definition: sql_common.h:101
void * mcs_extn
Definition: sql_common.h:108
MYSQL_BIND * bind
Definition: sql_common.h:113
struct MYSQL_EXTENSION::@8 bind_info
Definition: mysql.h:121
Definition: sql_common.h:193
enum net_async_status(* advanced_command_nonblocking)(MYSQL *mysql, enum enum_server_command command, const unsigned char *header, unsigned long header_length, const unsigned char *arg, unsigned long arg_length, bool skip_check, MYSQL_STMT *stmt, bool *error)
Definition: sql_common.h:220
MYSQL_ROW(* fetch_row)(MYSQL_RES *)
Definition: sql_common.h:203
enum net_async_status(* read_change_user_result_nonblocking)(MYSQL *mysql, ulong *res)
Definition: sql_common.h:232
bool(* read_query_result)(MYSQL *mysql)
Definition: sql_common.h:195
void(* fetch_lengths)(unsigned long *to, MYSQL_ROW column, unsigned int field_count)
Definition: sql_common.h:204
bool(* advanced_command)(MYSQL *mysql, enum enum_server_command command, const unsigned char *header, size_t header_length, const unsigned char *arg, size_t arg_length, bool skip_check, MYSQL_STMT *stmt)
Definition: sql_common.h:196
enum net_async_status(* read_rows_nonblocking)(MYSQL *mysql, MYSQL_FIELD *mysql_fields, unsigned int fields, MYSQL_DATA **result)
Definition: sql_common.h:225
void(* flush_use_result)(MYSQL *mysql, bool flush_all_results)
Definition: sql_common.h:206
enum net_async_status(* read_query_result_nonblocking)(MYSQL *mysql)
Definition: sql_common.h:219
enum net_async_status(* next_result_nonblocking)(MYSQL *mysql)
Definition: sql_common.h:231
int(* read_change_user_result)(MYSQL *mysql)
Definition: sql_common.h:207
enum net_async_status(* flush_use_result_nonblocking)(MYSQL *mysql, bool flush_all_results)
Definition: sql_common.h:229
Definition: plugin_auth_common.h:121
Definition: mysql.h:339
Definition: mysql.h:153
Definition: mysql.h:683
Definition: mysql.h:299
Definition: client.cc:4110
Definition: mysql_com_server.h:59
Definition: mysql_com.h:913
The structure is used to hold the state change information received from the server.
Definition: sql_common.h:74
LIST * head_node
head_node->data is a LEX_STRING which contains the variable name.
Definition: sql_common.h:76
LIST * current_node
Definition: sql_common.h:77
Store the change info received from the server in an array of linked lists with STATE_INFO_NODE eleme...
Definition: sql_common.h:84
STATE_INFO_NODE info_list[SESSION_TRACK_END+1]
Array of STATE_NODE_INFO elements (one per state type).
Definition: sql_common.h:86
Definition: sql_common.h:163
char * plugin_name
Definition: sql_common.h:164
char * password
Definition: sql_common.h:165
Definition: client_async_authentication.h:162
Definition: client_plugin.h:112
Definition: sql_common.h:168
unsigned int ssl_fips_mode
Definition: sql_common.h:182
bool get_server_public_key
Definition: sql_common.h:177
char * default_auth
Definition: sql_common.h:170
char * compression_algorithm
Definition: sql_common.h:184
long ssl_ctx_flags
Definition: sql_common.h:179
char * ssl_crl
Definition: sql_common.h:171
char * tls_version
Definition: sql_common.h:178
void * ssl_session_data
Definition: sql_common.h:190
bool connection_compressed
Definition: sql_common.h:187
char * plugin_dir
Definition: sql_common.h:169
unsigned int retry_count
Definition: sql_common.h:181
bool enable_cleartext_plugin
Definition: sql_common.h:176
char * tls_ciphersuites
Definition: sql_common.h:183
struct client_authentication_info client_auth_info[MAX_AUTHENTICATION_FACTOR]
Definition: sql_common.h:189
unsigned int total_configured_compression_algorithms
Definition: sql_common.h:185
char * server_public_key_path
Definition: sql_common.h:174
size_t connection_attributes_length
Definition: sql_common.h:175
struct My_hash * connection_attributes
Definition: sql_common.h:173
unsigned int ssl_mode
Definition: sql_common.h:180
char * ssl_crlpath
Definition: sql_common.h:172
char * load_data_dir
Definition: sql_common.h:188
unsigned int zstd_compression_level
Definition: sql_common.h:186
Definition: mysql.h:225
unsigned int uint
Definition: uca9-dump.cc:75
command
Definition: version_token.cc:280