1 #ifndef SQL_COMMON_INCLUDED
2 #define SQL_COMMON_INCLUDED
3 /* Copyright (c) 2003, 2018, Oracle and/or its affiliates.
4    Copyright (c) 2010, 2018, MariaDB
5 
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; version 2 of the License.
9 
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14 
15    You should have received a copy of the GNU General Public License
16    along with this program; if not, write to the Free Software
17    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335  USA */
18 
19 #ifdef	__cplusplus
20 extern "C" {
21 #endif
22 
23 #include <mysql.h>
24 #include <hash.h>
25 
~ModuleFile()26 extern const char	*unknown_sqlstate;
27 extern const char	*cant_connect_sqlstate;
28 extern const char	*not_error_sqlstate;
29 
30 
31 struct mysql_async_context;
32 
33 struct st_mysql_options_extention {
dumpLocalRemap(StringRef Name,const ContinuousRangeMap<Key,Offset,InitialCapacity> & Map)34   char *plugin_dir;
35   char *default_auth;
36   char *ssl_crl;				/* PEM CRL file */
37   char *ssl_crlpath;				/* PEM directory of CRL-s? */
38   void (*report_progress)(const MYSQL *mysql,
39                           unsigned int stage,
40                           unsigned int max_stage,
41                           double progress,
42                           const char *proc_info,
43                           uint proc_info_length);
44   struct mysql_async_context *async_context;
45   HASH connection_attributes;
46   size_t connection_attributes_length;
47 };
dump()48 
49 typedef struct st_mysql_methods
50 {
51   my_bool (*read_query_result)(MYSQL *mysql);
52   my_bool (*advanced_command)(MYSQL *mysql,
53 			      enum enum_server_command command,
54 			      const unsigned char *header,
55 			      unsigned long header_length,
56 			      const unsigned char *arg,
57 			      unsigned long arg_length,
58 			      my_bool skip_check,
59                               MYSQL_STMT *stmt);
60   MYSQL_DATA *(*read_rows)(MYSQL *mysql,MYSQL_FIELD *mysql_fields,
61 			   unsigned int fields);
62   MYSQL_RES * (*use_result)(MYSQL *mysql);
63   void (*fetch_lengths)(unsigned long *to,
64 			MYSQL_ROW column, unsigned int field_count);
65   void (*flush_use_result)(MYSQL *mysql, my_bool flush_all_results);
66   int (*read_change_user_result)(MYSQL *mysql);
67 #if !defined(MYSQL_SERVER) || defined(EMBEDDED_LIBRARY)
68   MYSQL_FIELD * (*list_fields)(MYSQL *mysql);
69   my_bool (*read_prepare_result)(MYSQL *mysql, MYSQL_STMT *stmt);
70   int (*stmt_execute)(MYSQL_STMT *stmt);
71   int (*read_binary_rows)(MYSQL_STMT *stmt);
72   int (*unbuffered_fetch)(MYSQL *mysql, char **row);
73   void (*free_embedded_thd)(MYSQL *mysql);
74   const char *(*read_statistics)(MYSQL *mysql);
75   my_bool (*next_result)(MYSQL *mysql);
76   int (*read_rows_from_cursor)(MYSQL_STMT *stmt);
77 #endif
78 } MYSQL_METHODS;
79 
80 #ifdef LIBMARIADB
81 #define simple_command(mysql, command, arg, length, skip_check) ma_simple_command(mysql, command, (char *)arg, length, skip_check, NULL)
82 #else
83 #define simple_command(mysql, command, arg, length, skip_check) \
84   (*(mysql)->methods->advanced_command)(mysql, command, 0,  \
85                                         0, arg, length, skip_check, NULL)
86 #endif
87 #define stmt_command(mysql, command, arg, length, stmt) \
88   (*(mysql)->methods->advanced_command)(mysql, command, 0,  \
89                                         0, arg, length, 1, stmt)
90 
91 extern CHARSET_INFO *default_client_charset_info;
92 MYSQL_FIELD *unpack_fields(MYSQL *mysql, MYSQL_DATA *data,MEM_ROOT *alloc,
93                            uint fields, my_bool default_value,
94                            uint server_capabilities);
95 void free_rows(MYSQL_DATA *cur);
96 void free_old_query(MYSQL *mysql);
97 void end_server(MYSQL *mysql);
98 my_bool mysql_reconnect(MYSQL *mysql);
99 void mysql_read_default_options(struct st_mysql_options *options,
100 				const char *filename,const char *group);
101 my_bool
102 cli_advanced_command(MYSQL *mysql, enum enum_server_command command,
103 		     const unsigned char *header, ulong header_length,
104 		     const unsigned char *arg, ulong arg_length,
105                      my_bool skip_check, MYSQL_STMT *stmt);
106 unsigned long cli_safe_read(MYSQL *mysql);
107 unsigned long cli_safe_read_reallen(MYSQL *mysql, ulong* reallen);
108 void net_clear_error(NET *net);
109 void set_stmt_errmsg(MYSQL_STMT *stmt, NET *net);
110 void set_stmt_error(MYSQL_STMT *stmt, int errcode, const char *sqlstate,
111                     const char *err);
112 void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate);
113 void set_mysql_extended_error(MYSQL *mysql, int errcode, const char *sqlstate,
114                               const char *format, ...);
115 
116 /* client side of the pluggable authentication */
117 struct st_vio;
118 struct st_plugin_vio_info;
119 void mpvio_info(struct st_vio *vio, struct st_plugin_vio_info *info);
120 int run_plugin_auth(MYSQL *mysql, char *data, uint data_len,
121                     const char *data_plugin, const char *db);
122 int mysql_client_plugin_init();
123 void mysql_client_plugin_deinit();
124 struct st_mysql_client_plugin;
125 extern struct st_mysql_client_plugin *mysql_client_builtins[];
126 uchar * send_client_connect_attrs(MYSQL *mysql, uchar *buf);
127 
128 /* Non-blocking client API. */
129 void my_context_install_suspend_resume_hook(struct mysql_async_context *b,
130                                             void (*)(my_bool, void *), void *);
131 
132 #ifdef	__cplusplus
133 }
134 #endif
135 
136 #define protocol_41(A) ((A)->server_capabilities & CLIENT_PROTOCOL_41)
137 
138 #endif /* SQL_COMMON_INCLUDED */
139