MySQL 8.3.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 bool (*read_prepare_result)(MYSQL *mysql, MYSQL_STMT *stmt);
215 int (*stmt_execute)(MYSQL_STMT *stmt);
216 int (*read_binary_rows)(MYSQL_STMT *stmt);
217 int (*unbuffered_fetch)(MYSQL *mysql, char **row);
218 const char *(*read_statistics)(MYSQL *mysql);
219 bool (*next_result)(MYSQL *mysql);
220 int (*read_rows_from_cursor)(MYSQL_STMT *stmt);
221 void (*free_rows)(MYSQL_DATA *cur);
222#endif
226 const unsigned char *header, unsigned long header_length,
227 const unsigned char *arg, unsigned long arg_length, bool skip_check,
228 MYSQL_STMT *stmt, bool *error);
230 MYSQL_FIELD *mysql_fields,
231 unsigned int fields,
234 bool flush_all_results);
237 ulong *res);
238};
239
240#define simple_command(mysql, command, arg, length, skip_check) \
241 ((mysql)->methods \
242 ? (*(mysql)->methods->advanced_command)(mysql, command, nullptr, 0, \
243 arg, length, skip_check, NULL) \
244 : (set_mysql_error(mysql, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate), \
245 1))
246#define simple_command_nonblocking(mysql, command, arg, length, skip_check, \
247 error) \
248 (*(mysql)->methods->advanced_command_nonblocking)( \
249 mysql, command, nullptr, 0, arg, length, skip_check, nullptr, error)
250
251#define stmt_command(mysql, command, arg, length, stmt) \
252 ((mysql)->methods \
253 ? (*(mysql)->methods->advanced_command)(mysql, command, nullptr, 0, \
254 arg, length, 1, stmt) \
255 : (set_mysql_error(mysql, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate), \
256 1))
257
260 unsigned long field_count,
261 unsigned int fields);
262MYSQL_FIELD *cli_read_metadata(MYSQL *mysql, unsigned long field_count,
263 unsigned int fields);
266void free_rows(MYSQL_DATA *cur);
268void end_server(MYSQL *mysql);
271 const char *filename, const char *group);
273 const unsigned char *header, size_t header_length,
274 const unsigned char *arg, size_t arg_length,
275 bool skip_check, MYSQL_STMT *stmt);
276unsigned long cli_safe_read(MYSQL *mysql, bool *is_data_packet);
278 bool *is_data_packet,
279 ulong *res);
280unsigned long cli_safe_read_with_ok(MYSQL *mysql, bool parse_ok,
281 bool *is_data_packet);
282void net_clear_error(NET *net);
283void set_stmt_errmsg(MYSQL_STMT *stmt, NET *net);
284void set_stmt_error(MYSQL_STMT *stmt, int errcode, const char *sqlstate);
285void set_stmt_extended_error(MYSQL_STMT *stmt, int errcode,
286 const char *sqlstate, const char *format, ...)
287 MY_ATTRIBUTE((format(printf, 4, 5)));
288void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate);
289void set_mysql_extended_error(MYSQL *mysql, int errcode, const char *sqlstate,
290 const char *format, ...)
291 MY_ATTRIBUTE((format(printf, 4, 5)));
292
293/* client side of the pluggable authentication */
295
297int run_plugin_auth(MYSQL *mysql, char *data, uint data_len,
298 const char *data_plugin, const char *db);
301
303
308void read_ok_ex(MYSQL *mysql, unsigned long len);
309
310bool fix_param_bind(MYSQL_BIND *param, uint idx);
312 NET *net, unsigned int param_count, MYSQL_BIND *params, const char **names,
313 unsigned long n_param_sets, uchar **ret_data, ulong *ret_length,
314 uchar send_types_to_server, bool send_named_params,
315 bool send_parameter_set_count, bool send_parameter_count_when_zero);
316
317#ifdef __cplusplus
318}
319#endif
320
321#define protocol_41(A) ((A)->server_capabilities & CLIENT_PROTOCOL_41)
322
323/*
324 AuthNextFactor packet is defined to have value 2 in 1st byte.
325*/
326#define AUTH_NEXT_FACTOR_PACKETTYPE 2
327#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
This file defines the client API to MySQL and also the ABI of the dynamically linked libmysqlclient.
char ** MYSQL_ROW
Definition: mysql.h:142
Common definition between mysql server & client.
#define MYSQL_VIO
Definition: mysql_com.h:900
#define SESSION_TRACK_END
End of enum_session_state_type.
Definition: mysql_com.h:1088
Definitions private to the server, used in the networking layer to notify specific events.
static MYSQL * mysql
Definition: mysqldump.cc:146
Definition: buf0block_hint.cc:29
Json_data_extension ext
Definition: backend.cc:50
Definition: instrumented_condition_variable.h:31
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:3323
const char * unknown_sqlstate
Definition: client.cc:219
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:1102
void mysql_close_free(MYSQL *mysql)
Definition: client.cc:7471
void set_stmt_errmsg(MYSQL_STMT *stmt, NET *net)
Set statement error code, sqlstate, and error message from NET.
Definition: libmysql.cc:1123
void end_server(MYSQL *mysql)
Definition: client.cc:1893
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:390
bool libmysql_cleartext_plugin_enabled
Definition: client.cc:5486
bool fix_param_bind(MYSQL_BIND *param, uint idx)
Definition: bind_params.cc:464
bool mysql_reconnect(MYSQL *mysql)
Definition: client.cc:7140
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:373
const char * cant_connect_sqlstate
Definition: client.cc:221
unsigned long cli_safe_read(MYSQL *mysql, bool *is_data_packet)
Read a packet from server.
Definition: client.cc:1315
MYSQL_RES * use_result(MYSQL *mysql)
Definition: client.cc:8236
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:1160
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:1327
void free_rows(MYSQL_DATA *cur)
Definition: client.cc:1319
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:1182
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:361
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:6143
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:5554
void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate)
Set the internal error message to mysql handler.
Definition: client.cc:342
#define MAX_AUTHENTICATION_FACTOR
Definition: sql_common.h:159
CHARSET_INFO * default_client_charset_info
Definition: client.cc:231
void free_old_query(MYSQL *mysql)
Definition: client.cc:1618
uchar * send_client_connect_attrs(MYSQL *mysql, uchar *buf)
Definition: client.cc:4038
const char * not_error_sqlstate
Definition: client.cc:220
MYSQL_EXTENSION * mysql_extension_init(MYSQL *)
Definition: client.cc:3302
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:1087
void mysql_close_free_options(MYSQL *mysql)
Definition: client.cc:7430
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:3334
struct st_mysql_client_plugin * mysql_client_builtins[]
Definition: client.cc:4006
void mysql_read_default_options(struct st_mysql_options *options, const char *filename, const char *group)
Definition: client.cc:2111
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:652
Definition: mysql.h:160
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:224
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:236
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:229
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:223
enum net_async_status(* next_result_nonblocking)(MYSQL *mysql)
Definition: sql_common.h:235
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:233
Definition: plugin_auth_common.h:120
Definition: mysql.h:337
Definition: mysql.h:679
Definition: mysql.h:297
Definition: client.cc:4034
Definition: mysql_com_server.h:58
Definition: mysql_com.h:919
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:163
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:223
command
Definition: version_token.cc:279