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