MySQL 8.1.0
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, 2023, 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
43
44struct CHARSET_INFO;
45struct MEM_ROOT;
46
47#ifdef __cplusplus
48extern "C" {
49#endif
50
51#ifdef IMPORT_UNKNOWN_SQLSTATE
52__declspec(dllimport)
53#endif
54 extern const char *unknown_sqlstate;
55extern const char *cant_connect_sqlstate;
56extern const char *not_error_sqlstate;
57
58/*
59 Free all memory allocated in MYSQL handle except the
60 current options.
61*/
63
64/*
65 Clear connection options stored in MYSQL handle and
66 free memory used by them.
67*/
69
70/**
71 The structure is used to hold the state change information
72 received from the server. LIST functions are used for manipulation
73 of the members of the structure.
74*/
76 /** head_node->data is a LEX_STRING which contains the variable name. */
79};
80
81/**
82 Store the change info received from the server in an array of linked lists
83 with STATE_INFO_NODE elements (one per state type).
84*/
85struct STATE_INFO {
86 /** Array of STATE_NODE_INFO elements (one per state type). */
88};
89
90/*
91 Access to MYSQL::extension member.
92
93 Note: functions mysql_extension_{init,free}() are defined
94 in client.c.
95*/
96
97struct st_mysql_trace_info;
99
101 struct st_mysql_trace_info *trace_data;
103 /* Struct to track the state of asynchronous operations */
105#ifdef MYSQL_SERVER
106 // Used by replication to pass around compression context data.
108 /* used by mysql_init() api for mysql command service related information */
109 void *mcs_extn;
110#endif
111 struct {
113 char **names;
116};
117
118/* "Constructor/destructor" for MYSQL extension structure. */
121/* cleanup for the MYSQL extension bind structure */
123/*
124 Note: Allocated extension structure is freed in mysql_close_free()
125 called by mysql_close().
126*/
127#define MYSQL_EXTENSION_PTR(H) \
128 ((MYSQL_EXTENSION *)((H)->extension \
129 ? (H)->extension \
130 : ((H)->extension = mysql_extension_init(H))))
131
132#define ASYNC_DATA(M) \
133 (NULL != (M) ? (MYSQL_EXTENSION_PTR(M)->mysql_async_context) : NULL)
134/**
135 Sets the MYSQL_EXTENSION::server_extn attribute by the use of NET_SERVER which
136 contains information about compression context and compression attributes.
137 This attribute needs to be set each time mysql_real_connect() is called to
138 make a connection. When a connection attempt fails or when a connection is
139 closed, as part of the MYSQL handle cleanup, mysql_close_free() is called and
140 that will free MYSQL_EXTENSION::server_extn.
141
142 mysql_close_free() will free all the memory allocated in the MYSQL handle but
143 preserves MYSQL::options. These options are later free'd by
144 mysql_close_free_options() unless the client flag CLIENT_REMEMBER_OPTIONS is
145 set.
146
147 @param mysql The MYSQL handle
148 @param extn The NET_SERVER handle that contains compression context info.
149*/
150#ifdef MYSQL_SERVER
152 MYSQL_EXTENSION_PTR(mysql)->server_extn = extn;
153}
154#endif /* MYSQL_SERVER*/
155
156/*
157 Maximum allowed authentication plugins for a given user account.
158*/
159#define MAX_AUTHENTICATION_FACTOR 3
160/*
161 Placeholder to save plugin name and password of 1st, 2nd and 3rd
162 factor authentication methods.
163*/
166 char *password;
167};
168
172 char *ssl_crl; /* PEM CRL file */
173 char *ssl_crlpath; /* PEM directory of CRL-s? */
178 bool get_server_public_key; /* Former ssl_enforce */
179 char *tls_version; /* TLS version option */
180 long ssl_ctx_flags; /* SSL ctx options flag */
181 unsigned int ssl_mode;
182 unsigned int retry_count;
183 unsigned int ssl_fips_mode; /* SSL fips mode for enforced encryption.*/
191 void *ssl_session_data; /** the session serialization to use */
192 char *tls_sni_servername; /* TLS sni server name */
193};
194
195#define MYSQL_OPTIONS_EXTENSION_PTR(H, what) \
196 ((H)->options.extension ? (H)->options.extension->what : nullptr)
197
199 MYSQL *(*connect_method)(mysql_async_connect *connect_args);
202 const unsigned char *header, size_t header_length,
203 const unsigned char *arg, size_t arg_length,
204 bool skip_check, MYSQL_STMT *stmt);
205 MYSQL_DATA *(*read_rows)(MYSQL *mysql, MYSQL_FIELD *mysql_fields,
206 unsigned int fields);
207 MYSQL_RES *(*use_result)(MYSQL *mysql);
209 void (*fetch_lengths)(unsigned long *to, MYSQL_ROW column,
210 unsigned int field_count);
211 void (*flush_use_result)(MYSQL *mysql, bool flush_all_results);
213#if !defined(MYSQL_SERVER) && !defined(MYSQL_COMPONENT)
214 MYSQL_FIELD *(*list_fields)(MYSQL *mysql);
215 bool (*read_prepare_result)(MYSQL *mysql, MYSQL_STMT *stmt);
216 int (*stmt_execute)(MYSQL_STMT *stmt);
217 int (*read_binary_rows)(MYSQL_STMT *stmt);
218 int (*unbuffered_fetch)(MYSQL *mysql, char **row);
219 const char *(*read_statistics)(MYSQL *mysql);
220 bool (*next_result)(MYSQL *mysql);
221 int (*read_rows_from_cursor)(MYSQL_STMT *stmt);
222 void (*free_rows)(MYSQL_DATA *cur);
223#endif
227 const unsigned char *header, unsigned long header_length,
228 const unsigned char *arg, unsigned long arg_length, bool skip_check,
229 MYSQL_STMT *stmt, bool *error);
231 MYSQL_FIELD *mysql_fields,
232 unsigned int fields,
235 bool flush_all_results);
238 ulong *res);
239};
240
241#define simple_command(mysql, command, arg, length, skip_check) \
242 ((mysql)->methods \
243 ? (*(mysql)->methods->advanced_command)(mysql, command, 0, 0, arg, \
244 length, skip_check, NULL) \
245 : (set_mysql_error(mysql, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate), \
246 1))
247#define simple_command_nonblocking(mysql, command, arg, length, skip_check, \
248 error) \
249 (*(mysql)->methods->advanced_command_nonblocking)( \
250 mysql, command, 0, 0, arg, length, skip_check, NULL, error)
251
252#define stmt_command(mysql, command, arg, length, stmt) \
253 ((mysql)->methods \
254 ? (*(mysql)->methods->advanced_command)(mysql, command, 0, 0, arg, \
255 length, 1, stmt) \
256 : (set_mysql_error(mysql, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate), \
257 1))
258
261 uint fields, bool default_value,
262 uint server_capabilities);
264 unsigned long field_count,
265 unsigned int fields);
266MYSQL_FIELD *cli_read_metadata(MYSQL *mysql, unsigned long field_count,
267 unsigned int fields);
270void free_rows(MYSQL_DATA *cur);
272void end_server(MYSQL *mysql);
275 const char *filename, const char *group);
277 const unsigned char *header, size_t header_length,
278 const unsigned char *arg, size_t arg_length,
279 bool skip_check, MYSQL_STMT *stmt);
280unsigned long cli_safe_read(MYSQL *mysql, bool *is_data_packet);
282 bool *is_data_packet,
283 ulong *res);
284unsigned long cli_safe_read_with_ok(MYSQL *mysql, bool parse_ok,
285 bool *is_data_packet);
286void net_clear_error(NET *net);
287void set_stmt_errmsg(MYSQL_STMT *stmt, NET *net);
288void set_stmt_error(MYSQL_STMT *stmt, int errcode, const char *sqlstate);
289void set_stmt_extended_error(MYSQL_STMT *stmt, int errcode,
290 const char *sqlstate, const char *format, ...)
291 MY_ATTRIBUTE((format(printf, 4, 5)));
292void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate);
293void set_mysql_extended_error(MYSQL *mysql, int errcode, const char *sqlstate,
294 const char *format, ...)
295 MY_ATTRIBUTE((format(printf, 4, 5)));
296
297/* client side of the pluggable authentication */
299
301int run_plugin_auth(MYSQL *mysql, char *data, uint data_len,
302 const char *data_plugin, const char *db);
305
307
312void read_ok_ex(MYSQL *mysql, unsigned long len);
313
314bool fix_param_bind(MYSQL_BIND *param, uint idx);
316 NET *net, unsigned int param_count, MYSQL_BIND *params, const char **names,
317 unsigned long n_param_sets, uchar **ret_data, ulong *ret_length,
318 uchar send_types_to_server, bool send_named_params,
319 bool send_parameter_set_count, bool send_parameter_count_when_zero);
320
321#ifdef __cplusplus
322}
323#endif
324
325#define protocol_41(A) ((A)->server_capabilities & CLIENT_PROTOCOL_41)
326
327/*
328 AuthNextFactor packet is defined to have value 2 in 1st byte.
329*/
330#define AUTH_NEXT_FACTOR_PACKETTYPE 2
331#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:96
static MYSQL mysql
Definition: mysql.cc:165
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:893
#define SESSION_TRACK_END
End of enum_session_state_type.
Definition: mysql_com.h:1081
Definitions private to the server, used in the networking layer to notify specific events.
Log info(cout, "NOTE")
Definition: buf0block_hint.cc:29
Json_data_extension ext
Definition: backend.cc:50
Definition: instrumented_condition_variable.h:29
Definition: buffer.h:44
Definition: options.cc:56
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:3365
const char * unknown_sqlstate
Definition: client.cc:217
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:1208
void mysql_close_free(MYSQL *mysql)
Definition: client.cc:7539
void set_stmt_errmsg(MYSQL_STMT *stmt, NET *net)
Set statement error code, sqlstate, and error message from NET.
Definition: libmysql.cc:1229
void end_server(MYSQL *mysql)
Definition: client.cc:1890
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:388
bool libmysql_cleartext_plugin_enabled
Definition: client.cc:5567
bool fix_param_bind(MYSQL_BIND *param, uint idx)
Definition: bind_params.cc:408
bool mysql_reconnect(MYSQL *mysql)
Definition: client.cc:7208
int mysql_client_plugin_init()
Initializes the client plugin layer.
Definition: client_plugin.cc:335
#define MYSQL_EXTENSION_PTR(H)
Definition: sql_common.h:127
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:371
const char * cant_connect_sqlstate
Definition: client.cc:219
unsigned long cli_safe_read(MYSQL *mysql, bool *is_data_packet)
Read a packet from server.
Definition: client.cc:1312
MYSQL_RES * use_result(MYSQL *mysql)
Definition: client.cc:8304
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:1157
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:1324
void free_rows(MYSQL_DATA *cur)
Definition: client.cc:1316
void mysql_client_plugin_deinit()
Deinitializes the client plugin layer.
Definition: client_plugin.cc:375
unsigned long cli_safe_read_with_ok(MYSQL *mysql, bool parse_ok, bool *is_data_packet)
Read a packet from server.
Definition: client.cc:1179
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: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:6211
MYSQL_FIELD * unpack_fields(MYSQL *mysql, MYSQL_ROWS *data, MEM_ROOT *alloc, uint fields, bool default_value, uint server_capabilities)
Definition: client.cc:2493
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:5635
void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate)
Set the internal error message to mysql handler.
Definition: client.cc:340
#define MAX_AUTHENTICATION_FACTOR
Definition: sql_common.h:159
CHARSET_INFO * default_client_charset_info
Definition: client.cc:229
void free_old_query(MYSQL *mysql)
Definition: client.cc:1615
uchar * send_client_connect_attrs(MYSQL *mysql, uchar *buf)
Definition: client.cc:4119
const char * not_error_sqlstate
Definition: client.cc:218
MYSQL_EXTENSION * mysql_extension_init(MYSQL *)
Definition: client.cc:3344
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:1193
void mysql_close_free_options(MYSQL *mysql)
Definition: client.cc:7498
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:151
void mysql_extension_free(MYSQL_EXTENSION *)
Definition: client.cc:3376
struct st_mysql_client_plugin * mysql_client_builtins[]
Definition: client.cc:4090
void mysql_read_default_options(struct st_mysql_options *options, const char *filename, const char *group)
Definition: client.cc:2108
Definition: m_ctype.h:422
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:654
Definition: mysql.h:162
Definition: sql_common.h:100
char ** names
Definition: sql_common.h:113
uint n_params
Definition: sql_common.h:112
struct MYSQL_ASYNC * mysql_async_context
Definition: sql_common.h:104
NET_SERVER * server_extn
Definition: sql_common.h:107
struct MYSQL_EXTENSION::@9 bind_info
struct st_mysql_trace_info * trace_data
Definition: sql_common.h:101
STATE_INFO state_change
Definition: sql_common.h:102
void * mcs_extn
Definition: sql_common.h:109
MYSQL_BIND * bind
Definition: sql_common.h:114
Definition: mysql.h:120
Definition: sql_common.h:198
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:225
MYSQL_ROW(* fetch_row)(MYSQL_RES *)
Definition: sql_common.h:208
enum net_async_status(* read_change_user_result_nonblocking)(MYSQL *mysql, ulong *res)
Definition: sql_common.h:237
bool(* read_query_result)(MYSQL *mysql)
Definition: sql_common.h:200
void(* fetch_lengths)(unsigned long *to, MYSQL_ROW column, unsigned int field_count)
Definition: sql_common.h:209
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:201
enum net_async_status(* read_rows_nonblocking)(MYSQL *mysql, MYSQL_FIELD *mysql_fields, unsigned int fields, MYSQL_DATA **result)
Definition: sql_common.h:230
void(* flush_use_result)(MYSQL *mysql, bool flush_all_results)
Definition: sql_common.h:211
enum net_async_status(* read_query_result_nonblocking)(MYSQL *mysql)
Definition: sql_common.h:224
enum net_async_status(* next_result_nonblocking)(MYSQL *mysql)
Definition: sql_common.h:236
int(* read_change_user_result)(MYSQL *mysql)
Definition: sql_common.h:212
enum net_async_status(* flush_use_result_nonblocking)(MYSQL *mysql, bool flush_all_results)
Definition: sql_common.h:234
Definition: plugin_auth_common.h:120
Definition: mysql.h:339
Definition: mysql.h:152
Definition: mysql.h:681
Definition: mysql.h:299
Definition: client.cc:4115
Definition: mysql_com_server.h:58
Definition: mysql_com.h:912
The structure is used to hold the state change information received from the server.
Definition: sql_common.h:75
LIST * head_node
head_node->data is a LEX_STRING which contains the variable name.
Definition: sql_common.h:77
LIST * current_node
Definition: sql_common.h:78
Store the change info received from the server in an array of linked lists with STATE_INFO_NODE eleme...
Definition: sql_common.h:85
STATE_INFO_NODE info_list[SESSION_TRACK_END+1]
Array of STATE_NODE_INFO elements (one per state type).
Definition: sql_common.h:87
Definition: sql_common.h:164
char * plugin_name
Definition: sql_common.h:165
char * password
Definition: sql_common.h:166
Definition: client_async_authentication.h:161
Definition: client_plugin.h:113
Definition: sql_common.h:169
unsigned int ssl_fips_mode
Definition: sql_common.h:183
bool get_server_public_key
Definition: sql_common.h:178
char * default_auth
Definition: sql_common.h:171
char * compression_algorithm
Definition: sql_common.h:185
long ssl_ctx_flags
Definition: sql_common.h:180
char * ssl_crl
Definition: sql_common.h:172
char * tls_version
Definition: sql_common.h:179
void * ssl_session_data
Definition: sql_common.h:191
bool connection_compressed
Definition: sql_common.h:188
char * plugin_dir
Definition: sql_common.h:170
unsigned int retry_count
Definition: sql_common.h:182
bool enable_cleartext_plugin
Definition: sql_common.h:177
char * tls_ciphersuites
Definition: sql_common.h:184
struct client_authentication_info client_auth_info[MAX_AUTHENTICATION_FACTOR]
Definition: sql_common.h:190
unsigned int total_configured_compression_algorithms
Definition: sql_common.h:186
char * server_public_key_path
Definition: sql_common.h:175
size_t connection_attributes_length
Definition: sql_common.h:176
struct My_hash * connection_attributes
Definition: sql_common.h:174
unsigned int ssl_mode
Definition: sql_common.h:181
char * tls_sni_servername
the session serialization to use
Definition: sql_common.h:192
char * ssl_crlpath
Definition: sql_common.h:173
char * load_data_dir
Definition: sql_common.h:189
unsigned int zstd_compression_level
Definition: sql_common.h:187
Definition: mysql.h:225
command
Definition: version_token.cc:279