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