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