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