MySQL 8.0.31
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, 2022, 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 also distributed 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 included with MySQL.
16
17 This program is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 GNU General Public License, version 2.0, for more details.
21
22 You should have received a copy of the GNU General Public License
23 along with this program; if not, write to the Free Software
24 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
25
26/**
27 @file include/sql_common.h
28*/
29
30#include <mysql.h>
31#include <stddef.h>
32#include <sys/types.h>
33
34#include "errmsg.h"
35#include "my_command.h"
36#include "my_compiler.h"
37#include "my_inttypes.h"
38#include "my_list.h"
39#include "mysql_com.h"
40#ifdef MYSQL_SERVER
41#include "mysql_com_server.h"
42#endif
43struct MEM_ROOT;
44
45#ifdef __cplusplus
46extern "C" {
47#endif
48
49#ifdef IMPORT_UNKNOWN_SQLSTATE
50__declspec(dllimport)
51#endif
52 extern const char *unknown_sqlstate;
53extern const char *cant_connect_sqlstate;
54extern const char *not_error_sqlstate;
55
56/*
57 Free all memory allocated in MYSQL handle except the
58 current options.
59*/
61
62/*
63 Clear connection options stored in MYSQL handle and
64 free memory used by them.
65*/
67
68/**
69 The structure is used to hold the state change information
70 received from the server. LIST functions are used for manipulation
71 of the members of the structure.
72*/
74 /** head_node->data is a LEX_STRING which contains the variable name. */
77};
78
79/**
80 Store the change info received from the server in an array of linked lists
81 with STATE_INFO_NODE elements (one per state type).
82*/
83struct STATE_INFO {
84 /** Array of STATE_NODE_INFO elements (one per state type). */
86};
87
88/*
89 Access to MYSQL::extension member.
90
91 Note: functions mysql_extension_{init,free}() are defined
92 in client.c.
93*/
94
95struct st_mysql_trace_info;
97
99 struct st_mysql_trace_info *trace_data;
101 /* Struct to track the state of asynchronous operations */
103#ifdef MYSQL_SERVER
104 // Used by replication to pass around compression context data.
106 /* used by mysql_init() api for mysql command service related information */
107 void *mcs_extn;
108#endif
109 struct {
111 char **names;
114};
115
116/* "Constructor/destructor" for MYSQL extension structure. */
119/* cleanup for the MYSQL extension bind structure */
121/*
122 Note: Allocated extension structure is freed in mysql_close_free()
123 called by mysql_close().
124*/
125#define MYSQL_EXTENSION_PTR(H) \
126 ((MYSQL_EXTENSION *)((H)->extension \
127 ? (H)->extension \
128 : ((H)->extension = mysql_extension_init(H))))
129
130#define ASYNC_DATA(M) \
131 (NULL != (M) ? (MYSQL_EXTENSION_PTR(M)->mysql_async_context) : NULL)
132/**
133 Sets the MYSQL_EXTENSION::server_extn attribute by the use of NET_SERVER which
134 contains information about compression context and compression attributes.
135 This attribute needs to be set each time mysql_real_connect() is called to
136 make a connection. When a connection attempt fails or when a connection is
137 closed, as part of the MYSQL handle cleanup, mysql_close_free() is called and
138 that will free MYSQL_EXTENSION::server_extn.
139
140 mysql_close_free() will free all the memory allocated in the MYSQL handle but
141 preserves MYSQL::options. These options are later free'd by
142 mysql_close_free_options() unless the client flag CLIENT_REMEMBER_OPTIONS is
143 set.
144
145 @param mysql The MYSQL handle
146 @param extn The NET_SERVER handle that contains compression context info.
147*/
148#ifdef MYSQL_SERVER
150 MYSQL_EXTENSION_PTR(mysql)->server_extn = extn;
151}
152#endif /* MYSQL_SERVER*/
153
154/*
155 Maximum allowed authentication plugins for a given user account.
156*/
157#define MAX_AUTHENTICATION_FACTOR 3
158/*
159 Placeholder to save plugin name and password of 1st, 2nd and 3rd
160 factor authentication methods.
161*/
164 char *password;
165};
166
170 char *ssl_crl; /* PEM CRL file */
171 char *ssl_crlpath; /* PEM directory of CRL-s? */
176 bool get_server_public_key; /* Former ssl_enforce */
177 char *tls_version; /* TLS version option */
178 long ssl_ctx_flags; /* SSL ctx options flag */
179 unsigned int ssl_mode;
180 unsigned int retry_count;
181 unsigned int ssl_fips_mode; /* SSL fips mode for enforced encryption.*/
189 void *ssl_session_data; /** the session serialization to use */
190};
191
193 MYSQL *(*connect_method)(mysql_async_connect *connect_args);
196 const unsigned char *header, size_t header_length,
197 const unsigned char *arg, size_t arg_length,
198 bool skip_check, MYSQL_STMT *stmt);
199 MYSQL_DATA *(*read_rows)(MYSQL *mysql, MYSQL_FIELD *mysql_fields,
200 unsigned int fields);
201 MYSQL_RES *(*use_result)(MYSQL *mysql);
203 void (*fetch_lengths)(unsigned long *to, MYSQL_ROW column,
204 unsigned int field_count);
205 void (*flush_use_result)(MYSQL *mysql, bool flush_all_results);
207#if !defined(MYSQL_SERVER) && !defined(MYSQL_COMPONENT)
208 MYSQL_FIELD *(*list_fields)(MYSQL *mysql);
209 bool (*read_prepare_result)(MYSQL *mysql, MYSQL_STMT *stmt);
210 int (*stmt_execute)(MYSQL_STMT *stmt);
211 int (*read_binary_rows)(MYSQL_STMT *stmt);
212 int (*unbuffered_fetch)(MYSQL *mysql, char **row);
213 const char *(*read_statistics)(MYSQL *mysql);
214 bool (*next_result)(MYSQL *mysql);
215 int (*read_rows_from_cursor)(MYSQL_STMT *stmt);
216 void (*free_rows)(MYSQL_DATA *cur);
217#endif
221 const unsigned char *header, unsigned long header_length,
222 const unsigned char *arg, unsigned long arg_length, bool skip_check,
223 MYSQL_STMT *stmt, bool *error);
225 MYSQL_FIELD *mysql_fields,
226 unsigned int fields,
229 bool flush_all_results);
232 ulong *res);
233};
234
235#define simple_command(mysql, command, arg, length, skip_check) \
236 ((mysql)->methods \
237 ? (*(mysql)->methods->advanced_command)(mysql, command, 0, 0, arg, \
238 length, skip_check, NULL) \
239 : (set_mysql_error(mysql, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate), \
240 1))
241#define simple_command_nonblocking(mysql, command, arg, length, skip_check, \
242 error) \
243 (*(mysql)->methods->advanced_command_nonblocking)( \
244 mysql, command, 0, 0, arg, length, skip_check, NULL, error)
245
246#define stmt_command(mysql, command, arg, length, stmt) \
247 ((mysql)->methods \
248 ? (*(mysql)->methods->advanced_command)(mysql, command, 0, 0, arg, \
249 length, 1, stmt) \
250 : (set_mysql_error(mysql, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate), \
251 1))
252
255 uint fields, bool default_value,
256 uint server_capabilities);
258 unsigned long field_count,
259 unsigned int fields);
260MYSQL_FIELD *cli_read_metadata(MYSQL *mysql, unsigned long field_count,
261 unsigned int fields);
264void free_rows(MYSQL_DATA *cur);
266void end_server(MYSQL *mysql);
269 const char *filename, const char *group);
271 const unsigned char *header, size_t header_length,
272 const unsigned char *arg, size_t arg_length,
273 bool skip_check, MYSQL_STMT *stmt);
274unsigned long cli_safe_read(MYSQL *mysql, bool *is_data_packet);
276 bool *is_data_packet,
277 ulong *res);
278unsigned long cli_safe_read_with_ok(MYSQL *mysql, bool parse_ok,
279 bool *is_data_packet);
280void net_clear_error(NET *net);
281void set_stmt_errmsg(MYSQL_STMT *stmt, NET *net);
282void set_stmt_error(MYSQL_STMT *stmt, int errcode, const char *sqlstate,
283 const char *err);
284void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate);
285void set_mysql_extended_error(MYSQL *mysql, int errcode, const char *sqlstate,
286 const char *format, ...)
287 MY_ATTRIBUTE((format(printf, 4, 5)));
288
289/* client side of the pluggable authentication */
291
293int run_plugin_auth(MYSQL *mysql, char *data, uint data_len,
294 const char *data_plugin, const char *db);
297
299
304void read_ok_ex(MYSQL *mysql, unsigned long len);
305
306bool fix_param_bind(MYSQL_BIND *param, uint idx);
308 NET *net, unsigned int param_count, MYSQL_BIND *params, const char **names,
309 unsigned long n_param_sets, uchar **ret_data, ulong *ret_length,
310 uchar send_types_to_server, bool send_named_params,
311 bool send_parameter_set_count, bool send_parameter_count_when_zero);
312
313#ifdef __cplusplus
314}
315#endif
316
317#define protocol_41(A) ((A)->server_capabilities & CLIENT_PROTOCOL_41)
318
319/*
320 AuthNextFactor packet is defined to have value 2 in 1st byte.
321*/
322#define AUTH_NEXT_FACTOR_PACKETTYPE 2
323#endif /* SQL_COMMON_INCLUDED */
Error messages for MySQL clients.
enum_server_command
A list of all MySQL protocol commands.
Definition: my_command.h:47
Header for compiler-dependent features.
Some integer typedefs for easier portability.
unsigned char uchar
Definition: my_inttypes.h:51
static const char * filepath
Definition: myisamlog.cc:93
static MYSQL mysql
Definition: mysql.cc:153
This file defines the client API to MySQL and also the ABI of the dynamically linked libmysqlclient.
char ** MYSQL_ROW
Definition: mysql.h:144
Common definition between mysql server & client.
#define MYSQL_VIO
Definition: mysql_com.h:891
#define SESSION_TRACK_END
End of enum_session_state_type.
Definition: mysql_com.h:1079
Definitions private to the server, used in the networking layer to notify specific events.
Log info(cout, "NOTE")
Definition: buf0block_hint.cc:29
static Value err()
Create a Value object that represents an error condition.
Definition: json_binary.cc:909
Json_data_extension ext
Definition: backend.cc:50
Definition: buffer.h:43
Definition: options.cc:48
const char * filename
Definition: pfs_example_component_population.cc:66
struct result result
Definition: result.h:33
net_async_status
Definition: plugin_auth_common.h:135
void mysql_extension_bind_free(MYSQL_EXTENSION *ext)
Definition: client.cc:3360
const char * unknown_sqlstate
Definition: client.cc:213
void mysql_close_free(MYSQL *mysql)
Definition: client.cc:7413
void set_stmt_errmsg(MYSQL_STMT *stmt, NET *net)
Set statement error code, sqlstate, and error message from NET.
Definition: libmysql.cc:1205
void end_server(MYSQL *mysql)
Definition: client.cc:1885
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:384
bool libmysql_cleartext_plugin_enabled
Definition: client.cc:5472
bool fix_param_bind(MYSQL_BIND *param, uint idx)
Definition: bind_params.cc:407
bool mysql_reconnect(MYSQL *mysql)
Definition: client.cc:7082
int mysql_client_plugin_init()
Initializes the client plugin layer.
Definition: client_plugin.cc:319
#define MYSQL_EXTENSION_PTR(H)
Definition: sql_common.h:125
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:367
const char * cant_connect_sqlstate
Definition: client.cc:215
unsigned long cli_safe_read(MYSQL *mysql, bool *is_data_packet)
Read a packet from server.
Definition: client.cc:1307
MYSQL_RES * use_result(MYSQL *mysql)
Definition: client.cc:8174
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:1152
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:1319
void free_rows(MYSQL_DATA *cur)
Definition: client.cc:1311
void mysql_client_plugin_deinit()
Deinitializes the client plugin layer.
Definition: client_plugin.cc:359
unsigned long cli_safe_read_with_ok(MYSQL *mysql, bool parse_ok, bool *is_data_packet)
Read a packet from server.
Definition: client.cc:1174
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:310
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:42
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:6090
MYSQL_FIELD * unpack_fields(MYSQL *mysql, MYSQL_ROWS *data, MEM_ROOT *alloc, uint fields, bool default_value, uint server_capabilities)
Definition: client.cc:2488
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:5516
void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate)
Set the internal error message to mysql handler.
Definition: client.cc:336
#define MAX_AUTHENTICATION_FACTOR
Definition: sql_common.h:157
void set_stmt_error(MYSQL_STMT *stmt, int errcode, const char *sqlstate, const char *err)
Set statement error code, sqlstate, and error message from given errcode and sqlstate.
Definition: libmysql.cc:1185
CHARSET_INFO * default_client_charset_info
Definition: client.cc:225
void free_old_query(MYSQL *mysql)
Definition: client.cc:1610
uchar * send_client_connect_attrs(MYSQL *mysql, uchar *buf)
Definition: client.cc:4112
const char * not_error_sqlstate
Definition: client.cc:214
MYSQL_EXTENSION * mysql_extension_init(MYSQL *)
Definition: client.cc:3339
void mysql_close_free_options(MYSQL *mysql)
Definition: client.cc:7372
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:149
void mysql_extension_free(MYSQL_EXTENSION *)
Definition: client.cc:3371
struct st_mysql_client_plugin * mysql_client_builtins[]
Definition: client.cc:4083
void mysql_read_default_options(struct st_mysql_options *options, const char *filename, const char *group)
Definition: client.cc:2103
Definition: m_ctype.h:382
Definition: my_list.h:35
The MEM_ROOT is a simple arena, where allocations are carved out of larger blocks.
Definition: my_alloc.h:82
Definition: mysql_async.h:211
Definition: mysql.h:652
Definition: mysql.h:162
Definition: sql_common.h:98
char ** names
Definition: sql_common.h:111
uint n_params
Definition: sql_common.h:110
struct MYSQL_ASYNC * mysql_async_context
Definition: sql_common.h:102
NET_SERVER * server_extn
Definition: sql_common.h:105
struct st_mysql_trace_info * trace_data
Definition: sql_common.h:99
STATE_INFO state_change
Definition: sql_common.h:100
void * mcs_extn
Definition: sql_common.h:107
MYSQL_BIND * bind
Definition: sql_common.h:112
struct MYSQL_EXTENSION::@8 bind_info
Definition: mysql.h:120
Definition: sql_common.h:192
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:219
MYSQL_ROW(* fetch_row)(MYSQL_RES *)
Definition: sql_common.h:202
enum net_async_status(* read_change_user_result_nonblocking)(MYSQL *mysql, ulong *res)
Definition: sql_common.h:231
bool(* read_query_result)(MYSQL *mysql)
Definition: sql_common.h:194
void(* fetch_lengths)(unsigned long *to, MYSQL_ROW column, unsigned int field_count)
Definition: sql_common.h:203
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:195
enum net_async_status(* read_rows_nonblocking)(MYSQL *mysql, MYSQL_FIELD *mysql_fields, unsigned int fields, MYSQL_DATA **result)
Definition: sql_common.h:224
void(* flush_use_result)(MYSQL *mysql, bool flush_all_results)
Definition: sql_common.h:205
enum net_async_status(* read_query_result_nonblocking)(MYSQL *mysql)
Definition: sql_common.h:218
enum net_async_status(* next_result_nonblocking)(MYSQL *mysql)
Definition: sql_common.h:230
int(* read_change_user_result)(MYSQL *mysql)
Definition: sql_common.h:206
enum net_async_status(* flush_use_result_nonblocking)(MYSQL *mysql, bool flush_all_results)
Definition: sql_common.h:228
Definition: plugin_auth_common.h:120
Definition: mysql.h:338
Definition: mysql.h:152
Definition: mysql.h:679
Definition: mysql.h:298
Definition: client.cc:4108
Definition: mysql_com_server.h:58
Definition: mysql_com.h:910
The structure is used to hold the state change information received from the server.
Definition: sql_common.h:73
LIST * head_node
head_node->data is a LEX_STRING which contains the variable name.
Definition: sql_common.h:75
LIST * current_node
Definition: sql_common.h:76
Store the change info received from the server in an array of linked lists with STATE_INFO_NODE eleme...
Definition: sql_common.h:83
STATE_INFO_NODE info_list[SESSION_TRACK_END+1]
Array of STATE_NODE_INFO elements (one per state type).
Definition: sql_common.h:85
Definition: sql_common.h:162
char * plugin_name
Definition: sql_common.h:163
char * password
Definition: sql_common.h:164
Definition: client_async_authentication.h:140
Definition: client_plugin.h:113
Definition: sql_common.h:167
unsigned int ssl_fips_mode
Definition: sql_common.h:181
bool get_server_public_key
Definition: sql_common.h:176
char * default_auth
Definition: sql_common.h:169
char * compression_algorithm
Definition: sql_common.h:183
long ssl_ctx_flags
Definition: sql_common.h:178
char * ssl_crl
Definition: sql_common.h:170
char * tls_version
Definition: sql_common.h:177
void * ssl_session_data
Definition: sql_common.h:189
bool connection_compressed
Definition: sql_common.h:186
char * plugin_dir
Definition: sql_common.h:168
unsigned int retry_count
Definition: sql_common.h:180
bool enable_cleartext_plugin
Definition: sql_common.h:175
char * tls_ciphersuites
Definition: sql_common.h:182
struct client_authentication_info client_auth_info[MAX_AUTHENTICATION_FACTOR]
Definition: sql_common.h:188
unsigned int total_configured_compression_algorithms
Definition: sql_common.h:184
char * server_public_key_path
Definition: sql_common.h:173
size_t connection_attributes_length
Definition: sql_common.h:174
struct My_hash * connection_attributes
Definition: sql_common.h:172
unsigned int ssl_mode
Definition: sql_common.h:179
char * ssl_crlpath
Definition: sql_common.h:171
char * load_data_dir
Definition: sql_common.h:187
unsigned int zstd_compression_level
Definition: sql_common.h:185
Definition: mysql.h:224
unsigned int uint
Definition: uca-dump.cc:29
command
Definition: version_token.cc:279