1typedef uint64_t my_ulonglong; 2typedef int my_socket; 3#include "field_types.h" 4enum enum_field_types 5{ MYSQL_TYPE_DECIMAL, 6 MYSQL_TYPE_TINY, 7 MYSQL_TYPE_SHORT, 8 MYSQL_TYPE_LONG, 9 MYSQL_TYPE_FLOAT, 10 MYSQL_TYPE_DOUBLE, 11 MYSQL_TYPE_NULL, 12 MYSQL_TYPE_TIMESTAMP, 13 MYSQL_TYPE_LONGLONG, 14 MYSQL_TYPE_INT24, 15 MYSQL_TYPE_DATE, 16 MYSQL_TYPE_TIME, 17 MYSQL_TYPE_DATETIME, 18 MYSQL_TYPE_YEAR, 19 MYSQL_TYPE_NEWDATE, 20 MYSQL_TYPE_VARCHAR, 21 MYSQL_TYPE_BIT, 22 MYSQL_TYPE_TIMESTAMP2, 23 MYSQL_TYPE_DATETIME2, 24 MYSQL_TYPE_TIME2, 25 MYSQL_TYPE_TYPED_ARRAY, 26 MYSQL_TYPE_JSON = 245, 27 MYSQL_TYPE_NEWDECIMAL = 246, 28 MYSQL_TYPE_ENUM = 247, 29 MYSQL_TYPE_SET = 248, 30 MYSQL_TYPE_TINY_BLOB = 249, 31 MYSQL_TYPE_MEDIUM_BLOB = 250, 32 MYSQL_TYPE_LONG_BLOB = 251, 33 MYSQL_TYPE_BLOB = 252, 34 MYSQL_TYPE_VAR_STRING = 253, 35 MYSQL_TYPE_STRING = 254, 36 MYSQL_TYPE_GEOMETRY = 255 }; 37typedef enum enum_field_types enum_field_types; 38#include "my_list.h" 39typedef struct LIST { 40 struct LIST *prev, *next; 41 void *data; 42} LIST; 43typedef int (*list_walk_action)(void *, void *); 44extern LIST *list_add(LIST *root, LIST *element); 45extern LIST *list_delete(LIST *root, LIST *element); 46extern LIST *list_cons(void *data, LIST *root); 47extern LIST *list_reverse(LIST *root); 48extern void list_free(LIST *root, unsigned int free_data); 49extern unsigned int list_length(LIST *); 50extern int list_walk(LIST *, list_walk_action action, unsigned char *argument); 51#include "mysql_com.h" 52#include "my_command.h" 53enum enum_server_command { 54 COM_SLEEP, 55 COM_QUIT, 56 COM_INIT_DB, 57 COM_QUERY, 58 COM_FIELD_LIST, 59 COM_CREATE_DB, 60 COM_DROP_DB, 61 COM_REFRESH, 62 COM_DEPRECATED_1, 63 COM_STATISTICS, 64 COM_PROCESS_INFO, 65 COM_CONNECT, 66 COM_PROCESS_KILL, 67 COM_DEBUG, 68 COM_PING, 69 COM_TIME, 70 COM_DELAYED_INSERT, 71 COM_CHANGE_USER, 72 COM_BINLOG_DUMP, 73 COM_TABLE_DUMP, 74 COM_CONNECT_OUT, 75 COM_REGISTER_SLAVE, 76 COM_STMT_PREPARE, 77 COM_STMT_EXECUTE, 78 COM_STMT_SEND_LONG_DATA, 79 COM_STMT_CLOSE, 80 COM_STMT_RESET, 81 COM_SET_OPTION, 82 COM_STMT_FETCH, 83 COM_DAEMON, 84 COM_BINLOG_DUMP_GTID, 85 COM_RESET_CONNECTION, 86 COM_CLONE, 87 COM_END 88}; 89#include "my_compress.h" 90enum enum_compression_algorithm { 91 MYSQL_UNCOMPRESSED = 1, 92 MYSQL_ZLIB, 93 MYSQL_ZSTD, 94 MYSQL_INVALID 95}; 96typedef struct mysql_zlib_compress_context { 97 unsigned int compression_level; 98} mysql_zlib_compress_context; 99typedef struct ZSTD_CCtx_s ZSTD_CCtx; 100typedef struct ZSTD_DCtx_s ZSTD_DCtx; 101typedef struct mysql_zstd_compress_context { 102 ZSTD_CCtx *cctx; 103 ZSTD_DCtx *dctx; 104 unsigned int compression_level; 105} mysql_zstd_compress_context; 106typedef struct mysql_compress_context { 107 enum enum_compression_algorithm algorithm; 108 union { 109 mysql_zlib_compress_context zlib_ctx; 110 mysql_zstd_compress_context zstd_ctx; 111 } u; 112} mysql_compress_context; 113unsigned int mysql_default_compression_level( 114 enum enum_compression_algorithm algorithm); 115void mysql_compress_context_init(mysql_compress_context *cmp_ctx, 116 enum enum_compression_algorithm algorithm, 117 unsigned int compression_level); 118void mysql_compress_context_deinit(mysql_compress_context *mysql_compress_ctx); 119enum SERVER_STATUS_flags_enum { 120 SERVER_STATUS_IN_TRANS = 1, 121 SERVER_STATUS_AUTOCOMMIT = 2, 122 SERVER_MORE_RESULTS_EXISTS = 8, 123 SERVER_QUERY_NO_GOOD_INDEX_USED = 16, 124 SERVER_QUERY_NO_INDEX_USED = 32, 125 SERVER_STATUS_CURSOR_EXISTS = 64, 126 SERVER_STATUS_LAST_ROW_SENT = 128, 127 SERVER_STATUS_DB_DROPPED = 256, 128 SERVER_STATUS_NO_BACKSLASH_ESCAPES = 512, 129 SERVER_STATUS_METADATA_CHANGED = 1024, 130 SERVER_QUERY_WAS_SLOW = 2048, 131 SERVER_PS_OUT_PARAMS = 4096, 132 SERVER_STATUS_IN_TRANS_READONLY = 8192, 133 SERVER_SESSION_STATE_CHANGED = (1UL << 14) 134}; 135struct Vio; 136typedef struct NET { 137 struct Vio * vio; 138 unsigned char *buff, *buff_end, *write_pos, *read_pos; 139 my_socket fd; 140 unsigned long remain_in_buf, length, buf_length, where_b; 141 unsigned long max_packet, max_packet_size; 142 unsigned int pkt_nr, compress_pkt_nr; 143 unsigned int write_timeout, read_timeout, retry_count; 144 int fcntl; 145 unsigned int *return_status; 146 unsigned char reading_or_writing; 147 unsigned char save_char; 148 bool compress; 149 unsigned int last_errno; 150 unsigned char error; 151 char last_error[512]; 152 char sqlstate[5 + 1]; 153 void *extension; 154} NET; 155enum mysql_enum_shutdown_level { 156 SHUTDOWN_DEFAULT = 0, 157 SHUTDOWN_WAIT_CONNECTIONS = (unsigned char)(1 << 0), 158 SHUTDOWN_WAIT_TRANSACTIONS = (unsigned char)(1 << 1), 159 SHUTDOWN_WAIT_UPDATES = (unsigned char)(1 << 3), 160 SHUTDOWN_WAIT_ALL_BUFFERS = ((unsigned char)(1 << 3) << 1), 161 SHUTDOWN_WAIT_CRITICAL_BUFFERS = ((unsigned char)(1 << 3) << 1) + 1, 162 KILL_QUERY = 254, 163 KILL_CONNECTION = 255 164}; 165enum enum_resultset_metadata { 166 RESULTSET_METADATA_NONE = 0, 167 RESULTSET_METADATA_FULL = 1 168}; 169enum enum_cursor_type { 170 CURSOR_TYPE_NO_CURSOR = 0, 171 CURSOR_TYPE_READ_ONLY = 1, 172 CURSOR_TYPE_FOR_UPDATE = 2, 173 CURSOR_TYPE_SCROLLABLE = 4 174}; 175enum enum_mysql_set_option { 176 MYSQL_OPTION_MULTI_STATEMENTS_ON, 177 MYSQL_OPTION_MULTI_STATEMENTS_OFF 178}; 179enum enum_session_state_type { 180 SESSION_TRACK_SYSTEM_VARIABLES, 181 SESSION_TRACK_SCHEMA, 182 SESSION_TRACK_STATE_CHANGE, 183 SESSION_TRACK_GTIDS, 184 SESSION_TRACK_TRANSACTION_CHARACTERISTICS, 185 SESSION_TRACK_TRANSACTION_STATE 186}; 187bool my_net_init(struct NET *net, struct Vio * vio); 188void my_net_local_init(struct NET *net); 189void net_end(struct NET *net); 190void net_clear(struct NET *net, bool check_buffer); 191void net_claim_memory_ownership(struct NET *net); 192bool net_realloc(struct NET *net, size_t length); 193bool net_flush(struct NET *net); 194bool my_net_write(struct NET *net, const unsigned char *packet, size_t len); 195bool net_write_command(struct NET *net, unsigned char command, 196 const unsigned char *header, size_t head_len, 197 const unsigned char *packet, size_t len); 198bool net_write_packet(struct NET *net, const unsigned char *packet, 199 size_t length); 200unsigned long my_net_read(struct NET *net); 201void my_net_set_write_timeout(struct NET *net, unsigned int timeout); 202void my_net_set_read_timeout(struct NET *net, unsigned int timeout); 203void my_net_set_retry_count(struct NET *net, unsigned int retry_count); 204struct rand_struct { 205 unsigned long seed1, seed2, max_value; 206 double max_value_dbl; 207}; 208#include "mysql/udf_registration_types.h" 209enum Item_result { 210 INVALID_RESULT = -1, 211 STRING_RESULT = 0, 212 REAL_RESULT, 213 INT_RESULT, 214 ROW_RESULT, 215 DECIMAL_RESULT 216}; 217typedef struct UDF_ARGS { 218 unsigned int arg_count; 219 enum Item_result *arg_type; 220 char **args; 221 unsigned long *lengths; 222 char *maybe_null; 223 char **attributes; 224 unsigned long *attribute_lengths; 225 void *extension; 226} UDF_ARGS; 227typedef struct UDF_INIT { 228 bool maybe_null; 229 unsigned int decimals; 230 unsigned long max_length; 231 char *ptr; 232 bool const_item; 233 void *extension; 234} UDF_INIT; 235enum Item_udftype { UDFTYPE_FUNCTION = 1, UDFTYPE_AGGREGATE }; 236typedef void (*Udf_func_clear)(UDF_INIT *, unsigned char *, unsigned char *); 237typedef void (*Udf_func_add)(UDF_INIT *, UDF_ARGS *, unsigned char *, 238 unsigned char *); 239typedef void (*Udf_func_deinit)(UDF_INIT *); 240typedef bool (*Udf_func_init)(UDF_INIT *, UDF_ARGS *, char *); 241typedef void (*Udf_func_any)(void); 242typedef double (*Udf_func_double)(UDF_INIT *, UDF_ARGS *, unsigned char *, 243 unsigned char *); 244typedef long long (*Udf_func_longlong)(UDF_INIT *, UDF_ARGS *, unsigned char *, 245 unsigned char *); 246typedef char *(*Udf_func_string)(UDF_INIT *, UDF_ARGS *, char *, 247 unsigned long *, unsigned char *, 248 unsigned char *); 249void randominit(struct rand_struct *, unsigned long seed1, unsigned long seed2); 250double my_rnd(struct rand_struct *); 251void create_random_string(char *to, unsigned int length, 252 struct rand_struct *rand_st); 253void hash_password(unsigned long *to, const char *password, 254 unsigned int password_len); 255void make_scrambled_password_323(char *to, const char *password); 256void scramble_323(char *to, const char *message, const char *password); 257bool check_scramble_323(const unsigned char *reply, const char *message, 258 unsigned long *salt); 259void get_salt_from_password_323(unsigned long *res, const char *password); 260void make_password_from_salt_323(char *to, const unsigned long *salt); 261void make_scrambled_password(char *to, const char *password); 262void scramble(char *to, const char *message, const char *password); 263bool check_scramble(const unsigned char *reply, const char *message, 264 const unsigned char *hash_stage2); 265void get_salt_from_password(unsigned char *res, const char *password); 266void make_password_from_salt(char *to, const unsigned char *hash_stage2); 267char *octet2hex(char *to, const char *str, unsigned int len); 268bool generate_sha256_scramble(unsigned char *dst, size_t dst_size, 269 const char *src, size_t src_size, const char *rnd, 270 size_t rnd_size); 271char *get_tty_password(const char *opt_message); 272const char *mysql_errno_to_sqlstate(unsigned int mysql_errno); 273bool my_thread_init(void); 274void my_thread_end(void); 275unsigned long net_field_length(unsigned char **packet); 276unsigned long net_field_length_checked(unsigned char **packet, 277 unsigned long max_length); 278uint64_t net_field_length_ll(unsigned char **packet); 279unsigned char *net_store_length(unsigned char *pkg, unsigned long long length); 280unsigned int net_length_size(unsigned long long num); 281unsigned int net_field_length_size(const unsigned char *pos); 282#include "mysql/client_plugin.h" 283struct st_mysql_client_plugin { 284 int type; unsigned int interface_version; const char *name; const char *author; const char *desc; unsigned int version[3]; const char *license; void *mysql_api; int (*init)(char *, size_t, int, va_list); int (*deinit)(void); int (*options)(const char *option, const void *); 285}; 286struct MYSQL; 287#include "plugin_auth_common.h" 288struct MYSQL_PLUGIN_VIO_INFO { 289 enum { 290 MYSQL_VIO_INVALID, 291 MYSQL_VIO_TCP, 292 MYSQL_VIO_SOCKET, 293 MYSQL_VIO_PIPE, 294 MYSQL_VIO_MEMORY 295 } protocol; 296 int socket; 297}; 298enum net_async_status { 299 NET_ASYNC_COMPLETE = 0, 300 NET_ASYNC_NOT_READY, 301 NET_ASYNC_ERROR, 302 NET_ASYNC_COMPLETE_NO_MORE_RESULTS 303}; 304typedef struct MYSQL_PLUGIN_VIO { 305 int (*read_packet)(struct MYSQL_PLUGIN_VIO *vio, unsigned char **buf); 306 int (*write_packet)(struct MYSQL_PLUGIN_VIO *vio, const unsigned char *packet, 307 int packet_len); 308 void (*info)(struct MYSQL_PLUGIN_VIO *vio, 309 struct MYSQL_PLUGIN_VIO_INFO *info); 310 enum net_async_status (*read_packet_nonblocking)(struct MYSQL_PLUGIN_VIO *vio, 311 unsigned char **buf, 312 int *result); 313 enum net_async_status (*write_packet_nonblocking)( 314 struct MYSQL_PLUGIN_VIO *vio, const unsigned char *pkt, int pkt_len, 315 int *result); 316} MYSQL_PLUGIN_VIO; 317struct auth_plugin_t { 318 int type; unsigned int interface_version; const char *name; const char *author; const char *desc; unsigned int version[3]; const char *license; void *mysql_api; int (*init)(char *, size_t, int, va_list); int (*deinit)(void); int (*options)(const char *option, const void *); 319 int (*authenticate_user)(MYSQL_PLUGIN_VIO *vio, struct MYSQL *mysql); 320 enum net_async_status (*authenticate_user_nonblocking)(MYSQL_PLUGIN_VIO *vio, 321 struct MYSQL *mysql, 322 int *result); 323}; 324typedef struct auth_plugin_t st_mysql_client_plugin_AUTHENTICATION; 325struct st_mysql_client_plugin *mysql_load_plugin(struct MYSQL *mysql, 326 const char *name, int type, 327 int argc, ...); 328struct st_mysql_client_plugin *mysql_load_plugin_v(struct MYSQL *mysql, 329 const char *name, int type, 330 int argc, va_list args); 331struct st_mysql_client_plugin *mysql_client_find_plugin(struct MYSQL *mysql, 332 const char *name, 333 int type); 334struct st_mysql_client_plugin *mysql_client_register_plugin( 335 struct MYSQL *mysql, struct st_mysql_client_plugin *plugin); 336int mysql_plugin_options(struct st_mysql_client_plugin *plugin, 337 const char *option, const void *value); 338#include "mysql_version.h" 339#include "mysql_time.h" 340enum enum_mysql_timestamp_type { 341 MYSQL_TIMESTAMP_NONE = -2, 342 MYSQL_TIMESTAMP_ERROR = -1, 343 MYSQL_TIMESTAMP_DATE = 0, 344 MYSQL_TIMESTAMP_DATETIME = 1, 345 MYSQL_TIMESTAMP_TIME = 2, 346 MYSQL_TIMESTAMP_DATETIME_TZ = 3 347}; 348typedef struct MYSQL_TIME { 349 unsigned int year, month, day, hour, minute, second; 350 unsigned long second_part; 351 bool neg; 352 enum enum_mysql_timestamp_type time_type; 353 int time_zone_displacement; 354} MYSQL_TIME; 355#include "errmsg.h" 356void init_client_errs(void); 357void finish_client_errs(void); 358extern const char *client_errors[]; 359static inline const char *ER_CLIENT(int client_errno) { 360 if (client_errno >= 2000 && client_errno <= 2069) 361 return client_errors[client_errno - 2000]; 362 return client_errors[2000]; 363} 364extern unsigned int mysql_port; 365extern char *mysql_unix_port; 366typedef struct MYSQL_FIELD { 367 char *name; 368 char *org_name; 369 char *table; 370 char *org_table; 371 char *db; 372 char *catalog; 373 char *def; 374 unsigned long length; 375 unsigned long max_length; 376 unsigned int name_length; 377 unsigned int org_name_length; 378 unsigned int table_length; 379 unsigned int org_table_length; 380 unsigned int db_length; 381 unsigned int catalog_length; 382 unsigned int def_length; 383 unsigned int flags; 384 unsigned int decimals; 385 unsigned int charsetnr; 386 enum enum_field_types type; 387 void *extension; 388} MYSQL_FIELD; 389typedef char **MYSQL_ROW; 390typedef unsigned int MYSQL_FIELD_OFFSET; 391typedef struct MYSQL_ROWS { 392 struct MYSQL_ROWS *next; 393 MYSQL_ROW data; 394 unsigned long length; 395} MYSQL_ROWS; 396typedef MYSQL_ROWS *MYSQL_ROW_OFFSET; 397struct MEM_ROOT; 398typedef struct MYSQL_DATA { 399 MYSQL_ROWS *data; 400 struct MEM_ROOT *alloc; 401 uint64_t rows; 402 unsigned int fields; 403} MYSQL_DATA; 404enum mysql_option { 405 MYSQL_OPT_CONNECT_TIMEOUT, 406 MYSQL_OPT_COMPRESS, 407 MYSQL_OPT_NAMED_PIPE, 408 MYSQL_INIT_COMMAND, 409 MYSQL_READ_DEFAULT_FILE, 410 MYSQL_READ_DEFAULT_GROUP, 411 MYSQL_SET_CHARSET_DIR, 412 MYSQL_SET_CHARSET_NAME, 413 MYSQL_OPT_LOCAL_INFILE, 414 MYSQL_OPT_PROTOCOL, 415 MYSQL_SHARED_MEMORY_BASE_NAME, 416 MYSQL_OPT_READ_TIMEOUT, 417 MYSQL_OPT_WRITE_TIMEOUT, 418 MYSQL_OPT_USE_RESULT, 419 MYSQL_REPORT_DATA_TRUNCATION, 420 MYSQL_OPT_RECONNECT, 421 MYSQL_PLUGIN_DIR, 422 MYSQL_DEFAULT_AUTH, 423 MYSQL_OPT_BIND, 424 MYSQL_OPT_SSL_KEY, 425 MYSQL_OPT_SSL_CERT, 426 MYSQL_OPT_SSL_CA, 427 MYSQL_OPT_SSL_CAPATH, 428 MYSQL_OPT_SSL_CIPHER, 429 MYSQL_OPT_SSL_CRL, 430 MYSQL_OPT_SSL_CRLPATH, 431 MYSQL_OPT_CONNECT_ATTR_RESET, 432 MYSQL_OPT_CONNECT_ATTR_ADD, 433 MYSQL_OPT_CONNECT_ATTR_DELETE, 434 MYSQL_SERVER_PUBLIC_KEY, 435 MYSQL_ENABLE_CLEARTEXT_PLUGIN, 436 MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, 437 MYSQL_OPT_MAX_ALLOWED_PACKET, 438 MYSQL_OPT_NET_BUFFER_LENGTH, 439 MYSQL_OPT_TLS_VERSION, 440 MYSQL_OPT_SSL_MODE, 441 MYSQL_OPT_GET_SERVER_PUBLIC_KEY, 442 MYSQL_OPT_RETRY_COUNT, 443 MYSQL_OPT_OPTIONAL_RESULTSET_METADATA, 444 MYSQL_OPT_SSL_FIPS_MODE, 445 MYSQL_OPT_TLS_CIPHERSUITES, 446 MYSQL_OPT_COMPRESSION_ALGORITHMS, 447 MYSQL_OPT_ZSTD_COMPRESSION_LEVEL, 448 MYSQL_OPT_LOAD_DATA_LOCAL_DIR 449}; 450struct st_mysql_options_extention; 451struct st_mysql_options { 452 unsigned int connect_timeout, read_timeout, write_timeout; 453 unsigned int port, protocol; 454 unsigned long client_flag; 455 char *host, *user, *password, *unix_socket, *db; 456 struct Init_commands_array *init_commands; 457 char *my_cnf_file, *my_cnf_group, *charset_dir, *charset_name; 458 char *ssl_key; 459 char *ssl_cert; 460 char *ssl_ca; 461 char *ssl_capath; 462 char *ssl_cipher; 463 char *shared_memory_base_name; 464 unsigned long max_allowed_packet; 465 bool compress, named_pipe; 466 char *bind_address; 467 bool report_data_truncation; 468 int (*local_infile_init)(void **, const char *, void *); 469 int (*local_infile_read)(void *, char *, unsigned int); 470 void (*local_infile_end)(void *); 471 int (*local_infile_error)(void *, char *, unsigned int); 472 void *local_infile_userdata; 473 struct st_mysql_options_extention *extension; 474}; 475enum mysql_status { 476 MYSQL_STATUS_READY, 477 MYSQL_STATUS_GET_RESULT, 478 MYSQL_STATUS_USE_RESULT, 479 MYSQL_STATUS_STATEMENT_GET_RESULT 480}; 481enum mysql_protocol_type { 482 MYSQL_PROTOCOL_DEFAULT, 483 MYSQL_PROTOCOL_TCP, 484 MYSQL_PROTOCOL_SOCKET, 485 MYSQL_PROTOCOL_PIPE, 486 MYSQL_PROTOCOL_MEMORY 487}; 488enum mysql_ssl_mode { 489 SSL_MODE_DISABLED = 1, 490 SSL_MODE_PREFERRED, 491 SSL_MODE_REQUIRED, 492 SSL_MODE_VERIFY_CA, 493 SSL_MODE_VERIFY_IDENTITY 494}; 495enum mysql_ssl_fips_mode { 496 SSL_FIPS_MODE_OFF = 0, 497 SSL_FIPS_MODE_ON = 1, 498 SSL_FIPS_MODE_STRICT 499}; 500typedef struct character_set { 501 unsigned int number; 502 unsigned int state; 503 const char *csname; 504 const char *name; 505 const char *comment; 506 const char *dir; 507 unsigned int mbminlen; 508 unsigned int mbmaxlen; 509} MY_CHARSET_INFO; 510struct MYSQL_METHODS; 511struct MYSQL_STMT; 512typedef struct MYSQL { 513 NET net; 514 unsigned char *connector_fd; 515 char *host, *user, *passwd, *unix_socket, *server_version, *host_info; 516 char *info, *db; 517 struct CHARSET_INFO *charset; 518 MYSQL_FIELD *fields; 519 struct MEM_ROOT *field_alloc; 520 uint64_t affected_rows; 521 uint64_t insert_id; 522 uint64_t extra_info; 523 unsigned long thread_id; 524 unsigned long packet_length; 525 unsigned int port; 526 unsigned long client_flag, server_capabilities; 527 unsigned int protocol_version; 528 unsigned int field_count; 529 unsigned int server_status; 530 unsigned int server_language; 531 unsigned int warning_count; 532 struct st_mysql_options options; 533 enum mysql_status status; 534 enum enum_resultset_metadata resultset_metadata; 535 bool free_me; 536 bool reconnect; 537 char scramble[20 + 1]; 538 LIST *stmts; 539 const struct MYSQL_METHODS *methods; 540 void *thd; 541 bool *unbuffered_fetch_owner; 542 void *extension; 543} MYSQL; 544typedef struct MYSQL_RES { 545 uint64_t row_count; 546 MYSQL_FIELD *fields; 547 struct MYSQL_DATA *data; 548 MYSQL_ROWS *data_cursor; 549 unsigned long *lengths; 550 MYSQL *handle; 551 const struct MYSQL_METHODS *methods; 552 MYSQL_ROW row; 553 MYSQL_ROW current_row; 554 struct MEM_ROOT *field_alloc; 555 unsigned int field_count, current_field; 556 bool eof; 557 bool unbuffered_fetch_cancelled; 558 enum enum_resultset_metadata metadata; 559 void *extension; 560} MYSQL_RES; 561typedef struct MYSQL_RPL { 562 size_t file_name_length; 563 const char *file_name; 564 uint64_t start_position; 565 unsigned int server_id; 566 unsigned int flags; 567 size_t gtid_set_encoded_size; 568 void (*fix_gtid_set)(struct MYSQL_RPL *rpl, unsigned char *packet_gtid_set); 569 void *gtid_set_arg; 570 unsigned long size; 571 const unsigned char *buffer; 572} MYSQL_RPL; 573int mysql_server_init(int argc, char **argv, char **groups); 574void mysql_server_end(void); 575bool mysql_thread_init(void); 576void mysql_thread_end(void); 577uint64_t mysql_num_rows(MYSQL_RES *res); 578unsigned int mysql_num_fields(MYSQL_RES *res); 579bool mysql_eof(MYSQL_RES *res); 580MYSQL_FIELD * mysql_fetch_field_direct(MYSQL_RES *res, 581 unsigned int fieldnr); 582MYSQL_FIELD * mysql_fetch_fields(MYSQL_RES *res); 583MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *res); 584MYSQL_FIELD_OFFSET mysql_field_tell(MYSQL_RES *res); 585enum enum_resultset_metadata mysql_result_metadata(MYSQL_RES *result); 586unsigned int mysql_field_count(MYSQL *mysql); 587uint64_t mysql_affected_rows(MYSQL *mysql); 588uint64_t mysql_insert_id(MYSQL *mysql); 589unsigned int mysql_errno(MYSQL *mysql); 590const char * mysql_error(MYSQL *mysql); 591const char * mysql_sqlstate(MYSQL *mysql); 592unsigned int mysql_warning_count(MYSQL *mysql); 593const char * mysql_info(MYSQL *mysql); 594unsigned long mysql_thread_id(MYSQL *mysql); 595const char * mysql_character_set_name(MYSQL *mysql); 596int mysql_set_character_set(MYSQL *mysql, const char *csname); 597MYSQL * mysql_init(MYSQL *mysql); 598bool mysql_ssl_set(MYSQL *mysql, const char *key, const char *cert, 599 const char *ca, const char *capath, 600 const char *cipher); 601const char * mysql_get_ssl_cipher(MYSQL *mysql); 602bool mysql_change_user(MYSQL *mysql, const char *user, 603 const char *passwd, const char *db); 604MYSQL * mysql_real_connect(MYSQL *mysql, const char *host, 605 const char *user, const char *passwd, 606 const char *db, unsigned int port, 607 const char *unix_socket, 608 unsigned long clientflag); 609int mysql_select_db(MYSQL *mysql, const char *db); 610int mysql_query(MYSQL *mysql, const char *q); 611int mysql_send_query(MYSQL *mysql, const char *q, unsigned long length); 612int mysql_real_query(MYSQL *mysql, const char *q, unsigned long length); 613MYSQL_RES * mysql_store_result(MYSQL *mysql); 614MYSQL_RES * mysql_use_result(MYSQL *mysql); 615enum net_async_status mysql_real_connect_nonblocking( 616 MYSQL *mysql, const char *host, const char *user, const char *passwd, 617 const char *db, unsigned int port, const char *unix_socket, 618 unsigned long clientflag); 619enum net_async_status mysql_send_query_nonblocking( 620 MYSQL *mysql, const char *query, unsigned long length); 621enum net_async_status mysql_real_query_nonblocking( 622 MYSQL *mysql, const char *query, unsigned long length); 623enum net_async_status 624mysql_store_result_nonblocking(MYSQL *mysql, MYSQL_RES **result); 625enum net_async_status mysql_next_result_nonblocking(MYSQL *mysql); 626enum net_async_status mysql_select_db_nonblocking(MYSQL *mysql, 627 const char *db, 628 bool *error); 629void mysql_get_character_set_info(MYSQL *mysql, 630 MY_CHARSET_INFO *charset); 631int mysql_session_track_get_first(MYSQL *mysql, 632 enum enum_session_state_type type, 633 const char **data, size_t *length); 634int mysql_session_track_get_next(MYSQL *mysql, 635 enum enum_session_state_type type, 636 const char **data, size_t *length); 637void mysql_set_local_infile_handler( 638 MYSQL *mysql, int (*local_infile_init)(void **, const char *, void *), 639 int (*local_infile_read)(void *, char *, unsigned int), 640 void (*local_infile_end)(void *), 641 int (*local_infile_error)(void *, char *, unsigned int), void *); 642void mysql_set_local_infile_default(MYSQL *mysql); 643int mysql_shutdown(MYSQL *mysql, 644 enum mysql_enum_shutdown_level shutdown_level); 645int mysql_dump_debug_info(MYSQL *mysql); 646int mysql_refresh(MYSQL *mysql, unsigned int refresh_options); 647int mysql_kill(MYSQL *mysql, unsigned long pid); 648int mysql_set_server_option(MYSQL *mysql, 649 enum enum_mysql_set_option option); 650int mysql_ping(MYSQL *mysql); 651const char * mysql_stat(MYSQL *mysql); 652const char * mysql_get_server_info(MYSQL *mysql); 653const char * mysql_get_client_info(void); 654unsigned long mysql_get_client_version(void); 655const char * mysql_get_host_info(MYSQL *mysql); 656unsigned long mysql_get_server_version(MYSQL *mysql); 657unsigned int mysql_get_proto_info(MYSQL *mysql); 658MYSQL_RES * mysql_list_dbs(MYSQL *mysql, const char *wild); 659MYSQL_RES * mysql_list_tables(MYSQL *mysql, const char *wild); 660MYSQL_RES * mysql_list_processes(MYSQL *mysql); 661int mysql_options(MYSQL *mysql, enum mysql_option option, 662 const void *arg); 663int mysql_options4(MYSQL *mysql, enum mysql_option option, 664 const void *arg1, const void *arg2); 665int mysql_get_option(MYSQL *mysql, enum mysql_option option, 666 const void *arg); 667void mysql_free_result(MYSQL_RES *result); 668enum net_async_status mysql_free_result_nonblocking(MYSQL_RES *result); 669void mysql_data_seek(MYSQL_RES *result, uint64_t offset); 670MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result, 671 MYSQL_ROW_OFFSET offset); 672MYSQL_FIELD_OFFSET mysql_field_seek(MYSQL_RES *result, 673 MYSQL_FIELD_OFFSET offset); 674MYSQL_ROW mysql_fetch_row(MYSQL_RES *result); 675enum net_async_status mysql_fetch_row_nonblocking(MYSQL_RES *res, 676 MYSQL_ROW *row); 677unsigned long * mysql_fetch_lengths(MYSQL_RES *result); 678MYSQL_FIELD * mysql_fetch_field(MYSQL_RES *result); 679MYSQL_RES * mysql_list_fields(MYSQL *mysql, const char *table, 680 const char *wild); 681unsigned long mysql_escape_string(char *to, const char *from, 682 unsigned long from_length); 683unsigned long mysql_hex_string(char *to, const char *from, 684 unsigned long from_length); 685unsigned long mysql_real_escape_string(MYSQL *mysql, char *to, 686 const char *from, 687 unsigned long length); 688unsigned long mysql_real_escape_string_quote(MYSQL *mysql, char *to, 689 const char *from, 690 unsigned long length, 691 char quote); 692void mysql_debug(const char *debug); 693void myodbc_remove_escape(MYSQL *mysql, char *name); 694unsigned int mysql_thread_safe(void); 695bool mysql_read_query_result(MYSQL *mysql); 696int mysql_reset_connection(MYSQL *mysql); 697int mysql_binlog_open(MYSQL *mysql, MYSQL_RPL *rpl); 698int mysql_binlog_fetch(MYSQL *mysql, MYSQL_RPL *rpl); 699void mysql_binlog_close(MYSQL *mysql, MYSQL_RPL *rpl); 700enum enum_mysql_stmt_state { 701 MYSQL_STMT_INIT_DONE = 1, 702 MYSQL_STMT_PREPARE_DONE, 703 MYSQL_STMT_EXECUTE_DONE, 704 MYSQL_STMT_FETCH_DONE 705}; 706typedef struct MYSQL_BIND { 707 unsigned long *length; 708 bool *is_null; 709 void *buffer; 710 bool *error; 711 unsigned char *row_ptr; 712 void (*store_param_func)(NET *net, struct MYSQL_BIND *param); 713 void (*fetch_result)(struct MYSQL_BIND *, MYSQL_FIELD *, unsigned char **row); 714 void (*skip_result)(struct MYSQL_BIND *, MYSQL_FIELD *, unsigned char **row); 715 unsigned long buffer_length; 716 unsigned long offset; 717 unsigned long length_value; 718 unsigned int param_number; 719 unsigned int pack_length; 720 enum enum_field_types buffer_type; 721 bool error_value; 722 bool is_unsigned; 723 bool long_data_used; 724 bool is_null_value; 725 void *extension; 726} MYSQL_BIND; 727struct MYSQL_STMT_EXT; 728typedef struct MYSQL_STMT { 729 struct MEM_ROOT *mem_root; 730 LIST list; 731 MYSQL *mysql; 732 MYSQL_BIND *params; 733 MYSQL_BIND *bind; 734 MYSQL_FIELD *fields; 735 MYSQL_DATA result; 736 MYSQL_ROWS *data_cursor; 737 int (*read_row_func)(struct MYSQL_STMT *stmt, unsigned char **row); 738 uint64_t affected_rows; 739 uint64_t insert_id; 740 unsigned long stmt_id; 741 unsigned long flags; 742 unsigned long prefetch_rows; 743 unsigned int server_status; 744 unsigned int last_errno; 745 unsigned int param_count; 746 unsigned int field_count; 747 enum enum_mysql_stmt_state state; 748 char last_error[512]; 749 char sqlstate[5 + 1]; 750 bool send_types_to_server; 751 bool bind_param_done; 752 unsigned char bind_result_done; 753 bool unbuffered_fetch_cancelled; 754 bool update_max_length; 755 struct MYSQL_STMT_EXT *extension; 756} MYSQL_STMT; 757enum enum_stmt_attr_type { 758 STMT_ATTR_UPDATE_MAX_LENGTH, 759 STMT_ATTR_CURSOR_TYPE, 760 STMT_ATTR_PREFETCH_ROWS 761}; 762MYSQL_STMT * mysql_stmt_init(MYSQL *mysql); 763int mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, 764 unsigned long length); 765int mysql_stmt_execute(MYSQL_STMT *stmt); 766int mysql_stmt_fetch(MYSQL_STMT *stmt); 767int mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind_arg, 768 unsigned int column, unsigned long offset); 769int mysql_stmt_store_result(MYSQL_STMT *stmt); 770unsigned long mysql_stmt_param_count(MYSQL_STMT *stmt); 771bool mysql_stmt_attr_set(MYSQL_STMT *stmt, 772 enum enum_stmt_attr_type attr_type, 773 const void *attr); 774bool mysql_stmt_attr_get(MYSQL_STMT *stmt, 775 enum enum_stmt_attr_type attr_type, 776 void *attr); 777bool mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *bnd); 778bool mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bnd); 779bool mysql_stmt_close(MYSQL_STMT *stmt); 780bool mysql_stmt_reset(MYSQL_STMT *stmt); 781bool mysql_stmt_free_result(MYSQL_STMT *stmt); 782bool mysql_stmt_send_long_data(MYSQL_STMT *stmt, 783 unsigned int param_number, 784 const char *data, unsigned long length); 785MYSQL_RES * mysql_stmt_result_metadata(MYSQL_STMT *stmt); 786MYSQL_RES * mysql_stmt_param_metadata(MYSQL_STMT *stmt); 787unsigned int mysql_stmt_errno(MYSQL_STMT *stmt); 788const char * mysql_stmt_error(MYSQL_STMT *stmt); 789const char * mysql_stmt_sqlstate(MYSQL_STMT *stmt); 790MYSQL_ROW_OFFSET mysql_stmt_row_seek(MYSQL_STMT *stmt, 791 MYSQL_ROW_OFFSET offset); 792MYSQL_ROW_OFFSET mysql_stmt_row_tell(MYSQL_STMT *stmt); 793void mysql_stmt_data_seek(MYSQL_STMT *stmt, uint64_t offset); 794uint64_t mysql_stmt_num_rows(MYSQL_STMT *stmt); 795uint64_t mysql_stmt_affected_rows(MYSQL_STMT *stmt); 796uint64_t mysql_stmt_insert_id(MYSQL_STMT *stmt); 797unsigned int mysql_stmt_field_count(MYSQL_STMT *stmt); 798bool mysql_commit(MYSQL *mysql); 799bool mysql_rollback(MYSQL *mysql); 800bool mysql_autocommit(MYSQL *mysql, bool auto_mode); 801bool mysql_more_results(MYSQL *mysql); 802int mysql_next_result(MYSQL *mysql); 803int mysql_stmt_next_result(MYSQL_STMT *stmt); 804void mysql_close(MYSQL *sock); 805void mysql_reset_server_public_key(void); 806