comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/fakemysql.h @ 69:33d812a61356

planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author jpayne
date Tue, 18 Mar 2025 17:55:14 -0400
parents
children
comparison
equal deleted inserted replaced
67:0e9998148a16 69:33d812a61356
1 /*
2 * fakemysql.h --
3 *
4 * Fake definitions of the MySQL API sufficient to build tdbc::mysql
5 * without having an MySQL installation on the build system. This file
6 * comprises only data type, constant and function definitions.
7 *
8 * The programmers of this file believe that it contains material not
9 * subject to copyright under the doctrines of scenes a faire and
10 * of merger of idea and expression. Accordingly, this file is in the
11 * public domain.
12 *
13 *-----------------------------------------------------------------------------
14 */
15
16 #ifndef FAKEMYSQL_H_INCLUDED
17 #define FAKEMYSQL_H_INCLUDED
18
19 #include <stddef.h>
20
21 #ifndef MODULE_SCOPE
22 #define MODULE_SCOPE extern
23 #endif
24
25 MODULE_SCOPE Tcl_LoadHandle MysqlInitStubs(Tcl_Interp*);
26
27 #ifdef _WIN32
28 #define STDCALL __stdcall
29 #else
30 #define STDCALL /* nothing */
31 #endif
32
33 enum enum_field_types {
34 MYSQL_TYPE_DECIMAL=0,
35 MYSQL_TYPE_TINY=1,
36 MYSQL_TYPE_SHORT=2,
37 MYSQL_TYPE_LONG=3,
38 MYSQL_TYPE_FLOAT=4,
39 MYSQL_TYPE_DOUBLE=5,
40 MYSQL_TYPE_NULL=6,
41 MYSQL_TYPE_TIMESTAMP=7,
42 MYSQL_TYPE_LONGLONG=8,
43 MYSQL_TYPE_INT24=9,
44 MYSQL_TYPE_DATE=10,
45 MYSQL_TYPE_TIME=11,
46 MYSQL_TYPE_DATETIME=12,
47 MYSQL_TYPE_YEAR=13,
48 MYSQL_TYPE_NEWDATE=14,
49 MYSQL_TYPE_VARCHAR=15,
50 MYSQL_TYPE_BIT=16,
51 MYSQL_TYPE_NEWDECIMAL=246,
52 MYSQL_TYPE_ENUM=247,
53 MYSQL_TYPE_SET=248,
54 MYSQL_TYPE_TINY_BLOB=249,
55 MYSQL_TYPE_MEDIUM_BLOB=250,
56 MYSQL_TYPE_LONG_BLOB=251,
57 MYSQL_TYPE_BLOB=252,
58 MYSQL_TYPE_VAR_STRING=253,
59 MYSQL_TYPE_STRING=254,
60 MYSQL_TYPE_GEOMETRY=255
61 };
62
63 enum mysql_option {
64 MYSQL_SET_CHARSET_NAME=7,
65 };
66
67 enum mysql_status {
68 MYSQL_STATUS_READY=0,
69 };
70
71 #define CLIENT_COMPRESS 32
72 #define CLIENT_INTERACTIVE 1024
73 #define MYSQL_DATA_TRUNCATED 101
74 #define MYSQL_ERRMSG_SIZE 512
75 #define MYSQL_NO_DATA 100
76 #define SCRAMBLE_LENGTH 20
77 #define SQLSTATE_LENGTH 5
78
79 typedef struct st_list LIST;
80 typedef struct st_mem_root MEM_ROOT;
81 typedef struct st_mysql MYSQL;
82 typedef struct st_mysql_bind MYSQL_BIND;
83 typedef struct st_mysql_field MYSQL_FIELD;
84 typedef struct st_mysql_res MYSQL_RES;
85 typedef char** MYSQL_ROW;
86 typedef struct st_mysql_stmt MYSQL_STMT;
87 typedef char my_bool;
88 #ifndef Socket_defined
89 typedef int my_socket;
90 #define INVALID_SOCKET -1
91 #endif
92 typedef Tcl_WideUInt my_ulonglong;
93 typedef struct st_net NET;
94 typedef struct st_used_mem USED_MEM;
95 typedef struct st_vio Vio;
96
97 struct st_mem_root {
98 USED_MEM *free;
99 USED_MEM *used;
100 USED_MEM *pre_alloc;
101 size_t min_malloc;
102 size_t block_size;
103 unsigned int block_num;
104 unsigned int first_block_usage;
105 void (*error_handler)(void);
106 };
107
108 struct st_mysql_options {
109 unsigned int connect_timeout;
110 unsigned int read_timeout;
111 unsigned int write_timeout;
112 unsigned int port;
113 unsigned int protocol;
114 unsigned long client_flag;
115 char *host;
116 char *user;
117 char *password;
118 char *unix_socket;
119 char *db;
120 struct st_dynamic_array *init_commands;
121 char *my_cnf_file;
122 char *my_cnf_group;
123 char *charset_dir;
124 char *charset_name;
125 char *ssl_key;
126 char *ssl_cert;
127 char *ssl_ca;
128 char *ssl_capath;
129 char *ssl_cipher;
130 char *shared_memory_base_name;
131 unsigned long max_allowed_packet;
132 my_bool use_ssl;
133 my_bool compress,named_pipe;
134 my_bool rpl_probe;
135 my_bool rpl_parse;
136 my_bool no_master_reads;
137 #if !defined(CHECK_EMBEDDED_DIFFERENCES) || defined(EMBEDDED_LIBRARY)
138 my_bool separate_thread;
139 #endif
140 enum mysql_option methods_to_use;
141 char *client_ip;
142 my_bool secure_auth;
143 my_bool report_data_truncation;
144 int (*local_infile_init)(void **, const char *, void *);
145 int (*local_infile_read)(void *, char *, unsigned int);
146 void (*local_infile_end)(void *);
147 int (*local_infile_error)(void *, char *, unsigned int);
148 void *local_infile_userdata;
149 void *extension;
150 };
151
152 struct st_net {
153 #if !defined(CHECK_EMBEDDED_DIFFERENCES) || !defined(EMBEDDED_LIBRARY)
154 Vio *vio;
155 unsigned char *buff;
156 unsigned char *buff_end;
157 unsigned char *write_pos;
158 unsigned char *read_pos;
159 my_socket fd;
160 unsigned long remain_in_buf;
161 unsigned long length;
162 unsigned long buf_length;
163 unsigned long where_b;
164 unsigned long max_packet;
165 unsigned long max_packet_size;
166 unsigned int pkt_nr;
167 unsigned int compress_pkt_nr;
168 unsigned int write_timeout;
169 unsigned int read_timeout;
170 unsigned int retry_count;
171 int fcntl;
172 unsigned int *return_status;
173 unsigned char reading_or_writing;
174 char save_char;
175 my_bool unused0;
176 my_bool unused;
177 my_bool compress;
178 my_bool unused1;
179 #endif
180 unsigned char *query_cache_query;
181 unsigned int last_errno;
182 unsigned char error;
183 my_bool unused2;
184 my_bool return_errno;
185 char last_error[MYSQL_ERRMSG_SIZE];
186 char sqlstate[SQLSTATE_LENGTH+1];
187 void *extension;
188 #if defined(MYSQL_SERVER) && !defined(EMBEDDED_LIBRARY)
189 my_bool skip_big_packet;
190 #endif
191 };
192
193 /*
194 * st_mysql differs between 5.0 and 5.1, but the 5.0 version is a
195 * strict subset, we don't use any of the 5.1 fields, and we don't
196 * ever allocate the structure ourselves.
197 */
198
199 struct st_mysql {
200 NET net;
201 unsigned char *connector_fd;
202 char *host;
203 char *user;
204 char *passwd;
205 char *unix_socket;
206 char *server_version;
207 char *host_info;
208 char *info;
209 char *db;
210 struct charset_info_st *charset;
211 MYSQL_FIELD *fields;
212 MEM_ROOT field_alloc;
213 my_ulonglong affected_rows;
214 my_ulonglong insert_id;
215 my_ulonglong extra_info;
216 unsigned long thread_id;
217 unsigned long packet_length;
218 unsigned int port;
219 unsigned long client_flag;
220 unsigned long server_capabilities;
221 unsigned int protocol_version;
222 unsigned int field_count;
223 unsigned int server_status;
224 unsigned int server_language;
225 unsigned int warning_count;
226 struct st_mysql_options options;
227 enum mysql_status status;
228 my_bool free_me;
229 my_bool reconnect;
230 char scramble[SCRAMBLE_LENGTH+1];
231 my_bool rpl_pivot;
232 struct st_mysql *master;
233 struct st_mysql *next_slave;
234 struct st_mysql* last_used_slave;
235 struct st_mysql* last_used_con;
236 LIST *stmts;
237 const struct st_mysql_methods *methods;
238 void *thd;
239 my_bool *unbuffered_fetch_owner;
240 char *info_buffer;
241 };
242
243 /*
244 * There are different version of the MYSQL_BIND structure before and after
245 * MySQL 5.1. We go after the fields of the structure using accessor functions
246 * so that the code in this file is compatible with both versions.
247 */
248
249 struct st_mysql_bind_51 { /* Post-5.1 */
250 unsigned long* length;
251 my_bool* is_null;
252 void* buffer;
253 my_bool* error;
254 unsigned char* row_ptr;
255 void (*store_param_func)(NET* net, MYSQL_BIND* param);
256 void (*fetch_result)(MYSQL_BIND*, MYSQL_FIELD*, unsigned char**);
257 void (*skip_result)(MYSQL_BIND*, MYSQL_FIELD*, unsigned char**);
258 unsigned long buffer_length;
259 unsigned long offset;
260 unsigned long length_value;
261 unsigned int param_number;
262 unsigned int pack_length;
263 enum enum_field_types buffer_type;
264 my_bool error_value;
265 my_bool is_unsigned;
266 my_bool long_data_used;
267 my_bool is_null_value;
268 void* extension;
269 };
270
271 struct st_mysql_bind_50 { /* Pre-5.1 */
272 unsigned long* length;
273 my_bool* is_null;
274 void* buffer;
275 my_bool* error;
276 enum enum_field_types buffer_type;
277 unsigned long buffer_length;
278 unsigned char* row_ptr;
279 unsigned long offset;
280 unsigned long length_value;
281 unsigned int param_number;
282 unsigned int pack_length;
283 my_bool error_value;
284 my_bool is_unsigned;
285 my_bool long_data_used;
286 my_bool is_null_value;
287 void (*store_param_func)(NET* net, MYSQL_BIND* param);
288 void (*fetch_result)(MYSQL_BIND*, MYSQL_FIELD*, unsigned char**);
289 void (*skip_result)(MYSQL_BIND*, MYSQL_FIELD*, unsigned char**);
290 };
291
292 /*
293 * There are also different versions of the MYSQL_FIELD structure; fortunately,
294 * the 5.1 version is a strict extension of the 5.0 version.
295 */
296
297 struct st_mysql_field {
298 char* name;
299 char *org_name;
300 char* table;
301 char* org_table;
302 char* db;
303 char* catalog;
304 char* def;
305 unsigned long length;
306 unsigned long max_length;
307 unsigned int name_length;
308 unsigned int org_name_length;
309 unsigned int table_length;
310 unsigned int org_table_length;
311 unsigned int db_length;
312 unsigned int catalog_length;
313 unsigned int def_length;
314 unsigned int flags;
315 unsigned int decimals;
316 unsigned int charsetnr;
317 enum enum_field_types type;
318 };
319 struct st_mysql_field_50 {
320 struct st_mysql_field field;
321 };
322 struct st_mysql_field_51 {
323 struct st_mysql_field field;
324 void* extension;
325 };
326 #define NOT_NULL_FLAG 1
327
328 #define IS_NUM(t) ((t) <= MYSQL_TYPE_INT24 || (t) == MYSQL_TYPE_YEAR || (t) == MYSQL_TYPE_NEWDECIMAL)
329
330 #define mysql_library_init mysql_server_init
331 #define mysql_library_end mysql_server_end
332
333 #include "mysqlStubs.h"
334
335 #endif /* not FAKEMYSQL_H_INCLUDED */