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