Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2024-05-18 08:29:50

0001 /*
0002  * fakemysql.h --
0003  *
0004  *  Fake definitions of the MySQL API sufficient to build tdbc::mysql
0005  *  without having an MySQL installation on the build system. This file
0006  *  comprises only data type, constant and function definitions.
0007  *
0008  * The programmers of this file believe that it contains material not
0009  * subject to copyright under the doctrines of scenes a faire and
0010  * of merger of idea and expression. Accordingly, this file is in the
0011  * public domain.
0012  *
0013  *-----------------------------------------------------------------------------
0014  */
0015 
0016 #ifndef FAKEMYSQL_H_INCLUDED
0017 #define FAKEMYSQL_H_INCLUDED
0018 
0019 #include <stddef.h>
0020 
0021 #ifndef MODULE_SCOPE
0022 #define MODULE_SCOPE extern
0023 #endif
0024 
0025 MODULE_SCOPE Tcl_LoadHandle MysqlInitStubs(Tcl_Interp*);
0026 
0027 #ifdef _WIN32
0028 #define STDCALL __stdcall
0029 #else
0030 #define STDCALL /* nothing */
0031 #endif
0032 
0033 enum enum_field_types {
0034     MYSQL_TYPE_DECIMAL=0,
0035     MYSQL_TYPE_TINY=1,
0036     MYSQL_TYPE_SHORT=2,
0037     MYSQL_TYPE_LONG=3,
0038     MYSQL_TYPE_FLOAT=4,
0039     MYSQL_TYPE_DOUBLE=5,
0040     MYSQL_TYPE_NULL=6,
0041     MYSQL_TYPE_TIMESTAMP=7,
0042     MYSQL_TYPE_LONGLONG=8,
0043     MYSQL_TYPE_INT24=9,
0044     MYSQL_TYPE_DATE=10,
0045     MYSQL_TYPE_TIME=11,
0046     MYSQL_TYPE_DATETIME=12,
0047     MYSQL_TYPE_YEAR=13,
0048     MYSQL_TYPE_NEWDATE=14,
0049     MYSQL_TYPE_VARCHAR=15,
0050     MYSQL_TYPE_BIT=16,
0051     MYSQL_TYPE_NEWDECIMAL=246,
0052     MYSQL_TYPE_ENUM=247,
0053     MYSQL_TYPE_SET=248,
0054     MYSQL_TYPE_TINY_BLOB=249,
0055     MYSQL_TYPE_MEDIUM_BLOB=250,
0056     MYSQL_TYPE_LONG_BLOB=251,
0057     MYSQL_TYPE_BLOB=252,
0058     MYSQL_TYPE_VAR_STRING=253,
0059     MYSQL_TYPE_STRING=254,
0060     MYSQL_TYPE_GEOMETRY=255
0061 };
0062 
0063 enum mysql_option {
0064     MYSQL_SET_CHARSET_NAME=7,
0065 };
0066 
0067 enum mysql_status {
0068     MYSQL_STATUS_READY=0,
0069 };
0070 
0071 #define CLIENT_COMPRESS     32
0072 #define CLIENT_INTERACTIVE 1024
0073 #define MYSQL_DATA_TRUNCATED 101
0074 #define MYSQL_ERRMSG_SIZE 512
0075 #define MYSQL_NO_DATA 100
0076 #define SCRAMBLE_LENGTH 20
0077 #define SQLSTATE_LENGTH 5
0078 
0079 typedef struct st_list LIST;
0080 typedef struct st_mem_root MEM_ROOT;
0081 typedef struct st_mysql MYSQL;
0082 typedef struct st_mysql_bind MYSQL_BIND;
0083 typedef struct st_mysql_field MYSQL_FIELD;
0084 typedef struct st_mysql_res MYSQL_RES;
0085 typedef char** MYSQL_ROW;
0086 typedef struct st_mysql_stmt MYSQL_STMT;
0087 typedef char my_bool;
0088 #ifndef Socket_defined
0089 typedef int my_socket;
0090 #define INVALID_SOCKET -1
0091 #endif
0092 typedef Tcl_WideUInt my_ulonglong;
0093 typedef struct st_net NET;
0094 typedef struct st_used_mem USED_MEM;
0095 typedef struct st_vio Vio;
0096 
0097 struct st_mem_root {
0098   USED_MEM *free;
0099   USED_MEM *used;
0100   USED_MEM *pre_alloc;
0101   size_t min_malloc;
0102   size_t block_size;
0103   unsigned int block_num;
0104   unsigned int first_block_usage;
0105   void (*error_handler)(void);
0106 };
0107 
0108 struct st_mysql_options {
0109     unsigned int connect_timeout;
0110     unsigned int read_timeout;
0111     unsigned int write_timeout;
0112     unsigned int port;
0113     unsigned int protocol;
0114     unsigned long client_flag;
0115     char *host;
0116     char *user;
0117     char *password;
0118     char *unix_socket;
0119     char *db;
0120     struct st_dynamic_array *init_commands;
0121     char *my_cnf_file;
0122     char *my_cnf_group;
0123     char *charset_dir;
0124     char *charset_name;
0125     char *ssl_key;
0126     char *ssl_cert;
0127     char *ssl_ca;
0128     char *ssl_capath;
0129     char *ssl_cipher;
0130     char *shared_memory_base_name;
0131     unsigned long max_allowed_packet;
0132     my_bool use_ssl;
0133     my_bool compress,named_pipe;
0134     my_bool rpl_probe;
0135     my_bool rpl_parse;
0136     my_bool no_master_reads;
0137 #if !defined(CHECK_EMBEDDED_DIFFERENCES) || defined(EMBEDDED_LIBRARY)
0138     my_bool separate_thread;
0139 #endif
0140     enum mysql_option methods_to_use;
0141     char *client_ip;
0142     my_bool secure_auth;
0143     my_bool report_data_truncation;
0144     int (*local_infile_init)(void **, const char *, void *);
0145     int (*local_infile_read)(void *, char *, unsigned int);
0146     void (*local_infile_end)(void *);
0147     int (*local_infile_error)(void *, char *, unsigned int);
0148     void *local_infile_userdata;
0149     void *extension;
0150 };
0151 
0152 struct st_net {
0153 #if !defined(CHECK_EMBEDDED_DIFFERENCES) || !defined(EMBEDDED_LIBRARY)
0154     Vio *vio;
0155     unsigned char *buff;
0156     unsigned char *buff_end;
0157     unsigned char *write_pos;
0158     unsigned char *read_pos;
0159     my_socket fd;
0160     unsigned long remain_in_buf;
0161     unsigned long length;
0162     unsigned long buf_length;
0163     unsigned long where_b;
0164     unsigned long max_packet;
0165     unsigned long max_packet_size;
0166     unsigned int pkt_nr;
0167     unsigned int compress_pkt_nr;
0168     unsigned int write_timeout;
0169     unsigned int read_timeout;
0170     unsigned int retry_count;
0171     int fcntl;
0172     unsigned int *return_status;
0173     unsigned char reading_or_writing;
0174     char save_char;
0175     my_bool unused0;
0176     my_bool unused;
0177     my_bool compress;
0178     my_bool unused1;
0179 #endif
0180     unsigned char *query_cache_query;
0181     unsigned int last_errno;
0182     unsigned char error;
0183     my_bool unused2;
0184     my_bool return_errno;
0185     char last_error[MYSQL_ERRMSG_SIZE];
0186     char sqlstate[SQLSTATE_LENGTH+1];
0187     void *extension;
0188 #if defined(MYSQL_SERVER) && !defined(EMBEDDED_LIBRARY)
0189     my_bool skip_big_packet;
0190 #endif
0191 };
0192 
0193 /*
0194  * st_mysql differs between 5.0 and 5.1, but the 5.0 version is a
0195  * strict subset, we don't use any of the 5.1 fields, and we don't
0196  * ever allocate the structure ourselves.
0197  */
0198 
0199 struct st_mysql {
0200     NET net;
0201     unsigned char *connector_fd;
0202     char *host;
0203     char *user;
0204     char *passwd;
0205     char *unix_socket;
0206     char *server_version;
0207     char *host_info;
0208     char *info;
0209     char *db;
0210     struct charset_info_st *charset;
0211     MYSQL_FIELD *fields;
0212     MEM_ROOT field_alloc;
0213     my_ulonglong affected_rows;
0214     my_ulonglong insert_id;
0215     my_ulonglong extra_info;
0216     unsigned long thread_id;
0217     unsigned long packet_length;
0218     unsigned int port;
0219     unsigned long client_flag;
0220     unsigned long server_capabilities;
0221     unsigned int protocol_version;
0222     unsigned int field_count;
0223     unsigned int server_status;
0224     unsigned int server_language;
0225     unsigned int warning_count;
0226     struct st_mysql_options options;
0227     enum mysql_status status;
0228     my_bool free_me;
0229     my_bool reconnect;
0230     char scramble[SCRAMBLE_LENGTH+1];
0231     my_bool rpl_pivot;
0232     struct st_mysql *master;
0233     struct st_mysql *next_slave;
0234     struct st_mysql* last_used_slave;
0235     struct st_mysql* last_used_con;
0236     LIST  *stmts;
0237     const struct st_mysql_methods *methods;
0238     void *thd;
0239     my_bool *unbuffered_fetch_owner;
0240     char *info_buffer;
0241 };
0242 
0243 /*
0244  * There are different version of the MYSQL_BIND structure before and after
0245  * MySQL 5.1. We go after the fields of the structure using accessor functions
0246  * so that the code in this file is compatible with both versions.
0247  */
0248 
0249 struct st_mysql_bind_51 {   /* Post-5.1 */
0250     unsigned long* length;
0251     my_bool* is_null;
0252     void* buffer;
0253     my_bool* error;
0254     unsigned char* row_ptr;
0255     void (*store_param_func)(NET* net, MYSQL_BIND* param);
0256     void (*fetch_result)(MYSQL_BIND*, MYSQL_FIELD*, unsigned char**);
0257     void (*skip_result)(MYSQL_BIND*, MYSQL_FIELD*, unsigned char**);
0258     unsigned long buffer_length;
0259     unsigned long offset;
0260     unsigned long length_value;
0261     unsigned int param_number;
0262     unsigned int pack_length;
0263     enum enum_field_types buffer_type;
0264     my_bool error_value;
0265     my_bool is_unsigned;
0266     my_bool long_data_used;
0267     my_bool is_null_value;
0268     void* extension;
0269 };
0270 
0271 struct st_mysql_bind_50 {   /* Pre-5.1 */
0272     unsigned long* length;
0273     my_bool* is_null;
0274     void* buffer;
0275     my_bool* error;
0276     enum enum_field_types buffer_type;
0277     unsigned long buffer_length;
0278     unsigned char* row_ptr;
0279     unsigned long offset;
0280     unsigned long length_value;
0281     unsigned int param_number;
0282     unsigned int pack_length;
0283     my_bool error_value;
0284     my_bool is_unsigned;
0285     my_bool long_data_used;
0286     my_bool is_null_value;
0287     void (*store_param_func)(NET* net, MYSQL_BIND* param);
0288     void (*fetch_result)(MYSQL_BIND*, MYSQL_FIELD*, unsigned char**);
0289     void (*skip_result)(MYSQL_BIND*, MYSQL_FIELD*, unsigned char**);
0290 };
0291 
0292 /*
0293  * There are also different versions of the MYSQL_FIELD structure; fortunately,
0294  * the 5.1 version is a strict extension of the 5.0 version.
0295  */
0296 
0297 struct st_mysql_field {
0298     char* name;
0299     char *org_name;
0300     char* table;
0301     char* org_table;
0302     char* db;
0303     char* catalog;
0304     char* def;
0305     unsigned long length;
0306     unsigned long max_length;
0307     unsigned int name_length;
0308     unsigned int org_name_length;
0309     unsigned int table_length;
0310     unsigned int org_table_length;
0311     unsigned int db_length;
0312     unsigned int catalog_length;
0313     unsigned int def_length;
0314     unsigned int flags;
0315     unsigned int decimals;
0316     unsigned int charsetnr;
0317     enum enum_field_types type;
0318 };
0319 struct st_mysql_field_50 {
0320     struct st_mysql_field field;
0321 };
0322 struct st_mysql_field_51 {
0323     struct st_mysql_field field;
0324     void* extension;
0325 };
0326 #define NOT_NULL_FLAG 1
0327 
0328 #define IS_NUM(t)   ((t) <= MYSQL_TYPE_INT24 || (t) == MYSQL_TYPE_YEAR || (t) == MYSQL_TYPE_NEWDECIMAL)
0329 
0330 #define mysql_library_init mysql_server_init
0331 #define mysql_library_end mysql_server_end
0332 
0333 #include "mysqlStubs.h"
0334 
0335 #endif /* not FAKEMYSQL_H_INCLUDED */