diff options
author | unknown <monty@mashka.mysql.fi> | 2003-01-21 21:07:59 +0200 |
---|---|---|
committer | unknown <monty@mashka.mysql.fi> | 2003-01-21 21:07:59 +0200 |
commit | 10e22c346a4105c2c348ac500851e3b59cd9d887 (patch) | |
tree | b3f7b07e6d74a88c6ef0b3e8f43bc27b784bb24d | |
parent | fd86106365476d5c774cd4779164516a0e56744a (diff) | |
download | mariadb-git-10e22c346a4105c2c348ac500851e3b59cd9d887.tar.gz |
Portability fixes (for windows)
Some changes to the prepared statement protocol to make it easier to use and faster.
Makefile.am:
Fix to make dist to work with cmd-line-utils
client/mysql.cc:
Portability fixes
client/mysqlbinlog.cc:
Portabiliy fixes and remove usafe of FILE
configure.in:
Fix to make dist to work with cmd-line-utils
heap/_check.c:
Portability fixes
include/config-win.h:
Portability fixes
include/m_ctype.h:
Indentation cleanup
include/my_list.h:
Portability fixes
include/mysql.h:
Cleanup of BIND structure
include/violite.h:
Portability fixes
innobase/dict/dict0dict.c:
Portability fixes
innobase/dict/dict0load.c:
Portability fixes
innobase/include/os0proc.h:
Portability fixes (Heikki, please check)
innobase/os/os0proc.c:
Portability fixes (Heikki, please check)
innobase/ut/ut0ut.c:
Portability fixes
isam/pack_isam.c:
Portability fixes
libmysql/libmysql.c:
Portability fixes
Remove obscure usage of the length parameter for prepared statements.
libmysql/libmysql.def:
Remove not existing functions
libmysqld/lib_sql.cc:
Remove compiler warning
mysql-test/r/explain.result:
Fix after merge
mysql-test/r/join.result:
Fix after merge
mysys/my_once.c:
Portability fix
mysys/tree.c:
Portability fixes
sql/field.cc:
Portability fixes
sql/filesort.cc:
move assert.h to mysql_priv.h
sql/ha_berkeley.cc:
move assert.h to mysql_priv.h
sql/ha_innodb.cc:
move assert.h to mysql_priv.h
sql/item.cc:
move assert.h to mysql_priv.h
Fixed syntax error
sql/item_cmpfunc.cc:
move assert.h to mysql_priv.h
sql/item_func.cc:
move assert.h to mysql_priv.h
sql/item_row.cc:
move assert.h to mysql_priv.h
sql/item_strfunc.cc:
Portability fix
sql/item_subselect.cc:
Portability fix
sql/item_sum.cc:
move assert.h to mysql_priv.h
sql/lex.h:
Portability fix
sql/lock.cc:
move assert.h to mysql_priv.h
sql/log.cc:
move assert.h to mysql_priv.h
sql/log_event.cc:
Portability fix
sql/mf_iocache.cc:
move assert.h to mysql_priv.h
sql/mysql_priv.h:
move assert.h to mysql_priv.h
sql/mysqld.cc:
move assert.h to mysql_priv.h
sql/opt_range.cc:
move assert.h to mysql_priv.h
sql/password.c:
Portability fix
sql/protocol.cc:
move assert.h to mysql_priv.h
sql/set_var.cc:
Portability fix
sql/slave.cc:
move assert.h to mysql_priv.h
sql/spatial.cc:
Portability fix
sql/sql_acl.cc:
move assert.h to mysql_priv.h
sql/sql_base.cc:
move assert.h to mysql_priv.h
sql/sql_cache.cc:
move assert.h to mysql_priv.h
sql/sql_class.cc:
move assert.h to mysql_priv.h
sql/sql_handler.cc:
move assert.h to mysql_priv.h
sql/sql_help.cc:
Removed compiler warning
sql/sql_lex.cc:
Portability fix
sql/sql_lex.h:
Portability fix
sql/sql_parse.cc:
move assert.h to mysql_priv.h
sql/sql_prepare.cc:
move assert.h to mysql_priv.h
sql/sql_repl.cc:
move assert.h to mysql_priv.h
sql/sql_select.cc:
move assert.h to mysql_priv.h
sql/sql_string.cc:
Portability fix
sql/sql_string.h:
Portability fix
sql/sql_table.cc:
move assert.h to mysql_priv.h
sql/sql_yacc.yy:
Portability fix
Remove not accessed code
strings/ctype-bin.c:
Portability fix
strings/ctype-mb.c:
Portability fix
strings/ctype.c:
Portability fix
tests/client_test.c:
A
69 files changed, 945 insertions, 871 deletions
diff --git a/BUILD/compile-pentium-max b/BUILD/compile-pentium-max index d41274d4f5e..a1a256f949f 100755 --- a/BUILD/compile-pentium-max +++ b/BUILD/compile-pentium-max @@ -3,9 +3,9 @@ path=`dirname $0` . "$path/SETUP.sh" -extra_flags="$pentium_cflags $fast_cflags" +extra_flags="$pentium_cflags $fast_cflags -g" extra_configs="$pentium_configs" -strip=yes +#strip=yes extra_configs="$extra_configs --with-innodb --with-berkeley-db \ --with-embedded-server --enable-thread-safe-client \ diff --git a/Makefile.am b/Makefile.am index 7949e7be776..087052a309e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -21,7 +21,8 @@ AUTOMAKE_OPTIONS = foreign # These are built from source in the Docs directory EXTRA_DIST = INSTALL-SOURCE README \ COPYING COPYING.LIB -SUBDIRS = . include @docs_dirs@ @readline_dir@ \ +SUBDIRS = . include @docs_dirs@ \ + @readline_topdir@ @readline_dir@ \ @thread_dirs@ pstack @sql_client_dirs@ \ @sql_server_dirs@ scripts man tests \ BUILD os2 libmysql_r @libmysqld_dirs@ \ diff --git a/client/mysql.cc b/client/mysql.cc index b8a98566cbd..8724cb539f6 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -1,4 +1,4 @@ -/* Copyright (C) 2000-2002 MySQL AB +/* Copyright (C) 2000-2003 MySQL AB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -80,8 +80,6 @@ extern "C" { #if defined( __WIN__) || defined(OS2) #include <conio.h> #else -// readline 4.2 has own __P -#undef __P #include <readline/readline.h> #define HAVE_READLINE #endif @@ -1443,7 +1441,7 @@ static int com_server_help(String *buffer __attribute__((unused)), if (result) { - int num_rows= mysql_num_rows(result); + ulonglong num_rows= mysql_num_rows(result); if (num_rows == 1) { if (!(cur= mysql_fetch_row(result))) diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index 6dbd79e9053..fff7224afd6 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -67,7 +67,8 @@ static void dump_remote_table(NET* net, const char* db, const char* table); static void die(const char* fmt, ...); static MYSQL* safe_connect(); -class Load_log_processor { +class Load_log_processor +{ char target_dir_name[MY_NFILE]; int target_dir_name_len; DYNAMIC_ARRAY file_names; @@ -103,12 +104,10 @@ class Load_log_processor { void append_to_file(const char* fname, int flags, gptr data, uint size) { - FILE *file; - if(!(file= my_fopen(fname,flags,MYF(MY_WME)))) - exit(1); - if (my_fwrite(file,data,size,MYF(MY_WME|MY_NABP))) - exit(1); - if (my_fclose(file,MYF(MY_WME))) + File file; + if ((file= my_open(fname,flags,MYF(MY_WME)) < 0) || + my_write(file,(byte*) data,size,MYF(MY_WME|MY_NABP)) || + my_close(file,MYF(MY_WME))) exit(1); } @@ -176,7 +175,7 @@ public: void process(Create_file_log_event *ce) { const char *fname= create_file(ce); - append_to_file (fname,O_CREAT|O_BINARY,ce->block,ce->block_len); + append_to_file(fname,O_CREAT|O_BINARY,ce->block,ce->block_len); } void process(Append_block_log_event *ae) { diff --git a/cmd-line-utils/Makefile.am b/cmd-line-utils/Makefile.am new file mode 100644 index 00000000000..340dcdccf18 --- /dev/null +++ b/cmd-line-utils/Makefile.am @@ -0,0 +1,6 @@ +## Process this file with automake to create Makefile.in + +SUBDIRS= @readline_basedir@ + +# Don't update the files from bitkeeper +%::SCCS/s.% diff --git a/configure.in b/configure.in index 4f2ff269381..5a4456387ae 100644 --- a/configure.in +++ b/configure.in @@ -2039,14 +2039,18 @@ mkdir include/readline if [test "$with_libedit" = "yes"] || [test "$with_libedit" = "undefined"] && [test "$with_readline" = "undefined"] then - readline_dir="cmd-line-utils/libedit" + readline_topdir="cmd-line-utils" + readline_basedir="libedit" + readline_dir="$readline_topdir/$readline_basedir" readline_link="\$(top_builddir)/cmd-line-utils/libedit/liblibedit.a" readline_h_ln_cmd="\$(LN) \$(top_builddir)/cmd-line-utils/libedit/readline/*.h readline/" compile_libedit=yes AC_DEFINE_UNQUOTED(USE_LIBEDIT_INTERFACE) elif test "$with_readline" = "yes" then - readline_dir="cmd-line-utils/readline" + readline_topdir="cmd-line-utils" + readline_basedir="readline" + readline_dir="$readline_topdir/$readline_basedir" readline_link="\$(top_builddir)/cmd-line-utils/readline/libreadline.a" readline_h_ln_cmd="\$(LN) \$(top_builddir)/cmd-line-utils/readline/*.h readline/" compile_readline=yes @@ -2056,16 +2060,19 @@ else MYSQL_CHECK_NEW_RL_INTERFACE if ["$mysql_cv_new_rl_interface"="yes"] || [test "$mysql_cv_libedit_interface"="no"] then - readline_dir="" readline_link="-lreadline" else - readline_dir="" readline_link="-ledit" fi + readline_topdir="" + readline_basedir="" + readline_dir="" readline_h_ln_cmd="" fi AC_SUBST(readline_dir) +AC_SUBST(readline_topdir) +AC_SUBST(readline_basedir) AC_SUBST(readline_link) AC_SUBST(readline_h_ln_cmd) @@ -2077,10 +2084,10 @@ dnl you must also create strings/ctype-$charset_name.c AC_DIVERT_PUSH(0) CHARSETS_AVAILABLE="armscii8 big5 cp1251 cp1257 - croat czech danish dec8 dos estonia euc_kr gb2312 gbk - german1 greek hebrew hp8 hungarian koi8_ru koi8_ukr - latin1 latin1_de latin2 latin5 sjis swe7 tis620 ucs2 ujis - usa7 utf8 win1250 win1250ch win1251ukr" + croat czech danish dec8 dos estonia euc_kr gb2312 gbk + german1 greek hebrew hp8 hungarian koi8_ru koi8_ukr + latin1 latin1_de latin2 latin5 sjis swe7 tis620 ucs2 ujis + usa7 utf8 win1250 win1250ch win1251ukr" CHARSETS_DEPRECATED="win1251" CHARSETS_COMPLEX="big5 czech euc_kr gb2312 gbk latin1_de sjis tis620 ucs2 ujis utf8 win1250ch" DEFAULT_CHARSET=latin1 @@ -2454,11 +2461,13 @@ AC_SUBST(GXX) if test "$compile_readline" = "yes" then + AC_OUTPUT(cmd-line-utils/Makefile) AC_OUTPUT(cmd-line-utils/readline/Makefile) fi if test "$compile_libedit" = "yes" then + AC_OUTPUT(cmd-line-utils/Makefile) AC_OUTPUT(cmd-line-utils/libedit/Makefile) fi diff --git a/heap/_check.c b/heap/_check.c index bc1cd24113c..d4c4c26b346 100644 --- a/heap/_check.c +++ b/heap/_check.c @@ -20,6 +20,8 @@ static int check_one_key(HP_KEYDEF *keydef, uint keynr, ulong records, ulong blength, my_bool print_status); +static int check_one_rb_key(HP_INFO *info, uint keynr, ulong records, + my_bool print_status); /* diff --git a/include/config-win.h b/include/config-win.h index dce543cd2b0..efe226b2381 100644 --- a/include/config-win.h +++ b/include/config-win.h @@ -262,6 +262,7 @@ inline double ulonglong2double(ulonglong value) #define HAVE_ISAM /* We want to have support for ISAM in 4.0 */ #define HAVE_QUERY_CACHE #define SPRINTF_RETURNS_INT +#define HAVE_VIO #ifdef NOT_USED #define HAVE_SNPRINTF /* Gave link error */ diff --git a/include/m_ctype.h b/include/m_ctype.h index ee6a50e6b8d..91bc0e67e64 100644 --- a/include/m_ctype.h +++ b/include/m_ctype.h @@ -26,7 +26,6 @@ extern "C" { #endif - #define MY_CS_NAME_SIZE 32 #define MY_CS_CTYPE_TABLE_SIZE 257 #define MY_CS_TO_LOWER_TABLE_SIZE 256 @@ -38,7 +37,8 @@ extern "C" { #define my_wc_t ulong -typedef struct unicase_info_st { +typedef struct unicase_info_st +{ uint16 toupper; uint16 tolower; uint16 sort; @@ -66,7 +66,8 @@ typedef struct unicase_info_st { #define MY_CHARSET_CURRENT (default_charset_info->number) -typedef struct my_uni_idx_st { +typedef struct my_uni_idx_st +{ uint16 from; uint16 to; uchar *tab; @@ -136,18 +137,27 @@ typedef struct charset_info_st char max_sort_char; /* For LIKE optimization */ /* Charset dependant snprintf() */ - int (*snprintf)(struct charset_info_st *, char *to, uint n, const char *fmt, ...); - int (*long10_to_str)(struct charset_info_st *, char *to, uint n, int radix, long int val); - int (*longlong10_to_str)(struct charset_info_st *, char *to, uint n, int radix, longlong val); + int (*snprintf)(struct charset_info_st *, char *to, uint n, const char *fmt, + ...); + int (*long10_to_str)(struct charset_info_st *, char *to, uint n, int radix, + long int val); + int (*longlong10_to_str)(struct charset_info_st *, char *to, uint n, + int radix, longlong val); /* String-to-number convertion routines */ - long (*strntol)(struct charset_info_st *, const char *s, uint l, int base, char **e, int *err); - ulong (*strntoul)(struct charset_info_st *, const char *s, uint l, int base, char **e, int *err); - longlong (*strntoll)(struct charset_info_st *, const char *s, uint l, int base, char **e, int *err); - ulonglong (*strntoull)(struct charset_info_st *, const char *s, uint l, int base, char **e, int *err); - double (*strntod)(struct charset_info_st *, char *s, uint l, char **e, int *err); + long (*strntol)(struct charset_info_st *, const char *s, uint l, + int base, char **e, int *err); + ulong (*strntoul)(struct charset_info_st *, const char *s, uint l, + int base, char **e, int *err); + longlong (*strntoll)(struct charset_info_st *, const char *s, uint l, + int base, char **e, int *err); + ulonglong (*strntoull)(struct charset_info_st *, const char *s, uint l, + int base, char **e, int *err); + double (*strntod)(struct charset_info_st *, char *s, uint l, char **e, + int *err); - ulong (*scan)(struct charset_info_st *, const char *b, const char *e, int sq); + ulong (*scan)(struct charset_info_st *, const char *b, const char *e, + int sq); } CHARSET_INFO; @@ -162,8 +172,10 @@ extern my_bool my_parse_charset_xml(const char *bug, uint len, int (*add)(CHARSET_INFO *cs)); /* declarations for simple charsets */ -extern int my_strnxfrm_simple(CHARSET_INFO *, uchar *, uint, const uchar *, uint); -extern int my_strnncoll_simple(CHARSET_INFO *, const uchar *, uint, const uchar *, uint); +extern int my_strnxfrm_simple(CHARSET_INFO *, uchar *, uint, const uchar *, + uint); +extern int my_strnncoll_simple(CHARSET_INFO *, const uchar *, uint, + const uchar *, uint); extern uint my_hash_caseup_simple(CHARSET_INFO *cs, const byte *key, uint len); @@ -181,36 +193,45 @@ extern void my_casedn_8bit(CHARSET_INFO *, char *, uint); extern void my_tosort_8bit(CHARSET_INFO *, char *, uint); extern int my_strcasecmp_8bit(CHARSET_INFO * cs, const char *, const char *); -extern int my_strncasecmp_8bit(CHARSET_INFO * cs, const char *, const char *, uint); +extern int my_strncasecmp_8bit(CHARSET_INFO * cs, const char *, const char *, + uint); int my_mb_wc_8bit(CHARSET_INFO *cs,my_wc_t *wc, const uchar *s,const uchar *e); int my_wc_mb_8bit(CHARSET_INFO *cs,my_wc_t wc, uchar *s, uchar *e); ulong my_scan_8bit(CHARSET_INFO *cs, const char *b, const char *e, int sq); -int my_snprintf_8bit(struct charset_info_st *, char *to, uint n, const char *fmt, ...); - -long my_strntol_8bit(CHARSET_INFO *, const char *s, uint l, int base, char **e, int *err); -ulong my_strntoul_8bit(CHARSET_INFO *, const char *s, uint l, int base, char **e, int *err); -longlong my_strntoll_8bit(CHARSET_INFO *, const char *s, uint l, int base, char **e, int *err); -ulonglong my_strntoull_8bit(CHARSET_INFO *, const char *s, uint l, int base, char **e, int *err); -double my_strntod_8bit(CHARSET_INFO *, char *s, uint l,char **e, int *err); - -int my_long10_to_str_8bit(CHARSET_INFO *, char *to, uint l, int radix, long int val); -int my_longlong10_to_str_8bit(CHARSET_INFO *, char *to, uint l, int radix, longlong val); +int my_snprintf_8bit(struct charset_info_st *, char *to, uint n, + const char *fmt, ...); + +long my_strntol_8bit(CHARSET_INFO *, const char *s, uint l, int base, + char **e, int *err); +ulong my_strntoul_8bit(CHARSET_INFO *, const char *s, uint l, int base, + char **e, int *err); +longlong my_strntoll_8bit(CHARSET_INFO *, const char *s, uint l, int base, + char **e, int *err); +ulonglong my_strntoull_8bit(CHARSET_INFO *, const char *s, uint l, int base, + char **e, int *err); +double my_strntod_8bit(CHARSET_INFO *, char *s, uint l,char **e, + int *err); + +int my_long10_to_str_8bit(CHARSET_INFO *, char *to, uint l, int radix, + long int val); +int my_longlong10_to_str_8bit(CHARSET_INFO *, char *to, uint l, int radix, + longlong val); my_bool my_like_range_simple(CHARSET_INFO *cs, - const char *ptr, uint ptr_length, - int escape, int w_one, int w_many, - uint res_length, - char *min_str, char *max_str, - uint *min_length, uint *max_length); + const char *ptr, uint ptr_length, + int escape, int w_one, int w_many, + uint res_length, + char *min_str, char *max_str, + uint *min_length, uint *max_length); int my_wildcmp_8bit(CHARSET_INFO *, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many); + const char *str,const char *str_end, + const char *wildstr,const char *wildend, + int escape, int w_one, int w_many); #ifdef USE_MB @@ -220,15 +241,14 @@ extern void my_casedn_str_mb(CHARSET_INFO *, char *); extern void my_caseup_mb(CHARSET_INFO *, char *, uint); extern void my_casedn_mb(CHARSET_INFO *, char *, uint); extern int my_strcasecmp_mb(CHARSET_INFO * cs,const char *, const char *); -extern int my_strncasecmp_mb(CHARSET_INFO * cs,const char *, const char *t, uint); +extern int my_strncasecmp_mb(CHARSET_INFO * cs,const char *, const char *t, + uint); int my_wildcmp_mb(CHARSET_INFO *, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many); + const char *str,const char *str_end, + const char *wildstr,const char *wildend, + int escape, int w_one, int w_many); #endif - - #define _U 01 /* Upper case */ #define _L 02 /* Lower case */ #define _NMR 04 /* Numeral (digit) */ diff --git a/include/my_list.h b/include/my_list.h index 056e1f13b36..789bbb50f97 100644 --- a/include/my_list.h +++ b/include/my_list.h @@ -32,8 +32,8 @@ extern LIST *list_add(LIST *root,LIST *element); extern LIST *list_delete(LIST *root,LIST *element); extern LIST *list_cons(void *data,LIST *root); extern LIST *list_reverse(LIST *root); -extern void list_free(LIST *root,uint free_data); -extern uint list_length(LIST *list); +extern void list_free(LIST *root,unsigned int free_data); +extern unsigned int list_length(LIST *list); extern int list_walk(LIST *list,list_walk_action action,gptr argument); #define rest(a) ((a)->next) diff --git a/include/mysql.h b/include/mysql.h index 2e2558d7183..3935963e84c 100644 --- a/include/mysql.h +++ b/include/mysql.h @@ -439,17 +439,17 @@ enum PREP_STMT_STATE { MY_ST_UNKNOWN, MY_ST_PREPARE, MY_ST_EXECUTE }; /* bind structure */ typedef struct st_mysql_bind { - long *length; /* output length pointer */ - gptr buffer; /* buffer */ + unsigned long *length; /* output length pointer */ + my_bool *is_null; /* Pointer to null indicators */ + char *buffer; /* buffer to get/put data */ enum enum_field_types buffer_type; /* buffer type */ - my_bool is_null; /* NULL indicator */ - my_bool is_long_data; /* long data indicator */ + /* Must be set for string/blob data */ + unsigned long buffer_length; /* buffer length */ /* The following are for internal use. Set by mysql_bind_param */ - unsigned long buffer_length; /* buffer length */ - long bind_length; /* Default length of data */ - my_bool long_ended; /* All data supplied for long */ + unsigned long bind_length; /* Default length of data */ unsigned int param_number; /* For null count and error messages */ + my_bool long_data_used; /* If used with mysql_send_long_data */ void (*store_param_func)(NET *net, struct st_mysql_bind *param); void (*fetch_result)(struct st_mysql_bind *, unsigned char **row); } MYSQL_BIND; @@ -465,20 +465,21 @@ typedef struct st_mysql_stmt MYSQL_FIELD *fields; /* prepare meta info */ LIST list; /* list to keep track of all stmts */ char *query; /* query buffer */ + char *buffer; /* buffer to hold results */ MEM_ROOT mem_root; /* root allocations */ MYSQL_RES tmp_result; /* Used by mysql_prepare_result */ unsigned long param_count; /* parameters count */ unsigned long field_count; /* fields count */ - unsigned long long_length; /* long buffer alloced length */ + unsigned long buffer_length; /* long buffer alloced length */ unsigned long stmt_id; /* Id for prepared statement */ unsigned int last_errno; /* error code */ enum PREP_STMT_STATE state; /* statement state */ char last_error[MYSQL_ERRMSG_SIZE]; /* error message */ my_bool long_alloced; /* flag to indicate long alloced */ - my_bool send_types_to_server; /* to indicate types supply to server */ - my_bool param_buffers; /* to indicate the param bound buffers */ - my_bool res_buffers; /* to indicate the output bound buffers */ - my_bool result_buffered; /* to indicate the results buffered */ + my_bool send_types_to_server; /* Types sent to server */ + my_bool param_buffers; /* param bound buffers */ + my_bool res_buffers; /* output bound buffers */ + my_bool result_buffered; /* Results buffered */ } MYSQL_STMT; @@ -498,10 +499,7 @@ int STDCALL mysql_fetch(MYSQL_STMT *stmt); my_bool STDCALL mysql_send_long_data(MYSQL_STMT *stmt, unsigned int param_number, const char *data, - unsigned long length, - my_bool last_data); -int STDCALL mysql_multi_query(MYSQL *mysql,const char *query, - unsigned long len); + unsigned long length); MYSQL_RES *STDCALL mysql_prepare_result(MYSQL_STMT *stmt); my_ulonglong STDCALL mysql_stmt_affected_rows(MYSQL_STMT *stmt); int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt); @@ -515,8 +513,6 @@ my_bool STDCALL mysql_next_result(MYSQL *mysql); #define MYSQL_STATUS_ERROR 1 #define MYSQL_NO_DATA 100 #define MYSQL_NEED_DATA 99 -#define MYSQL_NULL_DATA (-1) -#define MYSQL_LONG_DATA (-2) #define mysql_reload(mysql) mysql_refresh((mysql),REFRESH_GRANT) diff --git a/include/violite.h b/include/violite.h index b8bfb2183a2..579043dcffa 100644 --- a/include/violite.h +++ b/include/violite.h @@ -216,6 +216,7 @@ enum SSL_type SSL_TYPE_SPECIFIED }; + #ifndef EMBEDDED_LIBRARY /* This structure is for every connection on both sides */ struct st_vio @@ -233,7 +234,7 @@ struct st_vio void (*viodelete)(Vio*); int (*vioerrno)(Vio*); int (*read)(Vio*, gptr, int); - int (*write)(Vio*, gptr, int); + int (*write)(Vio*, const gptr, int); int (*vioblocking)(Vio*, my_bool, my_bool *); my_bool (*is_blocking)(Vio*); int (*viokeepalive)(Vio*, my_bool); diff --git a/innobase/dict/dict0dict.c b/innobase/dict/dict0dict.c index c70e848c5c8..9be10fe70d8 100644 --- a/innobase/dict/dict0dict.c +++ b/innobase/dict/dict0dict.c @@ -2181,6 +2181,7 @@ dict_skip_word( /************************************************************************* Returns the number of opening brackets '(' subtracted by the number of closing brackets ')' between string and ptr. */ +#ifdef NOT_USED static int dict_bracket_count( @@ -2204,7 +2205,7 @@ dict_bracket_count( return(count); } - +#endif /************************************************************************* Scans a table create SQL string and adds to the data dictionary the foreign key constraints declared in the string. This function should be called after diff --git a/innobase/dict/dict0load.c b/innobase/dict/dict0load.c index d8d426d2036..1070a8f5426 100644 --- a/innobase/dict/dict0load.c +++ b/innobase/dict/dict0load.c @@ -456,7 +456,7 @@ dict_load_indexes( ut_ad(len == 8); id = mach_read_from_8(field); - ut_a(0 == ut_strcmp("NAME", + ut_a(0 == ut_strcmp((void*) "NAME", dict_field_get_col( dict_index_get_nth_field( dict_table_get_first_index(sys_indexes), 4))->name)); @@ -515,7 +515,7 @@ dict_load_indexes( && ((type & DICT_CLUSTERED) || ((table == dict_sys->sys_tables) && (name_len == ut_strlen("ID_IND")) - && (0 == ut_memcmp(name_buf, "ID_IND", + && (0 == ut_memcmp(name_buf, (void*) "ID_IND", name_len))))) { /* The index was created in memory already in diff --git a/innobase/include/os0proc.h b/innobase/include/os0proc.h index 08510db4366..3d752df43a6 100644 --- a/innobase/include/os0proc.h +++ b/innobase/include/os0proc.h @@ -16,7 +16,7 @@ typedef void* os_process_t; typedef unsigned long int os_process_id_t; /* The cell type in os_awe_allocate_mem page info */ -#ifdef __NT__ +#if defined(__NT__) && defined(ULONG_PTR) typedef ULONG_PTR os_awe_t; #else typedef ulint os_awe_t; diff --git a/innobase/os/os0proc.c b/innobase/os/os0proc.c index 635c89c10a3..1497ee46b88 100644 --- a/innobase/os/os0proc.c +++ b/innobase/os/os0proc.c @@ -189,12 +189,12 @@ os_awe_allocate_physical_mem( #elif defined(__NT__) BOOL bResult; - ULONG_PTR NumberOfPages; /* Question: why does Windows + os_awe_t NumberOfPages; /* Question: why does Windows use the name ULONG_PTR for a scalar integer type? Maybe because we may also refer to &NumberOfPages? */ - ULONG_PTR NumberOfPagesInitial; + os_awe_t NumberOfPagesInitial; SYSTEM_INFO sSysInfo; int PFNArraySize; @@ -224,9 +224,9 @@ os_awe_allocate_physical_mem( /* Calculate the size of page_info for allocated physical pages */ - PFNArraySize = NumberOfPages * sizeof(ULONG_PTR); + PFNArraySize = NumberOfPages * sizeof(os_awe_t); - *page_info = (ULONG_PTR*)HeapAlloc(GetProcessHeap(), 0, PFNArraySize); + *page_info = (os_awe_t*)HeapAlloc(GetProcessHeap(), 0, PFNArraySize); if (*page_info == NULL) { fprintf(stderr, @@ -426,9 +426,9 @@ os_awe_map_physical_mem_to_window( #elif defined(__NT__) BOOL bResult; - ULONG_PTR n_pages; + os_awe_t n_pages; - n_pages = (ULONG_PTR)n_mem_pages; + n_pages = (os_awe_t)n_mem_pages; if (!(ptr >= os_awe_window)) { fprintf(stderr, diff --git a/innobase/ut/ut0ut.c b/innobase/ut/ut0ut.c index ff5d11d84ed..31a137b5fac 100644 --- a/innobase/ut/ut0ut.c +++ b/innobase/ut/ut0ut.c @@ -13,6 +13,7 @@ Created 5/11/1994 Heikki Tuuri #endif #include <stdarg.h> +#include <string.h> #include "ut0sort.h" diff --git a/isam/pack_isam.c b/isam/pack_isam.c index 09825dd137f..fd12aac1e09 100644 --- a/isam/pack_isam.c +++ b/isam/pack_isam.c @@ -46,22 +46,6 @@ #define OLD_EXT ".OLD" #define WRITE_COUNT MY_HOW_OFTEN_TO_WRITE -#ifdef __WIN__ -static double ulonglong2double(ulonglong value) -{ - longlong nr=(longlong) value; - if (nr >= 0) - return (double) nr; - return (18446744073709551616.0 + (double) nr); -} - -#if SIZEOF_OFF_T > 4 -#define my_off_t2double(A) ulonglong2double(A) -#else -#define my_off_t2double(A) ((double) (A)) -#endif /* SIZEOF_OFF_T > 4 */ -#endif - struct st_file_buffer { File file; char *buffer,*pos,*end; diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 0337e84d4ca..3e31f254913 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -452,14 +452,16 @@ HANDLE create_shared_memory(MYSQL *mysql,NET *net, uint connect_timeout) unique_part is uniquel value for each object (events and file-mapping) number_of_connection is number of connection between server and client */ - suffix_pos = strxmov(tmp,shared_memory_base_name,"_",connect_number_char,"_",NullS); + suffix_pos = strxmov(tmp,shared_memory_base_name,"_",connect_number_char, + "_",NullS); strmov(suffix_pos, "DATA"); if ((handle_file_map = OpenFileMapping(FILE_MAP_WRITE,FALSE,tmp)) == NULL) { error_allow = CR_SHARED_MEMORY_FILE_MAP_ERROR; goto err2; } - if ((handle_map = MapViewOfFile(handle_file_map,FILE_MAP_WRITE,0,0,smem_buffer_length)) == NULL) + if ((handle_map = MapViewOfFile(handle_file_map,FILE_MAP_WRITE,0,0, + smem_buffer_length)) == NULL) { error_allow = CR_SHARED_MEMORY_MAP_ERROR; goto err2; @@ -2330,8 +2332,8 @@ Try also with PIPE or TCP/IP /* Create password to decode scramble */ create_key_from_old_password(passwd,password_hash); /* Decypt and store scramble 4 = hash for stage2 */ - password_crypt(net->read_pos+4,mysql->scramble_buff,password_hash, - SCRAMBLE41_LENGTH); + password_crypt((const char*) net->read_pos+4,mysql->scramble_buff, + password_hash, SCRAMBLE41_LENGTH); mysql->scramble_buff[SCRAMBLE41_LENGTH]=0; /* Finally scramble decoded scramble with password */ scramble(buff, mysql->scramble_buff, passwd,0); @@ -4088,37 +4090,33 @@ static void store_param_null(NET *net, MYSQL_BIND *param) client application */ + static my_bool store_param(MYSQL_STMT *stmt, MYSQL_BIND *param) { MYSQL *mysql= stmt->mysql; NET *net = &mysql->net; DBUG_ENTER("store_param"); - DBUG_PRINT("enter",("type: %d, buffer:%lx, length: %d", param->buffer_type, - param->buffer ? param->buffer : "0", *param->length)); - - if (param->buffer_type == MYSQL_TYPE_NULL || - *param->length == MYSQL_NULL_DATA) + DBUG_PRINT("enter",("type: %d, buffer:%lx, length: %lu is_null: %d", + param->buffer_type, + param->buffer ? param->buffer : "0", *param->length, + *param->is_null)); + + if (*param->is_null) store_param_null(net, param); else { - unsigned int length; - - /* - Allocate for worst case (long string), ignore the length - buffer for numeric/double types by assigning the default - length using get_binary_length - */ - - if (!(length= get_binary_length(param->buffer_type))) - length= *param->length; - - if ((my_realloc_str(net, 9 + length))) + /* + Param->length should ALWAYS point to the correct length for the type + Either to the length pointer given by the user or param->bind_length + */ + if ((my_realloc_str(net, 9 + *param->length))) DBUG_RETURN(1); (*param->store_param_func)(net, param); } DBUG_RETURN(0); } + /* Send the prepare query to server for execution */ @@ -4200,14 +4198,11 @@ int STDCALL mysql_execute(MYSQL_STMT *stmt) for (param= stmt->params; param < param_end; param++) { - /* Check for long data which has not been propery given/terminated */ - if (*param->length == MYSQL_LONG_DATA) - { - if (!param->long_ended) - DBUG_RETURN(MYSQL_NEED_DATA); - } + /* check if mysql_long_data() was used */ + if (param->long_data_used) + param->long_data_used= 0; /* Clear for next execute call */ else if (store_param(stmt, param)) - DBUG_RETURN(1); + DBUG_RETURN(1); } length= (ulong) (net->write_pos - net->buff); /* TODO: Look into avoding the following memdup */ @@ -4245,6 +4240,11 @@ my_ulonglong STDCALL mysql_stmt_affected_rows(MYSQL_STMT *stmt) return stmt->mysql->last_used_con->affected_rows; } + +static my_bool int_is_null_true= 1; /* Used for MYSQL_TYPE_NULL */ +static my_bool int_is_null_false= 0; +static my_bool int_is_null_dummy; + /* Setup the parameter data buffers from application */ @@ -4277,19 +4277,6 @@ my_bool STDCALL mysql_bind_param(MYSQL_STMT *stmt, MYSQL_BIND * bind) param++) { param->param_number= count++; - if (param->length && *param->length == MYSQL_LONG_DATA && - (param->buffer_type < MYSQL_TYPE_TINY_BLOB || - param->buffer_type > MYSQL_TYPE_STRING)) - { - /* - Long data handling should be used only for string/binary - types only - */ - sprintf(stmt->last_error, ER(stmt->last_errno= CR_INVALID_BUFFER_USE), - param->param_number); - DBUG_RETURN(1); - } - /* If param->length is not given, change it to point to bind_length. This way we can always use *param->length to get the length of data @@ -4297,33 +4284,44 @@ my_bool STDCALL mysql_bind_param(MYSQL_STMT *stmt, MYSQL_BIND * bind) if (!param->length) param->length= ¶m->bind_length; + /* If param->is_null is not set, then the value can never be NULL */ + if (!param->is_null) + param->is_null= &int_is_null_false; + /* Setup data copy functions for the different supported types */ switch (param->buffer_type) { case MYSQL_TYPE_NULL: - param->bind_length= MYSQL_NULL_DATA; + param->is_null= &int_is_null_true; break; case MYSQL_TYPE_TINY: - param->bind_length= 1; + /* Force param->length as this is fixed for this type */ + param->length= ¶m->bind_length; + param->bind_length= param->buffer_length= 1; param->store_param_func= store_param_tinyint; break; case MYSQL_TYPE_SHORT: - param->bind_length= 2; + param->length= ¶m->bind_length; + param->bind_length= param->buffer_length= 2; param->store_param_func= store_param_short; break; case MYSQL_TYPE_LONG: - param->bind_length= 4; + param->length= ¶m->bind_length; + param->bind_length= param->buffer_length= 4; param->store_param_func= store_param_int32; break; case MYSQL_TYPE_LONGLONG: - param->bind_length= 8; + param->length= ¶m->bind_length; + param->bind_length= param->buffer_length= 8; param->store_param_func= store_param_int64; break; case MYSQL_TYPE_FLOAT: - param->bind_length= 4; + param->length= ¶m->bind_length; + param->bind_length= param->buffer_length= 4; param->store_param_func= store_param_float; break; case MYSQL_TYPE_DOUBLE: - param->bind_length= 8; + param->length= ¶m->bind_length; + param->bind_length= param->buffer_length= 8; param->store_param_func= store_param_double; break; case MYSQL_TYPE_TINY_BLOB: @@ -4336,7 +4334,8 @@ my_bool STDCALL mysql_bind_param(MYSQL_STMT *stmt, MYSQL_BIND * bind) param->store_param_func= store_param_str; break; default: - sprintf(stmt->last_error, ER(stmt->last_errno= CR_UNSUPPORTED_PARAM_TYPE), + sprintf(stmt->last_error, + ER(stmt->last_errno= CR_UNSUPPORTED_PARAM_TYPE), param->buffer_type, param->param_number); DBUG_RETURN(1); } @@ -4361,18 +4360,16 @@ my_bool STDCALL mysql_bind_param(MYSQL_STMT *stmt, MYSQL_BIND * bind) param_number Parameter number (0 - N-1) data Data to send to server length Length of data to send (may be 0) - last_data If != 0 then this is the last data to the - server. + RETURN VALUES - 0 ok - 1 error + 0 ok + 1 error */ my_bool STDCALL mysql_send_long_data(MYSQL_STMT *stmt, uint param_number, - const char *data, ulong length, - my_bool last_data) + const char *data, ulong length) { MYSQL_BIND *param; DBUG_ENTER("mysql_send_long_data"); @@ -4386,6 +4383,19 @@ mysql_send_long_data(MYSQL_STMT *stmt, uint param_number, DBUG_RETURN(1); } param= stmt->params+param_number; + if (param->buffer_type < MYSQL_TYPE_TINY_BLOB || + param->buffer_type > MYSQL_TYPE_STRING) + { + /* + Long data handling should be used only for string/binary + types only + */ + sprintf(stmt->last_error, ER(stmt->last_errno= CR_INVALID_BUFFER_USE), + param->param_number); + DBUG_RETURN(1); + } + /* Mark for execute that the result is already sent */ + param->long_data_used= 1; if (length) { MYSQL *mysql= stmt->mysql; @@ -4407,7 +4417,6 @@ mysql_send_long_data(MYSQL_STMT *stmt, uint param_number, DBUG_RETURN(1); } } - param->long_ended= last_data; DBUG_RETURN(0); } @@ -4582,6 +4591,7 @@ static void send_data_str(MYSQL_BIND *param, char *value, uint length) } } + /* Fetch data to buffers */ static my_bool fetch_results(MYSQL_STMT *stmt, MYSQL_BIND *param, uint field_type, uchar **row) @@ -4645,7 +4655,7 @@ static my_bool fetch_results(MYSQL_STMT *stmt, MYSQL_BIND *param, break; } if (param->buffer_type < MYSQL_TYPE_VAR_STRING || - param->buffer_type > MYSQL_TYPE_STRING) + param->buffer_type > MYSQL_TYPE_STRING) { /* Don't allow fetching of date/time/ts to non-string types @@ -4829,6 +4839,13 @@ my_bool STDCALL mysql_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind) for (param= stmt->bind, end= param+bind_count; param < end ; param++) { + /* + Set param->is_null to point to a dummy variable if it's not set. + This is to make the excute code easier + */ + if (!param->is_null) + param->is_null= &int_is_null_dummy; + /* Setup data copy functions for the different supported types */ switch (param->buffer_type) { case MYSQL_TYPE_TINY: @@ -4855,10 +4872,12 @@ my_bool STDCALL mysql_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind) case MYSQL_TYPE_BLOB: case MYSQL_TYPE_VAR_STRING: case MYSQL_TYPE_STRING: + DBUG_ASSERT(param->buffer_length != 0); param->fetch_result= fetch_result_str; break; default: - sprintf(stmt->last_error, ER(stmt->last_errno= CR_UNSUPPORTED_PARAM_TYPE), + sprintf(stmt->last_error, + ER(stmt->last_errno= CR_UNSUPPORTED_PARAM_TYPE), param->buffer_type, param->param_number); DBUG_RETURN(1); } @@ -4884,8 +4903,8 @@ static int stmt_fetch_row(MYSQL_STMT *stmt, uchar *row) return 0; null_ptr= row; - row+= (stmt->field_count+9)/8; /* skip null bits */ - bit= 4; /* first 2 bits are reserved */ + row+= (stmt->field_count+9)/8; /* skip null bits */ + bit= 4; /* first 2 bits are reserved */ /* Copy complete row to application buffers */ for (bind= stmt->bind, end= (MYSQL_BIND *) bind + stmt->field_count, @@ -4895,15 +4914,16 @@ static int stmt_fetch_row(MYSQL_STMT *stmt, uchar *row) bind++, field++) { if (*null_ptr & bit) - *bind->length= MYSQL_NULL_DATA; + *bind->is_null= 1; else { + *bind->is_null= 0; if (field->type == bind->buffer_type) (*bind->fetch_result)(bind, &row); else if (fetch_results(stmt, bind, field->type, &row)) return 1; } - if (! (bit<<=1) & 255) + if (! ((bit<<=1) & 255)) { bit= 1; /* To next byte */ null_ptr++; diff --git a/libmysql/libmysql.def b/libmysql/libmysql.def index 38fb1eaa187..e0e7ca48f48 100644 --- a/libmysql/libmysql.def +++ b/libmysql/libmysql.def @@ -107,7 +107,6 @@ EXPORTS getopt_ull_limit_value getopt_compare_strings mysql_warning_count - mysql_warnings mysql_prepare mysql_execute mysql_param_count @@ -119,7 +118,6 @@ EXPORTS mysql_stmt_errno mysql_fetch mysql_send_long_data - mysql_multi_query mysql_next_result mysql_commit mysql_rollback diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc index 58babe24ec5..963ceb1f432 100644 --- a/libmysqld/lib_sql.cc +++ b/libmysqld/lib_sql.cc @@ -215,7 +215,6 @@ check_connections2(THD * thd) static bool check_user(THD *thd,enum_server_command command, const char *user, const char *passwd, const char *db, bool check_count) { - USER_RESOURCES ur; thd->db=0; if (!(thd->user = my_strdup(user, MYF(0)))) diff --git a/mysql-test/r/explain.result b/mysql-test/r/explain.result index e85aca4c6f3..ff38e9fae7d 100644 --- a/mysql-test/r/explain.result +++ b/mysql-test/r/explain.result @@ -1,8 +1,8 @@ drop table if exists t1; create table t1 (id int not null, str char(10), unique(str)); explain select * from t1; -table type possible_keys key key_len ref rows Extra -t1 system NULL NULL NULL NULL 0 const row not found +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 system NULL NULL NULL NULL 0 const row not found insert into t1 values (1, null),(2, null),(3, "foo"),(4, "bar"); select * from t1 where str is null; id str diff --git a/mysql-test/r/join.result b/mysql-test/r/join.result index ff608825b9c..6649c480d7b 100644 --- a/mysql-test/r/join.result +++ b/mysql-test/r/join.result @@ -31,12 +31,12 @@ select t1.id,t2.id from t2 left join t1 on t1.id>=74 and t1.id<=0 where t2.id=75 id id NULL 75 explain select t1.id,t2.id from t2 left join t1 on t1.id>=74 and t1.id<=0 where t2.id=75 and t1.id is null; -table type possible_keys key key_len ref rows Extra -t1 const PRIMARY NULL NULL NULL 1 Impossible ON condition -t2 ALL NULL NULL NULL NULL 3 Using where +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 const PRIMARY NULL NULL NULL 1 Impossible ON condition +1 SIMPLE t2 ALL NULL NULL NULL NULL 3 Using where explain select t1.id, t2.id from t1, t2 where t2.id = t1.id and t1.id <0 and t1.id > 0; -Comment -Impossible WHERE noticed after reading const tables +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables drop table t1,t2; CREATE TABLE t1 ( id int(11) NOT NULL auto_increment, diff --git a/mysys/my_once.c b/mysys/my_once.c index e1c728897aa..a4201810b03 100644 --- a/mysys/my_once.c +++ b/mysys/my_once.c @@ -23,6 +23,7 @@ #include "mysys_priv.h" #include "my_static.h" #include "mysys_err.h" +#include <m_string.h> /* Alloc for things we don't nead to free diff --git a/mysys/tree.c b/mysys/tree.c index 4b14ffd7112..a3b69ebff5e 100644 --- a/mysys/tree.c +++ b/mysys/tree.c @@ -455,7 +455,7 @@ void *tree_search_next(TREE *tree, TREE_ELEMENT ***last_pos, int l_offs, (each path from root to leaf has the same length) */ ha_rows tree_record_pos(TREE *tree, const void *key, - enum ha_rkey_function flag, void *custom_arg) + enum ha_rkey_function flag, void *custom_arg) { int cmp; TREE_ELEMENT *element= tree->root; @@ -470,7 +470,7 @@ ha_rows tree_record_pos(TREE *tree, const void *key, { switch (flag) { case HA_READ_KEY_EXACT: - last_equal_pos= (left + right) / 2; + last_equal_pos= (ha_rows) ((left + right) / 2); cmp= 1; break; case HA_READ_BEFORE_KEY: @@ -498,9 +498,9 @@ ha_rows tree_record_pos(TREE *tree, const void *key, case HA_READ_KEY_EXACT: return last_equal_pos; case HA_READ_BEFORE_KEY: - return (uint) right; + return (ha_rows) right; case HA_READ_AFTER_KEY: - return (uint) left; + return (ha_rows) left; default: return HA_POS_ERROR; } diff --git a/sql/field.cc b/sql/field.cc index 1b388287811..1aa01b1e2c5 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -2053,7 +2053,8 @@ String *Field_longlong::val_str(String *val_buffer, #endif longlongget(j,ptr); - length=(uint) cs->longlong10_to_str(cs,to,mlength,unsigned_flag ? 10 : -10, j); + length=(uint) (cs->longlong10_to_str)(cs,to,mlength, + unsigned_flag ? 10 : -10, j); val_buffer->length(length); if (zerofill) prepend_zeros(val_buffer); @@ -3928,7 +3929,7 @@ int Field_string::store(longlong nr) char buff[64]; int l; CHARSET_INFO *cs=charset(); - l=cs->longlong10_to_str(cs,buff,sizeof(buff),-10,nr); + l= (cs->longlong10_to_str)(cs,buff,sizeof(buff),-10,nr); return Field_string::store(buff,(uint)l,cs); } @@ -4095,7 +4096,7 @@ int Field_varstring::store(longlong nr) char buff[64]; int l; CHARSET_INFO *cs=charset(); - l=cs->longlong10_to_str(cs,buff,sizeof(buff),-10,nr); + l= (cs->longlong10_to_str)(cs,buff,sizeof(buff),-10,nr); return Field_varstring::store(buff,(uint)l,cs); } diff --git a/sql/filesort.cc b/sql/filesort.cc index 00ef12839cf..0e0b2c8f33a 100644 --- a/sql/filesort.cc +++ b/sql/filesort.cc @@ -23,7 +23,6 @@ #endif #include <m_ctype.h> #include "sql_sort.h" -#include "assert.h" #ifndef THREAD #define SKIP_DBUG_IN_FILESORT diff --git a/sql/ha_berkeley.cc b/sql/ha_berkeley.cc index 168c3327d79..067c066713f 100644 --- a/sql/ha_berkeley.cc +++ b/sql/ha_berkeley.cc @@ -55,7 +55,6 @@ #ifdef HAVE_BERKELEY_DB #include <m_ctype.h> #include <myisampack.h> -#include <assert.h> #include <hash.h> #include "ha_berkeley.h" #include "sql_manager.h" diff --git a/sql/ha_innodb.cc b/sql/ha_innodb.cc index 86544542613..6125a616f78 100644 --- a/sql/ha_innodb.cc +++ b/sql/ha_innodb.cc @@ -32,7 +32,6 @@ InnoDB */ #ifdef HAVE_INNOBASE_DB #include <m_ctype.h> -#include <assert.h> #include <hash.h> #include <myisampack.h> diff --git a/sql/item.cc b/sql/item.cc index ecc63aa4b95..a4f7008aa4e 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -22,7 +22,6 @@ #include "mysql_priv.h" #include <m_ctype.h> #include "my_dir.h" -#include <assert.h> /***************************************************************************** ** Item functions @@ -1056,7 +1055,8 @@ bool Item_ref::fix_fields(THD *thd,TABLE_LIST *tables, Item **reference) break; if ((tmp= find_field_in_tables(thd, this, sl->get_table_list(), &where, - 0)) != not_found_field); + 0)) != not_found_field) + break; if (sl->master_unit()->first_select()->linkage == DERIVED_TABLE_TYPE) break; // do not look over derived table diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 79807653317..829caeede1d 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -23,7 +23,6 @@ #include "mysql_priv.h" #include <m_ctype.h> -#include "assert.h" Item_bool_func2* Item_bool_func2::eq_creator(Item *a, Item *b) { return new Item_func_eq(a, b); diff --git a/sql/item_func.cc b/sql/item_func.cc index d489ff1055d..6ba6ba13744 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -28,7 +28,6 @@ #include <time.h> #include <ft_global.h> #include <zlib.h> -#include <assert.h> /* return TRUE if item is a constant */ diff --git a/sql/item_row.cc b/sql/item_row.cc index 355228e45df..0c060b6d8db 100644 --- a/sql/item_row.cc +++ b/sql/item_row.cc @@ -15,7 +15,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "mysql_priv.h" -#include "assert.h" Item_row::Item_row(List<Item> &arg): Item(), used_tables_cache(0), array_holder(1), const_item_cache(1) diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 748ef096dbe..df2352db231 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -1321,12 +1321,14 @@ String *Item_func_password::val_str(String *str) char* seed_ptr=key->c_ptr(); while (*seed_ptr) { - seed=seed*211+*seed_ptr; /* Use simple hashing */ + seed=(seed*211+*seed_ptr) & 0xffffffffL; /* Use simple hashing */ seed_ptr++; } /* Use constants which allow nice random values even with small seed */ - randominit(&rand_st,seed*111111+33333333L,seed*1111+55555555L); + randominit(&rand_st, + (ulong) ((ulonglong) seed*111111+33333333L) & (ulong) 0xffffffff, + (ulong) ((ulonglong) seed*1111+55555555L) & (ulong) 0xffffffff); make_scrambled_password(tmp_value,res->c_ptr(),use_old_passwords, &rand_st); diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index c5ecdc87d40..4ee851c2f84 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -494,7 +494,7 @@ void Item_in_subselect::single_value_transformer(THD *thd, else { sl->item_list.empty(); - sl->item_list.push_back(new Item_int(1)); + sl->item_list.push_back(new Item_int("Not_used", (longlong) 1, 21)); if (sl->table_list.elements) { item= (*func)(expr, new Item_asterisk_remover(this, item, diff --git a/sql/item_sum.cc b/sql/item_sum.cc index 2a96594af4e..cc90cd8fcd8 100644 --- a/sql/item_sum.cc +++ b/sql/item_sum.cc @@ -22,7 +22,7 @@ #endif #include "mysql_priv.h" -#include "assert.h" + Item_sum::Item_sum(List<Item> &list) { arg_count=list.elements; diff --git a/sql/lex.h b/sql/lex.h index a505911ccf6..b17d3313c3f 100644 --- a/sql/lex.h +++ b/sql/lex.h @@ -136,7 +136,7 @@ static SYMBOL symbols[] = { { "DROP", SYM(DROP),0,0}, { "DUMPFILE", SYM(DUMPFILE),0,0}, { "DYNAMIC", SYM(DYNAMIC_SYM),0,0}, - { "DUPLICATE", SYM(DUPLICATE),0,0}, + { "DUPLICATE", SYM(DUPLICATE_SYM),0,0}, { "ERRORS", SYM(ERRORS),0,0}, { "END", SYM(END),0,0}, { "ELSE", SYM(ELSE),0,0}, diff --git a/sql/lock.cc b/sql/lock.cc index 74d1109b203..8f342b28d67 100644 --- a/sql/lock.cc +++ b/sql/lock.cc @@ -68,8 +68,7 @@ TODO: #include "mysql_priv.h" #include <hash.h> -#include <assert.h> -#include <ha_myisammrg.h> +#include "ha_myisammrg.h" #ifndef MASTER #include "../srclib/myisammrg/myrg_def.h" #else diff --git a/sql/log.cc b/sql/log.cc index 5dcb5857026..033896a2674 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -29,7 +29,6 @@ #include <my_dir.h> #include <stdarg.h> #include <m_ctype.h> // For test_if_number -#include <assert.h> #define files_charset_info my_charset_latin1 diff --git a/sql/log_event.cc b/sql/log_event.cc index d2fcc83a98f..248bac04df2 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -24,8 +24,6 @@ #include <my_dir.h> #endif /* MYSQL_CLIENT */ -#include <assert.h> - #define log_cs my_charset_latin1 /***************************************************************************** @@ -1652,7 +1650,7 @@ void Rotate_log_event::pack_info(Protocol *protocol) memcpy(buf, new_log_ident, ident_len); b_pos+= ident_len; b_pos= strmov(b_pos, ";pos="); - b_pos=int10_to_str(pos, b_pos, 10); + b_pos=longlong10_to_str(pos, b_pos, 10); if (flags & LOG_EVENT_FORCED_ROTATE_F) b_pos= strmov(b_pos ,"; forced by master"); protocol->store(buf, b_pos-buf); @@ -1789,7 +1787,7 @@ void Intvar_log_event::pack_info(Protocol *protocol) char buf[64], *pos; pos= strmov(buf, get_var_type_name()); *(pos++)='='; - pos=int10_to_str(val, pos, -10); + pos= longlong10_to_str(val, pos, -10); protocol->store(buf, pos-buf); } #endif // !MYSQL_CLIENT @@ -2000,7 +1998,7 @@ void Slave_log_event::pack_info(Protocol *protocol) pos= strmov(pos, ",log="); pos= strmov(pos, master_log); pos= strmov(pos, ",pos="); - pos= int10_to_str(master_pos, pos, 10); + pos= longlong10_to_str(master_pos, pos, 10); protocol->store(buf, pos-buf); } #endif // !MYSQL_CLIENT diff --git a/sql/mf_iocache.cc b/sql/mf_iocache.cc index 1bc65eebd23..742f94c9e2b 100644 --- a/sql/mf_iocache.cc +++ b/sql/mf_iocache.cc @@ -37,7 +37,6 @@ #include <errno.h> static void my_aiowait(my_aio_result *result); #endif -#include <assert.h> extern "C" { diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 7a354ef5ff1..feb6675e787 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -24,6 +24,7 @@ #include <thr_lock.h> #include <my_base.h> /* Needed by field.h */ #include <my_bitmap.h> +#include <assert.h> #ifdef __EMX__ #undef write /* remove pthread.h macro definition for EMX */ diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 8a2dfe50d54..6b3a1a7600c 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -32,7 +32,6 @@ #include <nisam.h> #include <thr_alarm.h> #include <ft_global.h> -#include <assert.h> #define mysqld_charset my_charset_latin1 diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 43066a29624..33309d35157 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -33,8 +33,6 @@ #include <m_ctype.h> #include <nisam.h> #include "sql_select.h" -#include <assert.h> - #ifndef EXTRA_DEBUG #define test_rb_tree(A,B) {} diff --git a/sql/password.c b/sql/password.c index 9b6189a161c..37040c20683 100644 --- a/sql/password.c +++ b/sql/password.c @@ -151,11 +151,8 @@ void create_random_string(int length,struct rand_struct *rand_st,char* target) { char* end=target+length; /* Use pointer arithmetics as it is faster way to do so. */ - while (target<end) - { - *target=rnd(rand_st)*94+33; - target++; - } + for (; target<end ; target++) + *target= (char) (rnd(rand_st)*94+33); } @@ -296,7 +293,7 @@ void make_scrambled_password(char *to,const char *password, { to[0]=PVERSION41_CHAR; /* New passwords have version prefix */ /* Rnd returns number from 0 to 1 so this would be good salt generation.*/ - salt=rnd(rand_st)*65535+1; + salt=(unsigned short) (rnd(rand_st)*65535+1); /* Use only 2 first bytes from it */ sprintf(to+1,"%04x",salt); /* First hasing is done without salt */ @@ -556,7 +553,7 @@ void get_hash_and_password(ulong* salt, uint8 pversion, char* hash, unsigned cha val=*(++salt); for (t=3; t>=0; t--) { - bin_password[t]=val & 255; + bin_password[t]= (char) (val & 255); val>>=8; /* Scroll 8 bits to get next part*/ } bin_password+=4; /* Get to next 4 chars*/ @@ -575,8 +572,7 @@ void get_hash_and_password(ulong* salt, uint8 pversion, char* hash, unsigned cha val=*salt; for (t=3;t>=0;t--) { - bp[t]=val%256; - + bp[t]= (uchar) (val & 255); val>>=8; /* Scroll 8 bits to get next part*/ } bp+=4; /* Get to next 4 chars*/ diff --git a/sql/protocol.cc b/sql/protocol.cc index 48ef9ecb71e..be5202111d0 100644 --- a/sql/protocol.cc +++ b/sql/protocol.cc @@ -25,7 +25,6 @@ #include "mysql_priv.h" #include <stdarg.h> -#include <assert.h> /* Send a error string to client */ diff --git a/sql/set_var.cc b/sql/set_var.cc index 79e9f67e905..30067336d5a 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -930,7 +930,7 @@ err: bool sys_var::check_set(THD *thd, set_var *var, TYPELIB *enum_names) { - char buff[80], *value, *error= 0; + char buff[80], *error= 0; uint error_len= 0; String str(buff, sizeof(buff), system_charset_info), *res; @@ -938,7 +938,7 @@ bool sys_var::check_set(THD *thd, set_var *var, TYPELIB *enum_names) { if (!(res= var->value->val_str(&str))) goto err; - (long) var->save_result.ulong_value= (ulong) + var->save_result.ulong_value= (ulong) find_set(enum_names, res->c_ptr(), res->length(), &error, &error_len); if (error_len) { diff --git a/sql/slave.cc b/sql/slave.cc index 97961eb00f8..ce1a8e4befd 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -24,7 +24,6 @@ #include "repl_failsafe.h" #include <thr_alarm.h> #include <my_dir.h> -#include <assert.h> bool use_slave_mask = 0; MY_BITMAP slave_error_mask; diff --git a/sql/spatial.cc b/sql/spatial.cc index 5c6be3c221c..42dd74a697a 100644 --- a/sql/spatial.cc +++ b/sql/spatial.cc @@ -66,7 +66,8 @@ Geometry::GClassInfo *Geometry::find_class(const char *name, size_t len) cur_rt < ci_collection_end; ++cur_rt) { if ((cur_rt->m_name[len] == 0) && - (strncasecmp(cur_rt->m_name, name, len) == 0)) + (default_charset_info->strncasecmp(default_charset_info, + cur_rt->m_name, name, len) == 0)) { return cur_rt; } diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 30477cf4e99..cedb34b48bb 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -29,7 +29,6 @@ #include "sql_acl.h" #include "hash_filo.h" #include <m_ctype.h> -#include <assert.h> #include <stdarg.h> diff --git a/sql/sql_base.cc b/sql/sql_base.cc index db32030efd1..e4af362c3e3 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -24,7 +24,6 @@ #include <my_dir.h> #include <hash.h> #include <nisam.h> -#include <assert.h> #ifdef __WIN__ #include <io.h> #endif diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc index 9e1d9c0b64c..b1ea9815f42 100644 --- a/sql/sql_cache.cc +++ b/sql/sql_cache.cc @@ -307,7 +307,6 @@ TODO list: #else #include "../myisammrg/myrg_def.h" #endif -#include <assert.h> #if defined(EXTRA_DEBUG) && !defined(DBUG_OFF) #define MUTEX_LOCK(M) { DBUG_PRINT("lock", ("mutex lock 0x%lx", (ulong)(M))); \ diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 5734b340744..d352fc95fdd 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -35,7 +35,6 @@ #include <io.h> #endif #include <mysys_err.h> -#include <assert.h> /***************************************************************************** diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc index 0d8af46dbf6..e2d484b1c2b 100644 --- a/sql/sql_handler.cc +++ b/sql/sql_handler.cc @@ -19,7 +19,6 @@ #include "mysql_priv.h" #include "sql_select.h" -#include <assert.h> /* TODO: HANDLER blabla OPEN [ AS foobar ] [ (column-list) ] diff --git a/sql/sql_help.cc b/sql/sql_help.cc index 013101a0ecc..2bac815d12a 100644 --- a/sql/sql_help.cc +++ b/sql/sql_help.cc @@ -382,7 +382,7 @@ int mysqld_help(THD *thd, const char *mask) if ((res= send_header_2(protocol)) || (count==0 && (search_categories(thd, 0, &categories_list, 0)<0 && - (res= 1))) || + ((res= 1)))) || (res= send_variant_2_list(protocol,&categories_list,true))) goto end; } @@ -396,7 +396,7 @@ int mysqld_help(THD *thd, const char *mask) else if ((res= send_header_2(protocol)) || (res= send_variant_2_list(protocol,&function_list,false)) || (search_categories(thd, mask, &categories_list, 0)<0 && - (res=1)) || + ((res=1))) || (res= send_variant_2_list(protocol,&categories_list,true))) { goto end; diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index e4fc3a5aec3..716e37b5cb7 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -21,7 +21,6 @@ #include "item_create.h" #include <m_ctype.h> #include <hash.h> -#include <assert.h> LEX_STRING tmp_table_alias= {(char*) "tmp-table",8}; @@ -235,7 +234,9 @@ static LEX_STRING get_quoted_token(LEX *lex,uint length, char quote) yyUnget(); // ptr points now after last token char tmp.length=lex->yytoklen=length; tmp.str=(char*) lex->thd->alloc(tmp.length+1); - for (from= (byte*) lex->tok_start, to= tmp.str, end= to+length ; to != end ;) + for (from= (byte*) lex->tok_start, to= (byte*) tmp.str, end= to+length ; + to != end ; + ) { if ((*to++= *from++) == quote) from++; // Skip double quotes diff --git a/sql/sql_lex.h b/sql/sql_lex.h index 9fc00e5f56d..85a171e9fe4 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -303,7 +303,7 @@ public: st_select_lex* outer_select(); st_select_lex* first_select() { return (st_select_lex*) slave; } st_select_lex_unit* next_unit() { return (st_select_lex_unit*) next; } - void st_select_lex_unit::exclude_level(); + void exclude_level(); /* UNION methods */ int prepare(THD *thd, select_result *result); diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 42f4d39147b..e53d60799c9 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -21,7 +21,6 @@ #include <m_ctype.h> #include <myisam.h> #include <my_dir.h> -#include <assert.h> #define files_charset_info system_charset_info diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 8e0c031065e..75b4fcb1896 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -67,7 +67,6 @@ Long data handling: #include "mysql_priv.h" #include "sql_acl.h" #include "sql_select.h" // for JOIN -#include <assert.h> // for DEBUG_ASSERT() #include <m_ctype.h> // for isspace() #define IS_PARAM_NULL(pos, param_no) pos[param_no/8] & (1 << param_no & 7) diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index 5bdc15c2bf0..99fcedfc023 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -22,7 +22,6 @@ #include "log_event.h" #include "mini_client.h" #include <my_dir.h> -#include <assert.h> extern const char* any_db; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 8ee1fbca6a5..d21c89bc512 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -29,7 +29,6 @@ #include <m_ctype.h> #include <hash.h> #include <ft_global.h> -#include <assert.h> const char *join_type_str[]={ "UNKNOWN","system","const","eq_ref","ref", "MAYBE_REF","ALL","range","index","fulltext" }; diff --git a/sql/sql_string.cc b/sql/sql_string.cc index 646621ac2eb..0d604d043cc 100644 --- a/sql/sql_string.cc +++ b/sql/sql_string.cc @@ -100,7 +100,7 @@ bool String::set(longlong num, CHARSET_INFO *cs) if (alloc(l)) return TRUE; - str_length=(uint32) cs->longlong10_to_str(cs,Ptr,l,-10,num); + str_length=(uint32) (cs->longlong10_to_str)(cs,Ptr,l,-10,num); str_charset=cs; return FALSE; } @@ -111,7 +111,7 @@ bool String::set(ulonglong num, CHARSET_INFO *cs) if (alloc(l)) return TRUE; - str_length=(uint32) cs->longlong10_to_str(cs,Ptr,l,10,num); + str_length=(uint32) (cs->longlong10_to_str)(cs,Ptr,l,10,num); str_charset=cs; return FALSE; } diff --git a/sql/sql_string.h b/sql/sql_string.h index ad91b20f18c..6d54373f642 100644 --- a/sql/sql_string.h +++ b/sql/sql_string.h @@ -115,7 +115,7 @@ public: Ptr=(char*) str; str_length=arg_length; Alloced_length=0 ; alloced=0; str_charset=cs; } - bool String::set_latin1(const char *str, uint32 arg_length); + bool set_latin1(const char *str, uint32 arg_length); inline void set_quick(char *str,uint32 arg_length, CHARSET_INFO *cs) { if (!alloced) diff --git a/sql/sql_table.cc b/sql/sql_table.cc index fcae9d03e00..f6b3305761e 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -23,7 +23,6 @@ #endif #include <hash.h> #include <myisam.h> -#include <assert.h> #ifdef __WIN__ #include <io.h> diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index a424aefd45f..fb594f28b2d 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -208,7 +208,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); %token DES_KEY_FILE %token DISABLE_SYM %token DISTINCT -%token DUPLICATE +%token DUPLICATE_SYM %token DYNAMIC_SYM %token ENABLE_SYM %token ENCLOSED @@ -3177,7 +3177,7 @@ expr_or_default: opt_insert_update: /* empty */ - | ON DUPLICATE + | ON DUPLICATE_SYM { /* for simplisity, let's forget about INSERT ... SELECT ... UPDATE for a moment */ @@ -3866,8 +3866,9 @@ keyword: | DES_KEY_FILE {} | DIRECTORY_SYM {} | DO_SYM {} - | DUMPFILE {} | DUAL_SYM {} + | DUMPFILE {} + | DUPLICATE_SYM {} | DYNAMIC_SYM {} | END {} | ENUM {} @@ -4565,11 +4566,7 @@ optional_order_or_limit: { THD *thd= YYTHD; LEX *lex= &thd->lex; - if (!lex->current_select->linkage == GLOBAL_OPTIONS_TYPE) - { - send_error(lex->thd, ER_SYNTAX_ERROR); - YYABORT; - } + DBUG_ASSERT(lex->current_select->linkage != GLOBAL_OPTIONS_TYPE); SELECT_LEX *sel= lex->current_select->select_lex(); sel->master_unit()->global_parameters= sel->master_unit(); diff --git a/strings/ctype-bin.c b/strings/ctype-bin.c index 7d174d510e2..de137377c65 100644 --- a/strings/ctype-bin.c +++ b/strings/ctype-bin.c @@ -105,9 +105,9 @@ static int my_wc_mb_bin(CHARSET_INFO *cs __attribute__((unused)), unsigned char *s, unsigned char *e __attribute__((unused))) { - if ( wc<256 ) + if (wc < 256) { - s[0]=wc; + s[0]= (char) wc; return 1; } return MY_CS_ILUNI; @@ -296,7 +296,7 @@ static CHARSET_INFO my_charset_bin_st = my_strncasecmp_bin, /* strncasecmp */ my_hash_caseup_bin, /* hash_caseup */ my_hash_sort_bin, /* hash_sort */ - 255, /* max_sort_char */ + (char) 255, /* max_sort_char */ my_snprintf_8bit, /* snprintf */ my_long10_to_str_8bit, my_longlong10_to_str_8bit, diff --git a/strings/ctype-mb.c b/strings/ctype-mb.c index 5b963e74db9..4c8471d4217 100644 --- a/strings/ctype-mb.c +++ b/strings/ctype-mb.c @@ -16,6 +16,7 @@ #include <my_global.h> #include "m_ctype.h" +#include "m_string.h" #ifdef USE_MB diff --git a/strings/ctype.c b/strings/ctype.c index 0873429f9ab..891c3c2c882 100644 --- a/strings/ctype.c +++ b/strings/ctype.c @@ -4018,7 +4018,7 @@ static int fill_uchar(uchar *a,uint size,const char *str, uint len) for ( ; (s < e) && !strchr(" \t\r\n",s[0]); s++) ; if (s == b || i > size) break; - a[i]= my_strntoul(my_charset_latin1,b,s-b,16,NULL,&err); + a[i]= (uchar) my_strntoul(my_charset_latin1,b,s-b,16,NULL,&err); } return 0; } @@ -4036,7 +4036,7 @@ static int fill_uint16(uint16 *a,uint size,const char *str, uint len) for ( ; (s < e) && !strchr(" \t\r\n",s[0]); s++) ; if (s == b || i > size) break; - a[i]= my_strntol(my_charset_latin1,b,s-b,16,NULL,&err); + a[i]= (uint16) my_strntol(my_charset_latin1,b,s-b,16,NULL,&err); } return 0; } diff --git a/tests/client_test.c b/tests/client_test.c index 35bd5f8639a..12a0275e0e0 100644 --- a/tests/client_test.c +++ b/tests/client_test.c @@ -1,56 +1,39 @@ -/*************************************************************************** - client_test.c - description - ------------------------- - begin : Sun Feb 3 2002 - copyright : (C) MySQL AB 1995-2003, www.mysql.com - author : venu ( venu@mysql.com ) - ***************************************************************************/ +/* Copyright (C) 2003 MySQL AB -/*************************************************************************** - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /*************************************************************************** - * * - * This is a test sample to test the new features in MySQL client-server * - * protocol * - * * - ***************************************************************************/ + This is a test sample to test the new features in MySQL client-server + protocol -#include <my_global.h> + Main author: venu ( venu@mysql.com ) -#if defined(__WIN__) || defined(_WIN32) || defined(_WIN64) -#include <windows.h> -#endif + NOTES: + - To be able to test which fields are used, we are not clearing + the MYSQL_BIND with bzero() but instead just clearing the fields that + are used by the API. -/* standrad headers */ -#include <stdio.h> -#include <string.h> +***************************************************************************/ -/* mysql client headers */ +#include <my_global.h> #include <my_sys.h> #include <mysql.h> #include <my_getopt.h> - +#include <m_string.h> #include <assert.h> -#ifndef true -#define true 1 -#endif - -#ifndef false -#define false 0 -#endif - -#ifndef bzero -#define bzero(A,B) memset(A,0,B) -#endif - /* set default options */ static char *opt_db=0; static char *opt_user=0; @@ -69,8 +52,6 @@ static char current_db[]= "client_test_db"; fprintf(stdout,"\n#######################\n"); \ } -#define init_bind(x) (bzero(x,sizeof(x))) - #ifndef mysql_param_result #define mysql_param_result mysql_prepare_result #endif @@ -85,7 +66,7 @@ static void print_error(const char *msg) fprintf(stderr,"\n [MySQL]"); fprintf(stderr,"[%d] %s\n",mysql_errno(mysql),mysql_error(mysql)); } - else if(msg) fprintf(stderr, " [MySQL] %s\n", msg); + else if (msg) fprintf(stderr, " [MySQL] %s\n", msg); } static void print_st_error(MYSQL_STMT *stmt, const char *msg) @@ -100,7 +81,7 @@ static void print_st_error(MYSQL_STMT *stmt, const char *msg) fprintf(stderr,"[%d] %s\n",mysql_stmt_errno(stmt), mysql_stmt_error(stmt)); } - else if(msg) fprintf(stderr, " [MySQL] %s\n", msg); + else if (msg) fprintf(stderr, " [MySQL] %s\n", msg); } static void client_disconnect(); @@ -112,35 +93,35 @@ static void client_disconnect(); #define myquery(r) \ { \ -if( r || r == -1) \ +if (r) \ myerror(NULL); \ myassert(r == 0); \ } #define myquery_r(r) \ { \ -if( r || r == -1) \ +if (r) \ myerror(NULL); \ myassert_r(r == 0); \ } #define mystmt(stmt,r) \ { \ -if( r || r == -1) \ +if (r) \ mysterror(stmt,NULL); \ myassert(r == 0);\ } #define mystmt_r(stmt,r) \ { \ -if( r || r == -1) \ +if (r) \ mysterror(stmt,NULL); \ myassert_r(r == 0);\ } #define mystmt_init(stmt) \ { \ -if( stmt == 0) \ +if ( stmt == 0) \ myerror(NULL); \ myassert(stmt != 0); \ } @@ -150,8 +131,8 @@ myassert(stmt != 0); \ myassert(stmt == 0);\ } -#define mytest(x) if(!x) {myerror(NULL);myassert(true);} -#define mytest_r(x) if(x) {myerror(NULL);myassert(true);} +#define mytest(x) if (!x) {myerror(NULL);myassert(TRUE);} +#define mytest_r(x) if (x) {myerror(NULL);myassert(TRUE);} #define PREPARE(A,B) mysql_prepare(A,B,strlen(B)) @@ -179,7 +160,7 @@ static void client_connect() } /* set AUTOCOMMIT to ON*/ - mysql_autocommit(mysql, true); + mysql_autocommit(mysql, TRUE); sprintf(buff,"CREATE DATABASE IF NOT EXISTS %s", current_db); rc = mysql_query(mysql, buff); myquery(rc); @@ -286,9 +267,9 @@ static void my_print_result_metadata(MYSQL_RES *result) { field = mysql_fetch_field(result); j = strlen(field->name); - if(j < field->max_length) + if (j < field->max_length) j = field->max_length; - if(j < 4 && !IS_NOT_NULL(field->flags)) + if (j < 4 && !IS_NOT_NULL(field->flags)) j = 4; field->max_length = j; } @@ -321,7 +302,7 @@ int my_process_result_set(MYSQL_RES *result) my_print_result_metadata(result); - while((row = mysql_fetch_row(result)) != NULL) + while ((row = mysql_fetch_row(result)) != NULL) { mysql_field_seek(result,0); fputc('\t',stdout); @@ -330,7 +311,7 @@ int my_process_result_set(MYSQL_RES *result) for(i=0; i< mysql_num_fields(result); i++) { field = mysql_fetch_field(result); - if(row[i] == NULL) + if (row[i] == NULL) fprintf(stdout, " %-*s |", (int) field->max_length, "NULL"); else if (IS_NUM(field->type)) fprintf(stdout, " %*s |", (int) field->max_length, row[i]); @@ -362,7 +343,8 @@ uint my_process_stmt_result(MYSQL_STMT *stmt) MYSQL_FIELD *field; MYSQL_RES *result; char data[50][255]; - long length[50]; + ulong length[50]; + my_bool is_null[50]; int rc, i; if (!(result= mysql_prepare_result(stmt))) @@ -376,8 +358,9 @@ uint my_process_stmt_result(MYSQL_STMT *stmt) { buffer[i].buffer_type= MYSQL_TYPE_STRING; buffer[i].buffer_length=50; - buffer[i].length=(long *)&length[i]; - buffer[i].buffer=(gptr)data[i]; + buffer[i].length=&length[i]; + buffer[i].buffer=(char*) data[i]; + buffer[i].is_null= &is_null[i]; } my_print_result_metadata(result); @@ -398,7 +381,7 @@ uint my_process_stmt_result(MYSQL_STMT *stmt) for (i=0; i < field_count; i++) { field = mysql_fetch_field(result); - if(length[i] == MYSQL_NULL_DATA) + if (is_null[i]) fprintf(stdout, " %-*s |", (int) field->max_length, "NULL"); else if (length[i] == 0) data[i][0]='\0'; /* unmodified buffer */ @@ -571,7 +554,7 @@ static my_bool thread_query(char *query) error= 0; fprintf(stdout,"\n in thread_query(%s)", query); - if(!(l_mysql = mysql_init(NULL))) + if (!(l_mysql = mysql_init(NULL))) { myerror("mysql_init() failed"); return 1; @@ -645,7 +628,7 @@ static void test_tran_bdb() myheader("test_tran_bdb"); /* set AUTOCOMMIT to OFF */ - rc = mysql_autocommit(mysql, false); + rc = mysql_autocommit(mysql, FALSE); myquery(rc); rc = mysql_query(mysql,"DROP TABLE IF EXISTS my_demo_transaction"); @@ -708,7 +691,7 @@ static void test_tran_bdb() mytest_r(row); mysql_free_result(result); - mysql_autocommit(mysql,true); + mysql_autocommit(mysql,TRUE); } /******************************************************** @@ -723,7 +706,7 @@ static void test_tran_innodb() myheader("test_tran_innodb"); /* set AUTOCOMMIT to OFF */ - rc = mysql_autocommit(mysql, false); + rc = mysql_autocommit(mysql, FALSE); myquery(rc); rc = mysql_query(mysql,"DROP TABLE IF EXISTS my_demo_transaction"); @@ -785,7 +768,7 @@ static void test_tran_innodb() mytest_r(row); mysql_free_result(result); - mysql_autocommit(mysql,true); + mysql_autocommit(mysql,TRUE); } @@ -963,7 +946,7 @@ static void test_prepare_syntax() static void test_prepare() { MYSQL_STMT *stmt; - int rc; + int rc, i; char query[200]; int int_data, o_int_data; char str_data[50], data[50]; @@ -972,13 +955,13 @@ static void test_prepare() longlong big_data, o_big_data; float real_data, o_real_data; double double_data, o_double_data; - long length[7], len; + ulong length[7], len; + my_bool is_null[7]; MYSQL_BIND bind[7]; myheader("test_prepare"); - init_bind(bind); - rc = mysql_autocommit(mysql, true); + rc = mysql_autocommit(mysql, TRUE); myquery(rc); rc = mysql_query(mysql,"DROP TABLE IF EXISTS my_prepare"); @@ -1002,26 +985,33 @@ static void test_prepare() /* tinyint */ bind[0].buffer_type=FIELD_TYPE_TINY; - bind[0].buffer= (gptr)&tiny_data; + bind[0].buffer= (char *)&tiny_data; /* string */ bind[1].buffer_type=FIELD_TYPE_STRING; - bind[1].buffer= (gptr)str_data; - bind[1].length= &bind[1].buffer_length; + bind[1].buffer= (char *)str_data; + bind[1].buffer_length= 1000; /* Max string length */ /* integer */ bind[2].buffer_type=FIELD_TYPE_LONG; - bind[2].buffer= (gptr)&int_data; + bind[2].buffer= (char *)&int_data; /* short */ bind[3].buffer_type=FIELD_TYPE_SHORT; - bind[3].buffer= (gptr)&small_data; + bind[3].buffer= (char *)&small_data; /* bigint */ bind[4].buffer_type=FIELD_TYPE_LONGLONG; - bind[4].buffer= (gptr)&big_data; + bind[4].buffer= (char *)&big_data; /* float */ bind[5].buffer_type=FIELD_TYPE_FLOAT; - bind[5].buffer= (gptr)&real_data; + bind[5].buffer= (char *)&real_data; /* double */ bind[6].buffer_type=FIELD_TYPE_DOUBLE; - bind[6].buffer= (gptr)&double_data; + bind[6].buffer= (char *)&double_data; + + for (i= 0; i < (int) array_elements(bind); i++) + { + bind[i].length= &length[i]; + bind[i].is_null= &is_null[i]; + is_null[i]= 0; + } rc = mysql_bind_param(stmt,bind); mystmt(stmt, rc); @@ -1035,7 +1025,7 @@ static void test_prepare() /* now, execute the prepared statement to insert 10 records.. */ for (tiny_data=0; tiny_data < 100; tiny_data++) { - bind[1].buffer_length = sprintf(str_data,"MySQL%d",int_data); + length[1]= my_sprintf(str_data,(str_data, "MySQL%d",int_data)); rc = mysql_execute(stmt); mystmt(stmt, rc); int_data += 25; @@ -1057,9 +1047,6 @@ static void test_prepare() stmt = mysql_prepare(mysql,"SELECT * FROM my_prepare",50); mystmt_init(stmt); - for (int_data= 0; int_data < 7; int_data++) - bind[int_data].length= &length[int_data]; - rc = mysql_bind_result(stmt, bind); mystmt(stmt, rc); @@ -1076,22 +1063,23 @@ static void test_prepare() /* now, execute the prepared statement to insert 10 records.. */ for (o_tiny_data=0; o_tiny_data < 100; o_tiny_data++) { - len = sprintf(data,"MySQL%d",o_int_data); + len = my_sprintf(data, (data, "MySQL%d",o_int_data)); rc = mysql_fetch(stmt); mystmt(stmt, rc); - fprintf(stdout, "\n tiny : %d (%ld)", tiny_data,length[0]); - fprintf(stdout, "\n short : %d (%ld)", small_data,length[3]); - fprintf(stdout, "\n int : %d (%ld)", int_data,length[2]); - fprintf(stdout, "\n big : %lld (%ld)", big_data,length[4]); + fprintf(stdout, "\n tiny : %d (%lu)", tiny_data,length[0]); + fprintf(stdout, "\n short : %d (%lu)", small_data,length[3]); + fprintf(stdout, "\n int : %d (%lu)", int_data,length[2]); + fprintf(stdout, "\n big : %lld (%lu)", big_data,length[4]); - fprintf(stdout, "\n float : %f (%ld)", real_data,length[5]); - fprintf(stdout, "\n double : %f (%ld)", double_data,length[6]); + fprintf(stdout, "\n float : %f (%lu)", real_data,length[5]); + fprintf(stdout, "\n double : %f (%lu)", double_data,length[6]); - fprintf(stdout, "\n str : %s (%ld)", str_data, length[1]); + fprintf(stdout, "\n str : %s (%lu)", str_data, length[1]); myassert(tiny_data == o_tiny_data); + myassert(is_null[0] == 0); myassert(length[0] == 1); myassert(int_data == o_int_data); @@ -1126,6 +1114,7 @@ static void test_prepare() } + /******************************************************** * to test double comparision * *********************************************************/ @@ -1137,11 +1126,11 @@ static void test_double_compare() double double_data; MYSQL_RES *result; MYSQL_BIND bind[3]; + ulong length[3]; myheader("test_double_compare"); - init_bind(bind); - rc = mysql_autocommit(mysql, true); + rc = mysql_autocommit(mysql, TRUE); myquery(rc); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_double_compare"); @@ -1165,17 +1154,24 @@ static void test_double_compare() /* tinyint */ bind[0].buffer_type=FIELD_TYPE_TINY; - bind[0].buffer=(gptr)&tiny_data; + bind[0].buffer=(char *)&tiny_data; + bind[0].is_null= 0; /* Can never be null */ + /* string->float */ bind[1].buffer_type=FIELD_TYPE_STRING; - bind[1].buffer= (gptr)&real_data; - bind[1].buffer_length=10; + bind[1].buffer= (char *)&real_data; + bind[1].buffer_length=sizeof(real_data); + bind[1].is_null= 0; + bind[1].length= &length[1]; + length[1]= 10; + /* double */ bind[2].buffer_type=FIELD_TYPE_DOUBLE; - bind[2].buffer= (gptr)&double_data; + bind[2].buffer= (char *)&double_data; + bind[2].is_null= 0; tiny_data = 1; - strcpy(real_data,"10.2"); + strmov(real_data,"10.2"); double_data = 34.5; rc = mysql_bind_param(stmt,bind); mystmt(stmt, rc); @@ -1204,6 +1200,7 @@ static void test_double_compare() mysql_free_result(result); } + /******************************************************** * to test simple null * *********************************************************/ @@ -1214,10 +1211,10 @@ static void test_null() int nData=1; MYSQL_RES *result; MYSQL_BIND bind[2]; + my_bool is_null[2]; myheader("test_null"); - init_bind(bind); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_null"); myquery(rc); @@ -1228,18 +1225,19 @@ static void test_null() myquery(rc); /* insert by prepare, wrong column name */ - strcpy(query,"INSERT INTO test_null(col3,col2) VALUES(?,?)"); + strmov(query,"INSERT INTO test_null(col3,col2) VALUES(?,?)"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init_r(stmt); - strcpy(query,"INSERT INTO test_null(col1,col2) VALUES(?,?)"); + strmov(query,"INSERT INTO test_null(col1,col2) VALUES(?,?)"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); verify_param_count(stmt,2); - bind[0].is_null=1; - bind[0].buffer_type=MYSQL_TYPE_NULL; + bind[0].buffer_type=MYSQL_TYPE_LONG; + bind[0].is_null= &is_null[0]; + is_null[0]= 1; bind[1]=bind[0]; /* string data */ rc = mysql_bind_param(stmt,bind); @@ -1278,12 +1276,13 @@ static void test_fetch_null() MYSQL_STMT *stmt; int rc; const char query[100]; - int length[11], i, nData; + int i, nData; MYSQL_BIND bind[11]; + ulong length[11]; + my_bool is_null[11]; myheader("test_fetch_null"); - init_bind(bind); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_fetch_null"); myquery(rc); @@ -1309,15 +1308,15 @@ static void test_fetch_null() myquery(rc); /* fetch */ - for (i=0; i <= 10; i++) + for (i= 0; i < (int) array_elements(bind); i++) { bind[i].buffer_type=FIELD_TYPE_LONG; - length[i]=99; - bind[i].length= (long *)&length[i]; + bind[i].is_null= &is_null[i]; + bind[i].length= &length[i]; } - bind[i-1].buffer=(gptr)&nData; + bind[i-1].buffer=(char *)&nData; /* Last column is not null */ - strcpy((char *)query , "SELECT * FROM test_fetch_null"); + strmov((char *)query , "SELECT * FROM test_fetch_null"); myassert(3 == my_stmt_result(query,50)); @@ -1337,17 +1336,19 @@ static void test_fetch_null() for (i=0; i < 10; i++) { fprintf(stdout, "\n data[%d] : %s", i, - length[i] == MYSQL_NULL_DATA ? "NULL" : "NOT NULL"); - myassert(length[i] == MYSQL_NULL_DATA); + is_null[i] ? "NULL" : "NOT NULL"); + myassert(is_null[i]); } fprintf(stdout, "\n data[%d]: %d", i, nData); myassert(nData == 1000 || nData == 88 || nData == 389789); + myassert(is_null[i] == 0); myassert(length[i] == 4); } myassert(rc == 3); mysql_stmt_close(stmt); } + /******************************************************** * to test simple select * *********************************************************/ @@ -1359,7 +1360,7 @@ static void test_select_version() myheader("test_select_version"); - strcpy((char *)query , "SELECT @@version"); + strmov((char *)query , "SELECT @@version"); stmt = PREPARE(mysql, query); mystmt_init(stmt); @@ -1384,7 +1385,7 @@ static void test_select_simple() myheader("test_select_simple"); /* insert by prepare */ - strcpy((char *)query, "SHOW TABLES FROM mysql"); + strmov((char *)query, "SHOW TABLES FROM mysql"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); @@ -1397,6 +1398,7 @@ static void test_select_simple() mysql_stmt_close(stmt); } + /******************************************************** * to test simple select to debug * *********************************************************/ @@ -1407,7 +1409,7 @@ static void test_select_direct() myheader("test_select_direct"); - rc = mysql_autocommit(mysql,true); + rc = mysql_autocommit(mysql,TRUE); myquery(rc); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_select"); @@ -1443,6 +1445,7 @@ static void test_select_direct() mysql_free_result(result); } + /******************************************************** * to test simple select with prepare * *********************************************************/ @@ -1453,7 +1456,7 @@ static void test_select_prepare() myheader("test_select_prepare"); - rc = mysql_autocommit(mysql,true); + rc = mysql_autocommit(mysql,TRUE); myquery(rc); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_select"); @@ -1515,6 +1518,7 @@ static void test_select_prepare() mysql_stmt_close(stmt); } + /******************************************************** * to test simple select * *********************************************************/ @@ -1525,11 +1529,11 @@ static void test_select() char szData[25]; int nData=1; MYSQL_BIND bind[2]; + ulong length[2]; myheader("test_select"); - init_bind(bind); - rc = mysql_autocommit(mysql,true); + rc = mysql_autocommit(mysql,TRUE); myquery(rc); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_select"); @@ -1558,7 +1562,7 @@ static void test_select() rc = mysql_commit(mysql); myquery(rc); - strcpy(query,"SELECT * FROM test_select WHERE id=? AND name=?"); + strmov(query,"SELECT * FROM test_select WHERE id=? AND name=?"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); @@ -1566,12 +1570,17 @@ static void test_select() /* string data */ nData=10; - strcpy(szData,(char *)"venu"); + strmov(szData,(char *)"venu"); bind[1].buffer_type=FIELD_TYPE_STRING; bind[1].buffer=szData; - bind[1].buffer_length=4; - bind[0].buffer=(gptr)&nData; + bind[1].buffer_length= sizeof(szData); /* Max string lenth */ + bind[1].length= &length[1]; + length[1]= 4; + bind[1].is_null=0; + + bind[0].buffer=(char *)&nData; bind[0].buffer_type=FIELD_TYPE_LONG; + bind[0].is_null= 0; rc = mysql_bind_param(stmt,bind); mystmt(stmt, rc); @@ -1579,11 +1588,12 @@ static void test_select() rc = mysql_execute(stmt); mystmt(stmt, rc); - myassert( 1 == my_process_stmt_result(stmt)); + myassert(my_process_stmt_result(stmt) != 0); mysql_stmt_close(stmt); } + /******************************************************** * to test simple select show * *********************************************************/ @@ -1594,9 +1604,9 @@ static void test_select_show() myheader("test_select_show"); - mysql_autocommit(mysql,true); + mysql_autocommit(mysql,TRUE); - strcpy(query,"SELECT * FROM mysql.host"); + strmov(query,"SELECT * FROM mysql.host"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); @@ -1610,6 +1620,7 @@ static void test_select_show() mysql_stmt_close(stmt); } + /******************************************************** * to test simple update * *********************************************************/ @@ -1621,11 +1632,11 @@ static void test_simple_update() int nData=1; MYSQL_RES *result; MYSQL_BIND bind[2]; + ulong length[2]; myheader("test_simple_update"); - init_bind(bind); - rc = mysql_autocommit(mysql,true); + rc = mysql_autocommit(mysql,TRUE); myquery(rc); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_update"); @@ -1650,7 +1661,7 @@ static void test_simple_update() myquery(rc); /* insert by prepare */ - strcpy(query,"UPDATE test_update SET col2=? WHERE col1=?"); + strmov(query,"UPDATE test_update SET col2=? WHERE col1=?"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); @@ -1659,9 +1670,14 @@ static void test_simple_update() nData=1; bind[0].buffer_type=FIELD_TYPE_STRING; bind[0].buffer=szData; /* string data */ - bind[0].buffer_length=sprintf(szData,"updated-data"); - bind[1].buffer=(gptr)&nData; + bind[0].buffer_length=sizeof(szData); + bind[0].length= &length[0]; + bind[0].is_null= 0; + length[0]= my_sprintf(szData, (szData,"updated-data")); + + bind[1].buffer=(char *) &nData; bind[1].buffer_type=FIELD_TYPE_LONG; + bind[1].is_null= 0; rc = mysql_bind_param(stmt,bind); mystmt(stmt, rc); @@ -1697,15 +1713,12 @@ static void test_long_data() MYSQL_STMT *stmt; int rc, int_data; char *data=NullS; - long length; MYSQL_RES *result; MYSQL_BIND bind[3]; - myheader("test_long_data"); - init_bind(bind); - rc = mysql_autocommit(mysql,true); + rc = mysql_autocommit(mysql,TRUE); myquery(rc); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_long_data"); @@ -1721,11 +1734,11 @@ static void test_long_data() rc = mysql_commit(mysql); myquery(rc); - strcpy(query,"INSERT INTO test_long_data(col1,col2) VALUES(?)"); + strmov(query,"INSERT INTO test_long_data(col1,col2) VALUES(?)"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init_r(stmt); - strcpy(query,"INSERT INTO test_long_data(col1,col2,col3) VALUES(?,?,?)"); + strmov(query,"INSERT INTO test_long_data(col1,col2,col3) VALUES(?,?,?)"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); @@ -1733,46 +1746,26 @@ static void test_long_data() bind[0].buffer=(char *)&int_data; bind[0].buffer_type=FIELD_TYPE_LONG; - - /* Non string or binary type, error */ - bind[1].buffer_type=FIELD_TYPE_LONG; - bind[1].length=&length; - length= MYSQL_LONG_DATA; /* specify long data suppy during run-time */ - rc = mysql_bind_param(stmt,bind); - fprintf(stdout," mysql_bind_param() returned: %d\n",rc); - mystmt_r(stmt, rc); + bind[0].is_null=0; bind[1].buffer_type=FIELD_TYPE_STRING; + bind[1].is_null=0; + bind[1].buffer_length=0; /* Will not be used */ + bind[1].length=0; /* Will not be used */ + bind[2]=bind[1]; rc = mysql_bind_param(stmt,bind); mystmt(stmt, rc); int_data= 999; - rc = mysql_execute(stmt); - fprintf(stdout," mysql_execute() returned %d\n",rc); - myassert(rc == MYSQL_NEED_DATA); - - data = (char *)"Micheal"; + data = (char *)"Michael"; /* supply data in pieces */ - rc = mysql_send_long_data(stmt,1,data,7,0); - mystmt(stmt, rc); - - /* try to execute mysql_execute() now, it should return - MYSQL_NEED_DATA as the long data supply is not yet over - */ - rc = mysql_execute(stmt); - fprintf(stdout," mysql_execute() returned %d\n",rc); - myassert(rc == MYSQL_NEED_DATA); - - /* append data again ..*/ - - /* Indicate end of data */ - data = (char *)" 'monty' Widenius"; - rc = mysql_send_long_data(stmt,1,data,17,1); + rc = mysql_send_long_data(stmt,1,data,strlen(data)); + data = (char *)" 'Monty' Widenius"; + rc = mysql_send_long_data(stmt,1,data,strlen(data)); mystmt(stmt, rc); - - rc = mysql_send_long_data(stmt,2,"Venu (venu@mysql.com)",4,1); + rc = mysql_send_long_data(stmt,2,"Venu (venu@mysql.com)",4); mystmt(stmt, rc); /* execute */ @@ -1795,10 +1788,11 @@ static void test_long_data() mysql_free_result(result); verify_col_data("test_long_data","col1","999"); - verify_col_data("test_long_data","col2","Micheal 'monty' Widenius"); + verify_col_data("test_long_data","col2","Michael 'Monty' Widenius"); verify_col_data("test_long_data","col3","Venu"); } + /******************************************************** * to test long data (string) handling * *********************************************************/ @@ -1810,12 +1804,11 @@ static void test_long_data_str() long length, length1; MYSQL_RES *result; MYSQL_BIND bind[2]; - + my_bool is_null[2]; myheader("test_long_data_str"); - init_bind(bind); - rc = mysql_autocommit(mysql,true); + rc = mysql_autocommit(mysql,TRUE); myquery(rc); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_long_data_str"); @@ -1830,47 +1823,36 @@ static void test_long_data_str() rc = mysql_commit(mysql); myquery(rc); - strcpy(query,"INSERT INTO test_long_data_str VALUES(?,?)"); + strmov(query,"INSERT INTO test_long_data_str VALUES(?,?)"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); verify_param_count(stmt,2); - bind[0].buffer = (gptr)&length; + bind[0].buffer = (char *)&length; bind[0].buffer_type = FIELD_TYPE_LONG; + bind[0].is_null= &is_null[0]; + is_null[0]=0; + length= 0; - bind[1].buffer=data; /* string data */ + bind[1].buffer=data; /* string data */ bind[1].buffer_type=FIELD_TYPE_STRING; bind[1].length= &length1; - length1= MYSQL_LONG_DATA; + bind[1].buffer_length=0; /* Will not be used */ + bind[1].is_null= &is_null[1]; + is_null[1]=0; rc = mysql_bind_param(stmt,bind); mystmt(stmt, rc); - length = 10; - rc = mysql_execute(stmt); - fprintf(stdout," mysql_execute() returned %d\n",rc); - myassert(rc == MYSQL_NEED_DATA); - length = 40; sprintf(data,"MySQL AB"); /* supply data in pieces */ for(i=0; i < 4; i++) { - rc = mysql_send_long_data(stmt,1,(char *)data,5,0); + rc = mysql_send_long_data(stmt,1,(char *)data,5); mystmt(stmt, rc); } - /* try to execute mysql_execute() now, it should return - MYSQL_NEED_DATA as the long data supply is not yet over - */ - rc = mysql_execute(stmt); - fprintf(stdout," mysql_execute() returned %d\n",rc); - myassert(rc == MYSQL_NEED_DATA); - - /* Indiate end of data supply */ - rc = mysql_send_long_data(stmt,1,0,0,1); - mystmt(stmt, rc); - /* execute */ rc = mysql_execute(stmt); fprintf(stdout," mysql_execute() returned %d\n",rc); @@ -1913,11 +1895,9 @@ static void test_long_data_str1() MYSQL_RES *result; MYSQL_BIND bind[2]; - myheader("test_long_data_str1"); - init_bind(bind); - rc = mysql_autocommit(mysql,true); + rc = mysql_autocommit(mysql,TRUE); myquery(rc); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_long_data_str"); @@ -1932,56 +1912,35 @@ static void test_long_data_str1() rc = mysql_commit(mysql); myquery(rc); - strcpy(query,"INSERT INTO test_long_data_str VALUES(?,?)"); + strmov(query,"INSERT INTO test_long_data_str VALUES(?,?)"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); verify_param_count(stmt,2); bind[0].buffer=data; /* string data */ + bind[0].buffer_length= sizeof(data); bind[0].length= &length1; bind[0].buffer_type=FIELD_TYPE_STRING; - length1= MYSQL_LONG_DATA; + bind[0].is_null= 0; + length1= 0; bind[1] = bind[0]; bind[1].buffer_type=FIELD_TYPE_BLOB; rc = mysql_bind_param(stmt,bind); mystmt(stmt, rc); - - length = 10; - rc = mysql_execute(stmt); - fprintf(stdout," mysql_execute() returned %d\n",rc); - myassert(rc == MYSQL_NEED_DATA); - - length = sprintf(data,"MySQL AB"); + length = my_sprintf(data, (data, "MySQL AB")); /* supply data in pieces */ - for(i=0; i < 3; i++) + for (i=0; i < 3; i++) { - rc = mysql_send_long_data(stmt,0,data,length,0); + rc = mysql_send_long_data(stmt,0,data,length); mystmt(stmt, rc); - rc = mysql_send_long_data(stmt,1,data,2,0); + rc = mysql_send_long_data(stmt,1,data,2); mystmt(stmt, rc); } - /* try to execute mysql_execute() now, it should return - MYSQL_NEED_DATA as the long data supply is not yet over - */ - rc = mysql_execute(stmt); - fprintf(stdout," mysql_execute() returned %d\n",rc); - myassert(rc == MYSQL_NEED_DATA); - - /* Indiate end of data supply */ - rc = mysql_send_long_data(stmt,1,0,0,1); - mystmt(stmt, rc); - - rc = mysql_execute(stmt); - fprintf(stdout," mysql_execute() returned %d\n",rc); - myassert(rc == MYSQL_NEED_DATA); - - rc = mysql_send_long_data(stmt,0,0,0,1); - mystmt(stmt, rc); /* execute */ rc = mysql_execute(stmt); @@ -2020,15 +1979,14 @@ static void test_long_data_bin() MYSQL_STMT *stmt; int rc; char data[255]; - long length, length1; + long length; MYSQL_RES *result; MYSQL_BIND bind[2]; myheader("test_long_data_bin"); - init_bind(bind); - rc = mysql_autocommit(mysql,true); + rc = mysql_autocommit(mysql,TRUE); myquery(rc); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_long_data_bin"); @@ -2043,50 +2001,36 @@ static void test_long_data_bin() rc = mysql_commit(mysql); myquery(rc); - strcpy(query,"INSERT INTO test_long_data_bin VALUES(?,?)"); + strmov(query,"INSERT INTO test_long_data_bin VALUES(?,?)"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); verify_param_count(stmt,2); - bind[0].buffer = (gptr)&length; + bind[0].buffer = (char *)&length; bind[0].buffer_type = FIELD_TYPE_LONG; + bind[0].is_null= 0; + length= 0; - bind[1].buffer=data; /* string data */ + bind[1].buffer=data; /* string data */ bind[1].buffer_type=FIELD_TYPE_LONG_BLOB; - bind[1].length= &length1; - length1= MYSQL_LONG_DATA; + bind[1].length= 0; /* Will not be used */ + bind[1].is_null= 0; rc = mysql_bind_param(stmt,bind); mystmt(stmt, rc); length = 10; - rc = mysql_execute(stmt); - fprintf(stdout," mysql_execute() returned %d\n",rc); - myassert(rc == MYSQL_NEED_DATA); - sprintf(data,"MySQL AB"); /* supply data in pieces */ { int i; - for(i=0; i < 100; i++) + for (i=0; i < 100; i++) { - rc = mysql_send_long_data(stmt,1,(char *)data,4,0); + rc = mysql_send_long_data(stmt,1,(char *)data,4); mystmt(stmt, rc); } - - /* try to execute mysql_execute() now, it should return - MYSQL_NEED_DATA as the long data supply is not yet over - */ - rc = mysql_execute(stmt); - fprintf(stdout," mysql_execute() returned %d\n",rc); - myassert(rc == MYSQL_NEED_DATA); } - - /* Indiate end of data supply */ - rc = mysql_send_long_data(stmt,1,0,0,1); - mystmt(stmt, rc); - /* execute */ rc = mysql_execute(stmt); fprintf(stdout," mysql_execute() returned %d\n",rc); @@ -2121,12 +2065,11 @@ static void test_simple_delete() int nData=1; MYSQL_RES *result; MYSQL_BIND bind[2]; - + ulong length[2]; myheader("test_simple_delete"); - init_bind(bind); - rc = mysql_autocommit(mysql,true); + rc = mysql_autocommit(mysql,TRUE); myquery(rc); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_simple_delete"); @@ -2151,19 +2094,23 @@ static void test_simple_delete() myquery(rc); /* insert by prepare */ - strcpy(query,"DELETE FROM test_simple_delete WHERE col1=? AND col2=? AND col3=100"); + strmov(query,"DELETE FROM test_simple_delete WHERE col1=? AND col2=? AND col3=100"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); verify_param_count(stmt,2); nData=1; - strcpy(szData,"MySQL"); - bind[1].buffer_length = 5; + strmov(szData,"MySQL"); bind[1].buffer_type=FIELD_TYPE_STRING; - bind[1].buffer=szData; /* string data */ - bind[0].buffer=(gptr)&nData; + bind[1].buffer= szData; /* string data */ + bind[1].buffer_length=sizeof(szData); + bind[1].length= &length[1]; + length[1]= 5; + + bind[0].buffer=(char *)&nData; bind[0].buffer_type=FIELD_TYPE_LONG; + bind[0].is_null= 0; rc = mysql_bind_param(stmt,bind); mystmt(stmt, rc); @@ -2203,12 +2150,11 @@ static void test_update() int nData=1; MYSQL_RES *result; MYSQL_BIND bind[2]; - + ulong length[2]; myheader("test_update"); - init_bind(bind); - rc = mysql_autocommit(mysql,true); + rc = mysql_autocommit(mysql,TRUE); myquery(rc); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_update"); @@ -2224,7 +2170,7 @@ static void test_update() rc = mysql_commit(mysql); myquery(rc); - strcpy(query,"INSERT INTO test_update(col2,col3) VALUES(?,?)"); + strmov(query,"INSERT INTO test_update(col2,col3) VALUES(?,?)"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); @@ -2233,9 +2179,14 @@ static void test_update() /* string data */ bind[0].buffer_type=FIELD_TYPE_STRING; bind[0].buffer=szData; - bind[0].buffer_length=sprintf(szData,"inserted-data"); - bind[1].buffer=(gptr)&nData; + bind[0].buffer_length= sizeof(szData); + bind[0].length= &length[0]; + length[0]= my_sprintf(szData, (szData, "inserted-data")); + bind[0].is_null= 0; + + bind[1].buffer=(char *)&nData; bind[1].buffer_type=FIELD_TYPE_LONG; + bind[1].is_null= 0; rc = mysql_bind_param(stmt,bind); mystmt(stmt, rc); @@ -2247,19 +2198,21 @@ static void test_update() myassert(1 == mysql_affected_rows(mysql)); mysql_stmt_close(stmt); - strcpy(query,"UPDATE test_update SET col2=? WHERE col3=?"); + strmov(query,"UPDATE test_update SET col2=? WHERE col3=?"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); verify_param_count(stmt,2); nData=100; - bind[0].buffer_type=FIELD_TYPE_STRING; bind[0].buffer=szData; - bind[0].buffer_length=sprintf(szData,"updated-data"); - bind[1].buffer=(gptr)&nData; + bind[0].buffer_length= sizeof(szData); + bind[0].length= &length[0]; + length[0]= my_sprintf(szData, (szData, "updated-data")); + bind[1].buffer=(char *)&nData; bind[1].buffer_type=FIELD_TYPE_LONG; + bind[1].is_null= 0; rc = mysql_bind_param(stmt,bind); mystmt(stmt, rc); @@ -2309,7 +2262,7 @@ static void test_prepare_noparam() /* insert by prepare */ - strcpy(query,"INSERT INTO my_prepare VALUES(10,'venu')"); + strmov(query,"INSERT INTO my_prepare VALUES(10,'venu')"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); @@ -2344,14 +2297,15 @@ static void test_bind_result() { MYSQL_STMT *stmt; int rc; - const char query[100]; - int nData, length, length1; + char query[100]; + int nData; + ulong length, length1; char szData[100]; MYSQL_BIND bind[2]; + my_bool is_null[2]; myheader("test_bind_result"); - init_bind(bind); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_bind_result"); myquery(rc); @@ -2379,14 +2333,17 @@ static void test_bind_result() /* fetch */ bind[0].buffer_type=FIELD_TYPE_LONG; - bind[0].buffer= (gptr) &nData; /* integer data */ - bind[0].length= (long *)&length; + bind[0].buffer= (char *) &nData; /* integer data */ + bind[0].is_null= &is_null[0]; + bind[0].length= 0; + bind[1].buffer_type=FIELD_TYPE_STRING; bind[1].buffer=szData; /* string data */ bind[1].buffer_length=sizeof(szData); - bind[1].length=(long *)&length1; + bind[1].length= &length1; + bind[1].is_null= &is_null[1]; - strcpy((char *)query , "SELECT * FROM test_bind_result"); + strmov(query , "SELECT * FROM test_bind_result"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); @@ -2399,7 +2356,7 @@ static void test_bind_result() rc = mysql_fetch(stmt); mystmt(stmt,rc); - fprintf(stdout,"\n row 1: %d,%s(%d)",nData, szData, length1); + fprintf(stdout,"\n row 1: %d,%s(%lu)",nData, szData, length1); myassert(nData == 10); myassert(strcmp(szData,"venu")==0); myassert(length1 == 4); @@ -2407,7 +2364,7 @@ static void test_bind_result() rc = mysql_fetch(stmt); mystmt(stmt,rc); - fprintf(stdout,"\n row 2: %d,%s(%d)",nData, szData, length1); + fprintf(stdout,"\n row 2: %d,%s(%lu)",nData, szData, length1); myassert(nData == 20); myassert(strcmp(szData,"MySQL")==0); myassert(length1 == 5); @@ -2416,11 +2373,11 @@ static void test_bind_result() rc = mysql_fetch(stmt); mystmt(stmt,rc); - if (length == MYSQL_NULL_DATA) - fprintf(stdout,"\n row 3: NULL,%s(%d)", szData, length1); + if (is_null[0]) + fprintf(stdout,"\n row 3: NULL,%s(%lu)", szData, length1); else - fprintf(stdout,"\n row 3: %d,%s(%d)", nData, szData, length1); - myassert(length == MYSQL_NULL_DATA); + fprintf(stdout,"\n row 3: %d,%s(%lu)", nData, szData, length1); + myassert(is_null[0]); myassert(strcmp(szData,"monty")==0); myassert(length1 == 5); @@ -2437,7 +2394,7 @@ static void test_bind_result() static void test_bind_result_ext() { MYSQL_STMT *stmt; - int rc; + int rc, i; const char query[100]; uchar t_data; short s_data; @@ -2446,12 +2403,13 @@ static void test_bind_result_ext() float f_data; double d_data; char szData[20], bData[20]; - int szLength, bLength; + ulong szLength, bLength; MYSQL_BIND bind[8]; + long length[8]; + my_bool is_null[8]; myheader("test_bind_result_ext"); - init_bind(bind); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_bind_result"); myquery(rc); @@ -2476,33 +2434,41 @@ static void test_bind_result_ext() rc = mysql_commit(mysql); myquery(rc); + for (i= 0; i < (int) array_elements(bind); i++) + { + bind[i].length= &length[i]; + bind[i].is_null= &is_null[i]; + } + bind[0].buffer_type=MYSQL_TYPE_TINY; - bind[0].buffer=(gptr)&t_data; + bind[0].buffer=(char *)&t_data; bind[1].buffer_type=MYSQL_TYPE_SHORT; bind[2].buffer_type=MYSQL_TYPE_LONG; bind[3].buffer_type=MYSQL_TYPE_LONGLONG; - bind[1].buffer=(gptr)&s_data; + bind[1].buffer=(char *)&s_data; - bind[2].buffer=(gptr)&i_data; - bind[3].buffer=(gptr)&b_data; + bind[2].buffer=(char *)&i_data; + bind[3].buffer=(char *)&b_data; bind[4].buffer_type=MYSQL_TYPE_FLOAT; - bind[4].buffer=(gptr)&f_data; + bind[4].buffer=(char *)&f_data; bind[5].buffer_type=MYSQL_TYPE_DOUBLE; - bind[5].buffer=(gptr)&d_data; + bind[5].buffer=(char *)&d_data; bind[6].buffer_type=MYSQL_TYPE_STRING; - bind[6].buffer=(gptr)&szData; - bind[6].length=(long *)&szLength; + bind[6].buffer= (char *)&szData; + bind[6].buffer_length= sizeof(szData); + bind[6].length= &szLength; bind[7].buffer_type=MYSQL_TYPE_TINY_BLOB; - bind[7].buffer=(gptr)&bData; - bind[7].length=(long *)&bLength; + bind[7].buffer=(char *)&bData; + bind[7].length= &bLength; + bind[7].buffer_length= sizeof(bData); - strcpy((char *)query , "SELECT * FROM test_bind_result"); + strmov((char *)query , "SELECT * FROM test_bind_result"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); @@ -2523,8 +2489,8 @@ static void test_bind_result_ext() fprintf(stdout, "\n data (float) : %f", f_data); fprintf(stdout, "\n data (double) : %f", d_data); - fprintf(stdout, "\n data (str) : %s(%d)", szData, szLength); - fprintf(stdout, "\n data (bin) : %s(%d)", bData, bLength); + fprintf(stdout, "\n data (str) : %s(%lu)", szData, szLength); + fprintf(stdout, "\n data (bin) : %s(%lu)", bData, bLength); myassert(t_data == 19); @@ -2551,6 +2517,7 @@ static void test_bind_result_ext() static void test_bind_result_ext1() { MYSQL_STMT *stmt; + uint i; int rc; const char query[100]; char t_data[20]; @@ -2559,14 +2526,13 @@ static void test_bind_result_ext1() short b_data; int f_data; long bData; - long length[11]; char d_data[20]; double szData; MYSQL_BIND bind[8]; - + ulong length[8]; + my_bool is_null[8]; myheader("test_bind_result_ext1"); - init_bind(bind); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_bind_result"); myquery(rc); @@ -2592,33 +2558,38 @@ static void test_bind_result_ext1() myquery(rc); bind[0].buffer_type=MYSQL_TYPE_STRING; - bind[0].buffer=(gptr)t_data; - - for (rc=0; rc <= 7; rc++) - bind[rc].length= &length[rc]; + bind[0].buffer=(char *) t_data; + bind[0].buffer_length= sizeof(t_data); + bind[0].length= &length[0]; bind[1].buffer_type=MYSQL_TYPE_FLOAT; - bind[1].buffer=(gptr)&s_data; + bind[1].buffer=(char *)&s_data; bind[2].buffer_type=MYSQL_TYPE_SHORT; - bind[2].buffer=(gptr)&i_data; + bind[2].buffer=(char *)&i_data; bind[3].buffer_type=MYSQL_TYPE_TINY; - bind[3].buffer=(gptr)&b_data; + bind[3].buffer=(char *)&b_data; bind[4].buffer_type=MYSQL_TYPE_LONG; - bind[4].buffer=(gptr)&f_data; + bind[4].buffer=(char *)&f_data; bind[5].buffer_type=MYSQL_TYPE_STRING; - bind[5].buffer=(gptr)d_data; + bind[5].buffer=(char *)d_data; bind[6].buffer_type=MYSQL_TYPE_LONG; - bind[6].buffer=(gptr)&bData; + bind[6].buffer=(char *)&bData; bind[7].buffer_type=MYSQL_TYPE_DOUBLE; - bind[7].buffer=(gptr)&szData; + bind[7].buffer=(char *)&szData; - strcpy((char *)query , "SELECT * FROM test_bind_result"); + for (i= 0; i < array_elements(bind); i++) + { + bind[i].is_null= &is_null[i]; + bind[i].length= &length[i]; + } + + strmov((char *)query , "SELECT * FROM test_bind_result"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); @@ -2631,16 +2602,16 @@ static void test_bind_result_ext1() rc = mysql_fetch(stmt); mystmt(stmt,rc); - fprintf(stdout, "\n data (tiny) : %s(%ld)", t_data, length[0]); - fprintf(stdout, "\n data (short) : %f(%ld)", s_data, length[1]); - fprintf(stdout, "\n data (int) : %d(%ld)", i_data, length[2]); - fprintf(stdout, "\n data (big) : %d(%ld)", b_data, length[3]); + fprintf(stdout, "\n data (tiny) : %s(%lu)", t_data, length[0]); + fprintf(stdout, "\n data (short) : %f(%lu)", s_data, length[1]); + fprintf(stdout, "\n data (int) : %d(%lu)", i_data, length[2]); + fprintf(stdout, "\n data (big) : %d(%lu)", b_data, length[3]); - fprintf(stdout, "\n data (float) : %d(%ld)", f_data, length[4]); - fprintf(stdout, "\n data (double) : %s(%ld)", d_data, length[5]); + fprintf(stdout, "\n data (float) : %d(%lu)", f_data, length[4]); + fprintf(stdout, "\n data (double) : %s(%lu)", d_data, length[5]); - fprintf(stdout, "\n data (bin) : %ld(%ld)", bData, length[6]); - fprintf(stdout, "\n data (str) : %g(%ld)", szData, length[7]); + fprintf(stdout, "\n data (bin) : %ld(%lu)", bData, length[6]); + fprintf(stdout, "\n data (str) : %g(%lu)", szData, length[7]); myassert(strcmp(t_data,"120")==0); myassert(i_data == 3999); @@ -2668,16 +2639,17 @@ static void test_bind_result_ext1() static void test_fetch_date() { MYSQL_STMT *stmt; + uint i; int rc, year; char date[25], time[25], ts[25], ts_4[15], ts_6[20], dt[20]; - int d_length, t_length, ts_length, ts4_length, ts6_length, + ulong d_length, t_length, ts_length, ts4_length, ts6_length, dt_length, y_length; - - MYSQL_BIND bind[3]; + MYSQL_BIND bind[8]; + my_bool is_null[8]; + ulong length[8]; myheader("test_fetch_date"); - init_bind(bind); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_bind_result"); myquery(rc); @@ -2706,33 +2678,45 @@ static void test_fetch_date() rc = mysql_commit(mysql); myquery(rc); + for (i= 0; i < array_elements(bind); i++) + { + bind[i].is_null= &is_null[i]; + bind[i].length= &length[i]; + } + bind[0].buffer_type=MYSQL_TYPE_STRING; bind[1]=bind[2]=bind[0]; - bind[0].buffer=(gptr)&date; - bind[0].length=(long *)&d_length; + bind[0].buffer=(char *)&date; + bind[0].buffer_length= sizeof(date); + bind[0].length= &d_length; - bind[1].buffer=(gptr)&time; - bind[1].length=(long *)&t_length; + bind[1].buffer=(char *)&time; + bind[1].buffer_length= sizeof(time); + bind[1].length= &t_length; - bind[2].buffer=(gptr)&ts; - bind[2].length=(long *)&ts_length; + bind[2].buffer=(char *)&ts; + bind[2].buffer_length= sizeof(ts); + bind[2].length= &ts_length; bind[3].buffer_type=MYSQL_TYPE_LONG; - bind[3].buffer=(gptr)&year; - bind[3].length=(long *)&y_length; + bind[3].buffer=(char *)&year; + bind[3].length= &y_length; bind[4].buffer_type=MYSQL_TYPE_STRING; - bind[4].buffer=(gptr)&dt; - bind[4].length=(long *)&dt_length; + bind[4].buffer=(char *)&dt; + bind[4].buffer_length= sizeof(dt); + bind[4].length= &dt_length; bind[5].buffer_type=MYSQL_TYPE_STRING; - bind[5].buffer=(gptr)&ts_4; - bind[5].length=(long *)&ts4_length; + bind[5].buffer=(char *)&ts_4; + bind[5].buffer_length= sizeof(ts_4); + bind[5].length= &ts4_length; bind[6].buffer_type=MYSQL_TYPE_STRING; - bind[6].buffer=(gptr)&ts_6; - bind[6].length=(long *)&ts6_length; + bind[6].buffer=(char *)&ts_6; + bind[6].buffer_length= sizeof(ts_6); + bind[6].length= &ts6_length; myassert(1 == my_stmt_result("SELECT * FROM test_bind_result",50)); @@ -2749,13 +2733,13 @@ static void test_fetch_date() rc = mysql_fetch(stmt); mystmt(stmt,rc); - fprintf(stdout, "\n date : %s(%d)", date, d_length); - fprintf(stdout, "\n time : %s(%d)", time, t_length); - fprintf(stdout, "\n ts : %s(%d)", ts, ts_length); - fprintf(stdout, "\n year : %d(%d)", year, y_length); - fprintf(stdout, "\n dt : %s(%d)", dt, dt_length); - fprintf(stdout, "\n ts(4) : %s(%d)", ts_4, ts4_length); - fprintf(stdout, "\n ts(6) : %s(%d)", ts_6, ts6_length); + fprintf(stdout, "\n date : %s(%lu)", date, d_length); + fprintf(stdout, "\n time : %s(%lu)", time, t_length); + fprintf(stdout, "\n ts : %s(%lu)", ts, ts_length); + fprintf(stdout, "\n year : %d(%lu)", year, y_length); + fprintf(stdout, "\n dt : %s(%lu)", dt, dt_length); + fprintf(stdout, "\n ts(4) : %s(%lu)", ts_4, ts4_length); + fprintf(stdout, "\n ts(6) : %s(%lu)", ts_6, ts6_length); myassert(strcmp(date,"2002-01-02")==0); myassert(d_length == 10); @@ -2790,16 +2774,18 @@ static void test_fetch_date() static void test_fetch_str() { MYSQL_STMT *stmt; - int rc, i, round, bit; - long data[10], length[10]; + int rc, i, round; + ulong bit; + long data[10]; float f_data; double d_data; char s_data[10]; + ulong length[10]; MYSQL_BIND bind[7]; + my_bool is_null[7]; myheader("test_fetch_str"); - init_bind(bind); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_bind_str"); myquery(rc); @@ -2824,10 +2810,11 @@ static void test_fetch_str() verify_param_count(stmt, 7); round= 0; - for (i=0; i < 7; i++) + for (i= 0; i < (int) array_elements(bind); i++) { bind[i].buffer_type= MYSQL_TYPE_LONG; - bind[i].buffer= (void *)&data[i]; + bind[i].buffer= &data[i]; + bind[i].is_null= 0; data[i]= round+i+1; round= (round +10)*10; } @@ -2847,10 +2834,11 @@ static void test_fetch_str() stmt = mysql_prepare(mysql,"SELECT * FROM test_bind_str",50); myquery(rc); - for (i=0; i < 7; i++) + for (i= 0; i < (int) array_elements(bind); i++) { - bind[i].buffer= (void *)&data[i]; - bind[i].length= (long *)&length[i]; + bind[i].buffer= (char *) &data[i]; + bind[i].length= &length[i]; + bind[i].is_null= &is_null[i]; } bind[0].buffer_type= MYSQL_TYPE_TINY; bind[1].buffer_type= MYSQL_TYPE_SHORT; @@ -2858,13 +2846,13 @@ static void test_fetch_str() bind[3].buffer_type= MYSQL_TYPE_LONGLONG; bind[4].buffer_type= MYSQL_TYPE_FLOAT; - bind[4].buffer= (void *)&f_data; + bind[4].buffer= (char *)&f_data; bind[5].buffer_type= MYSQL_TYPE_DOUBLE; - bind[5].buffer= (void *)&d_data; + bind[5].buffer= (char *)&d_data; bind[6].buffer_type= MYSQL_TYPE_STRING; - bind[6].buffer= (void *)&s_data; + bind[6].buffer= (char *)&s_data; rc = mysql_bind_result(stmt, bind); mystmt(stmt, rc); @@ -2875,13 +2863,13 @@ static void test_fetch_str() rc = mysql_fetch(stmt); mystmt(stmt,rc); - fprintf(stdout, "\n tiny : %ld(%ld)", data[0], length[0]); - fprintf(stdout, "\n short : %ld(%ld)", data[1], length[1]); - fprintf(stdout, "\n int : %ld(%ld)", data[2], length[2]); - fprintf(stdout, "\n longlong : %ld(%ld)", data[3], length[3]); - fprintf(stdout, "\n float : %f(%ld)", f_data, length[4]); - fprintf(stdout, "\n double : %g(%ld)", d_data, length[5]); - fprintf(stdout, "\n char : %s(%ld)", s_data, length[6]); + fprintf(stdout, "\n tiny : %ld(%lu)", data[0], length[0]); + fprintf(stdout, "\n short : %ld(%lu)", data[1], length[1]); + fprintf(stdout, "\n int : %ld(%lu)", data[2], length[2]); + fprintf(stdout, "\n longlong : %ld(%lu)", data[3], length[3]); + fprintf(stdout, "\n float : %f(%lu)", f_data, length[4]); + fprintf(stdout, "\n double : %g(%lu)", d_data, length[5]); + fprintf(stdout, "\n char : %s(%lu)", s_data, length[6]); round= 0; bit= 1; @@ -2907,9 +2895,9 @@ static void test_fetch_str() round= (round+10)*10; { char buff[20]; - int len= sprintf(buff,"%d", round+3+i); + long len= my_sprintf(buff, (buff, "%d", round+3+i)); myassert(strcmp(s_data,buff)==0); - myassert(length[6] == len); + myassert(length[6] == (ulong) len); } rc = mysql_fetch(stmt); @@ -2924,16 +2912,18 @@ static void test_fetch_str() static void test_fetch_long() { MYSQL_STMT *stmt; - int rc, i, round, bit; - long data[10], length[10]; + int rc, i, round; + ulong bit; + long data[10]; float f_data; double d_data; char s_data[10]; + ulong length[10]; MYSQL_BIND bind[7]; + my_bool is_null[7]; myheader("test_fetch_long"); - init_bind(bind); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_bind_long"); myquery(rc); @@ -2961,7 +2951,8 @@ static void test_fetch_long() for (i=0; i < 7; i++) { bind[i].buffer_type= MYSQL_TYPE_LONG; - bind[i].buffer= (void *)&data[i]; + bind[i].buffer= (char *) &data[i]; + bind[i].is_null=0; data[i]= round+i+1; round= (round +10)*10; } @@ -2981,24 +2972,27 @@ static void test_fetch_long() stmt = mysql_prepare(mysql,"SELECT * FROM test_bind_long",50); myquery(rc); - for (i=0; i < 7; i++) - { - bind[i].buffer= (void *)&data[i]; - bind[i].length= (long *)&length[i]; - } bind[0].buffer_type= MYSQL_TYPE_TINY; bind[1].buffer_type= MYSQL_TYPE_SHORT; bind[2].buffer_type= MYSQL_TYPE_LONG; bind[3].buffer_type= MYSQL_TYPE_LONGLONG; bind[4].buffer_type= MYSQL_TYPE_FLOAT; - bind[4].buffer= (void *)&f_data; + bind[4].buffer= (char *)&f_data; bind[5].buffer_type= MYSQL_TYPE_DOUBLE; - bind[5].buffer= (void *)&d_data; + bind[5].buffer= (char *)&d_data; bind[6].buffer_type= MYSQL_TYPE_STRING; - bind[6].buffer= (void *)&s_data; + bind[6].buffer= (char *)&s_data; + bind[6].buffer_length= sizeof(s_data); + + for (i= 0; i < (int) array_elements(bind); i++) + { + bind[i].buffer= (char*) &data[i]; + bind[i].length= &length[i]; + bind[i].is_null= &is_null[i]; + } rc = mysql_bind_result(stmt, bind); mystmt(stmt, rc); @@ -3009,13 +3003,13 @@ static void test_fetch_long() rc = mysql_fetch(stmt); mystmt(stmt,rc); - fprintf(stdout, "\n tiny : %ld(%ld)", data[0], length[0]); - fprintf(stdout, "\n short : %ld(%ld)", data[1], length[1]); - fprintf(stdout, "\n int : %ld(%ld)", data[2], length[2]); - fprintf(stdout, "\n longlong : %ld(%ld)", data[3], length[3]); - fprintf(stdout, "\n float : %f(%ld)", f_data, length[4]); - fprintf(stdout, "\n double : %g(%ld)", d_data, length[5]); - fprintf(stdout, "\n char : %s(%ld)", s_data, length[6]); + fprintf(stdout, "\n tiny : %ld(%lu)", data[0], length[0]); + fprintf(stdout, "\n short : %ld(%lu)", data[1], length[1]); + fprintf(stdout, "\n int : %ld(%lu)", data[2], length[2]); + fprintf(stdout, "\n longlong : %ld(%lu)", data[3], length[3]); + fprintf(stdout, "\n float : %f(%lu)", f_data, length[4]); + fprintf(stdout, "\n double : %g(%lu)", d_data, length[5]); + fprintf(stdout, "\n char : %s(%lu)", s_data, length[6]); round= 0; bit= 1; @@ -3041,9 +3035,9 @@ static void test_fetch_long() round= (round+10)*10; { char buff[20]; - int len= sprintf(buff,"%d", round+3+i); + long len= my_sprintf(buff, (buff, "%d", round+3+i)); myassert(strcmp(s_data,buff)==0); - myassert(length[6] == len); + myassert(length[6] == (ulong) len); } rc = mysql_fetch(stmt); @@ -3052,22 +3046,29 @@ static void test_fetch_long() mysql_stmt_close(stmt); } + /******************************************************** * to test fetching of short to all types * *********************************************************/ static void test_fetch_short() { MYSQL_STMT *stmt; - int rc, i, round, bit; - long data[10], length[10]; + int rc, i, round; + ulong bit; + long data[10]; + char tiny_data; + short int short_data; + long long_data; + longlong longlong_data; float f_data; double d_data; char s_data[10]; MYSQL_BIND bind[7]; + ulong length[10]; + my_bool is_null[7]; myheader("test_fetch_short"); - init_bind(bind); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_bind_long"); myquery(rc); @@ -3092,10 +3093,12 @@ static void test_fetch_short() verify_param_count(stmt, 7); round= 0; - for (i=0; i < 7; i++) + for (i= 0; i < (int) array_elements(bind); i++) { bind[i].buffer_type= MYSQL_TYPE_LONG; - bind[i].buffer= (void *)&data[i]; + bind[i].buffer= (char *) &data[i]; + bind[i].length= &length[i]; + bind[i].is_null= 0; data[i]= round+i+1; round= (round +10)*2; } @@ -3117,22 +3120,27 @@ static void test_fetch_short() for (i=0; i < 7; i++) { - bind[i].buffer= (void *)&data[i]; - bind[i].length= (long *)&length[i]; + bind[i].length= &length[i]; + bind[i].is_null= &is_null[i]; } bind[0].buffer_type= MYSQL_TYPE_TINY; + bind[0].buffer= (char*) &tiny_data; bind[1].buffer_type= MYSQL_TYPE_SHORT; + bind[1].buffer= (char*) &short_data; bind[2].buffer_type= MYSQL_TYPE_LONG; + bind[1].buffer= (char*) &long_data; bind[3].buffer_type= MYSQL_TYPE_LONGLONG; + bind[1].buffer= (char*) &longlong_data; bind[4].buffer_type= MYSQL_TYPE_FLOAT; - bind[4].buffer= (void *)&f_data; + bind[4].buffer= (char *)&f_data; bind[5].buffer_type= MYSQL_TYPE_DOUBLE; - bind[5].buffer= (void *)&d_data; + bind[5].buffer= (char *)&d_data; bind[6].buffer_type= MYSQL_TYPE_STRING; - bind[6].buffer= (void *)&s_data; + bind[6].buffer= (char *)&s_data; + bind[6].buffer_length= sizeof(s_data); rc = mysql_bind_result(stmt, bind); mystmt(stmt, rc); @@ -3143,13 +3151,13 @@ static void test_fetch_short() rc = mysql_fetch(stmt); mystmt(stmt,rc); - fprintf(stdout, "\n tiny : %ld(%ld)", data[0], length[0]); - fprintf(stdout, "\n short : %ld(%ld)", data[1], length[1]); - fprintf(stdout, "\n int : %ld(%ld)", data[2], length[2]); - fprintf(stdout, "\n longlong : %ld(%ld)", data[3], length[3]); - fprintf(stdout, "\n float : %f(%ld)", f_data, length[4]); - fprintf(stdout, "\n double : %g(%ld)", d_data, length[5]); - fprintf(stdout, "\n char : %s(%ld)", s_data, length[6]); + fprintf(stdout, "\n tiny : %d(%lu)", tiny_data, length[0]); + fprintf(stdout, "\n short : %d(%lu)", short_data, length[1]); + fprintf(stdout, "\n int : %ld(%lu)", long_data, length[2]); + fprintf(stdout, "\n longlong : %ld(%lu)", (long) longlong_data, length[3]); + fprintf(stdout, "\n float : %f(%lu)", f_data, length[4]); + fprintf(stdout, "\n double : %g(%lu)", d_data, length[5]); + fprintf(stdout, "\n char : %s(%lu)", s_data, length[6]); round= 0; bit= 1; @@ -3175,9 +3183,9 @@ static void test_fetch_short() round= (round+10)*2; { char buff[20]; - int len= sprintf(buff,"%d", round+3+i); + long len= my_sprintf(buff, (buff, "%d", round+3+i)); myassert(strcmp(s_data,buff)==0); - myassert(length[6] == len); + myassert(length[6] == (ulong) len); } rc = mysql_fetch(stmt); @@ -3186,22 +3194,25 @@ static void test_fetch_short() mysql_stmt_close(stmt); } + /******************************************************** * to test fetching of tiny to all types * *********************************************************/ static void test_fetch_tiny() { MYSQL_STMT *stmt; - int rc, i, bit; - long data[10], length[10]; + int rc, i; + ulong bit; + long data[10]; + ulong length[10]; float f_data; double d_data; char s_data[10]; MYSQL_BIND bind[7]; + my_bool is_null[7]; myheader("test_fetch_tiny"); - init_bind(bind); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_bind_long"); myquery(rc); @@ -3226,10 +3237,11 @@ static void test_fetch_tiny() verify_param_count(stmt, 7); rc= 10; - for (i=0; i < 7; i++) + for (i= 0; i < (int) array_elements(bind); i++) { bind[i].buffer_type= MYSQL_TYPE_LONG; - bind[i].buffer= (void *)&data[i]; + bind[i].buffer= (char *) &data[i]; + bind[i].is_null= 0; data[i]= rc+i; rc+= 10; } @@ -3249,24 +3261,27 @@ static void test_fetch_tiny() stmt = mysql_prepare(mysql,"SELECT * FROM test_bind_long",50); myquery(rc); - for (i=0; i < 7; i++) + for (i= 0; i < (int) array_elements(bind); i++) { - bind[i].buffer= (void *)&data[i]; - bind[i].length= (long *)&length[i]; + bind[i].buffer= (char *) &data[i]; + bind[i].length= &length[i]; + bind[i].is_null= &is_null[i]; } + bind[0].buffer_type= MYSQL_TYPE_TINY; bind[1].buffer_type= MYSQL_TYPE_SHORT; bind[2].buffer_type= MYSQL_TYPE_LONG; bind[3].buffer_type= MYSQL_TYPE_LONGLONG; bind[4].buffer_type= MYSQL_TYPE_FLOAT; - bind[4].buffer= (void *)&f_data; + bind[4].buffer= (char *)&f_data; bind[5].buffer_type= MYSQL_TYPE_DOUBLE; - bind[5].buffer= (void *)&d_data; + bind[5].buffer= (char *)&d_data; bind[6].buffer_type= MYSQL_TYPE_STRING; - bind[6].buffer= (void *)&s_data; + bind[6].buffer= (char *)&s_data; + bind[6].buffer_length= sizeof(s_data); rc = mysql_bind_result(stmt, bind); mystmt(stmt, rc); @@ -3277,13 +3292,13 @@ static void test_fetch_tiny() rc = mysql_fetch(stmt); mystmt(stmt,rc); - fprintf(stdout, "\n tiny : %ld(%ld)", data[0], length[0]); - fprintf(stdout, "\n short : %ld(%ld)", data[1], length[1]); - fprintf(stdout, "\n int : %ld(%ld)", data[2], length[2]); - fprintf(stdout, "\n longlong : %ld(%ld)", data[3], length[3]); - fprintf(stdout, "\n float : %f(%ld)", f_data, length[4]); - fprintf(stdout, "\n double : %g(%ld)", d_data, length[5]); - fprintf(stdout, "\n char : %s(%ld)", s_data, length[6]); + fprintf(stdout, "\n tiny : %ld(%lu)", data[0], length[0]); + fprintf(stdout, "\n short : %ld(%lu)", data[1], length[1]); + fprintf(stdout, "\n int : %ld(%lu)", data[2], length[2]); + fprintf(stdout, "\n longlong : %ld(%lu)", data[3], length[3]); + fprintf(stdout, "\n float : %f(%lu)", f_data, length[4]); + fprintf(stdout, "\n double : %g(%lu)", d_data, length[5]); + fprintf(stdout, "\n char : %s(%lu)", s_data, length[6]); bit= 1; rc= 10; @@ -3309,9 +3324,9 @@ static void test_fetch_tiny() rc+= 11; { char buff[20]; - int len= sprintf(buff,"%d", rc); + long len= my_sprintf(buff, (buff, "%d", rc)); myassert(strcmp(s_data,buff)==0); - myassert(length[6] == len); + myassert(length[6] == (ulong) len); } rc = mysql_fetch(stmt); @@ -3320,22 +3335,25 @@ static void test_fetch_tiny() mysql_stmt_close(stmt); } + /******************************************************** * to test fetching of longlong to all types * *********************************************************/ static void test_fetch_bigint() { MYSQL_STMT *stmt; - int rc, i, round, bit; - long data[10], length[10]; + int rc, i, round; + ulong bit; + long data[10]; float f_data; double d_data; char s_data[10]; MYSQL_BIND bind[7]; + ulong length[7]; + my_bool is_null[7]; myheader("test_fetch_bigint"); - init_bind(bind); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_bind_long"); myquery(rc); @@ -3360,10 +3378,13 @@ static void test_fetch_bigint() verify_param_count(stmt, 7); round= 0; - for (i=0; i < 7; i++) + for (i= 0; i < (int) array_elements(bind); i++) { bind[i].buffer_type= MYSQL_TYPE_LONG; - bind[i].buffer= (void *)&data[i]; + bind[i].buffer= (char *)&data[i]; + bind[i].is_null = &is_null[i]; + bind[i].length= &length[i]; + length[i]= 0; data[i]= round+i+1; round= (round +10)*10; } @@ -3383,10 +3404,11 @@ static void test_fetch_bigint() stmt = mysql_prepare(mysql,"SELECT * FROM test_bind_long",50); myquery(rc); - for (i=0; i < 7; i++) + for (i= 0; i < (int) array_elements(bind); i++) { - bind[i].buffer= (void *)&data[i]; - bind[i].length= (long *)&length[i]; + bind[i].buffer= (char *)&data[i]; + bind[i].length= &length[i]; + bind[i].is_null= 0; } bind[0].buffer_type= MYSQL_TYPE_TINY; bind[1].buffer_type= MYSQL_TYPE_SHORT; @@ -3394,13 +3416,14 @@ static void test_fetch_bigint() bind[3].buffer_type= MYSQL_TYPE_LONGLONG; bind[4].buffer_type= MYSQL_TYPE_FLOAT; - bind[4].buffer= (void *)&f_data; + bind[4].buffer= (char *)&f_data; bind[5].buffer_type= MYSQL_TYPE_DOUBLE; - bind[5].buffer= (void *)&d_data; + bind[5].buffer= (char *)&d_data; bind[6].buffer_type= MYSQL_TYPE_STRING; - bind[6].buffer= (void *)&s_data; + bind[6].buffer= (char *)&s_data; + bind[6].buffer_length= sizeof(s_data); rc = mysql_bind_result(stmt, bind); mystmt(stmt, rc); @@ -3411,13 +3434,13 @@ static void test_fetch_bigint() rc = mysql_fetch(stmt); mystmt(stmt,rc); - fprintf(stdout, "\n tiny : %ld(%ld)", data[0], length[0]); - fprintf(stdout, "\n short : %ld(%ld)", data[1], length[1]); - fprintf(stdout, "\n int : %ld(%ld)", data[2], length[2]); - fprintf(stdout, "\n longlong : %ld(%ld)", data[3], length[3]); - fprintf(stdout, "\n float : %f(%ld)", f_data, length[4]); - fprintf(stdout, "\n double : %g(%ld)", d_data, length[5]); - fprintf(stdout, "\n char : %s(%ld)", s_data, length[6]); + fprintf(stdout, "\n tiny : %ld(%lu)", data[0], length[0]); + fprintf(stdout, "\n short : %ld(%lu)", data[1], length[1]); + fprintf(stdout, "\n int : %ld(%lu)", data[2], length[2]); + fprintf(stdout, "\n longlong : %ld(%lu)", data[3], length[3]); + fprintf(stdout, "\n float : %f(%lu)", f_data, length[4]); + fprintf(stdout, "\n double : %g(%lu)", d_data, length[5]); + fprintf(stdout, "\n char : %s(%lu)", s_data, length[6]); round= 0; bit= 1; @@ -3443,9 +3466,9 @@ static void test_fetch_bigint() round= (round+10)*10; { char buff[20]; - int len= sprintf(buff,"%d", round+3+i); + long len= my_sprintf(buff, (buff, "%d", round+3+i)); myassert(strcmp(s_data,buff)==0); - myassert(length[6] == len); + myassert(length[6] == (ulong) len); } rc = mysql_fetch(stmt); @@ -3454,22 +3477,25 @@ static void test_fetch_bigint() mysql_stmt_close(stmt); } + /******************************************************** * to test fetching of float to all types * *********************************************************/ static void test_fetch_float() { MYSQL_STMT *stmt; - int rc, i, round, bit; - long data[10], length[10]; + int rc, i, round; + ulong bit; + long data[10]; float f_data; double d_data; char s_data[10]; MYSQL_BIND bind[7]; + ulong length[10]; + my_bool is_null[7]; myheader("test_fetch_float"); - init_bind(bind); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_bind_long"); myquery(rc); @@ -3494,10 +3520,11 @@ static void test_fetch_float() verify_param_count(stmt, 7); round= 0; - for (i=0; i < 7; i++) + for (i= 0; i < (int) array_elements(bind); i++) { bind[i].buffer_type= MYSQL_TYPE_LONG; - bind[i].buffer= (void *)&data[i]; + bind[i].buffer= (char *)&data[i]; + bind[i].is_null= 0; data[i]= round+i+1; round= (round +10)*2; } @@ -3517,10 +3544,12 @@ static void test_fetch_float() stmt = mysql_prepare(mysql,"SELECT * FROM test_bind_long",50); myquery(rc); - for (i=0; i < 7; i++) + for (i= 0; i < (int) array_elements(bind); i++) { - bind[i].buffer= (void *)&data[i]; - bind[i].length= (long *)&length[i]; + bind[i].buffer= (char *)&data[i]; + bind[i].length= &length[i]; + bind[i].is_null= &is_null[i]; + length[i]=0; } bind[0].buffer_type= MYSQL_TYPE_TINY; bind[1].buffer_type= MYSQL_TYPE_SHORT; @@ -3528,13 +3557,14 @@ static void test_fetch_float() bind[3].buffer_type= MYSQL_TYPE_LONGLONG; bind[4].buffer_type= MYSQL_TYPE_FLOAT; - bind[4].buffer= (void *)&f_data; + bind[4].buffer= (char *)&f_data; bind[5].buffer_type= MYSQL_TYPE_DOUBLE; - bind[5].buffer= (void *)&d_data; + bind[5].buffer= (char *)&d_data; bind[6].buffer_type= MYSQL_TYPE_STRING; - bind[6].buffer= (void *)&s_data; + bind[6].buffer= (char *) &s_data; + bind[6].buffer_length= sizeof(s_data); rc = mysql_bind_result(stmt, bind); mystmt(stmt, rc); @@ -3545,13 +3575,13 @@ static void test_fetch_float() rc = mysql_fetch(stmt); mystmt(stmt,rc); - fprintf(stdout, "\n tiny : %ld(%ld)", data[0], length[0]); - fprintf(stdout, "\n short : %ld(%ld)", data[1], length[1]); - fprintf(stdout, "\n int : %ld(%ld)", data[2], length[2]); - fprintf(stdout, "\n longlong : %ld(%ld)", data[3], length[3]); - fprintf(stdout, "\n float : %f(%ld)", f_data, length[4]); - fprintf(stdout, "\n double : %g(%ld)", d_data, length[5]); - fprintf(stdout, "\n char : %s(%ld)", s_data, length[6]); + fprintf(stdout, "\n tiny : %ld(%lu)", data[0], length[0]); + fprintf(stdout, "\n short : %ld(%lu)", data[1], length[1]); + fprintf(stdout, "\n int : %ld(%lu)", data[2], length[2]); + fprintf(stdout, "\n longlong : %ld(%lu)", data[3], length[3]); + fprintf(stdout, "\n float : %f(%lu)", f_data, length[4]); + fprintf(stdout, "\n double : %g(%lu)", d_data, length[5]); + fprintf(stdout, "\n char : %s(%lu)", s_data, length[6]); round= 0; bit= 1; @@ -3577,9 +3607,9 @@ static void test_fetch_float() round= (round+10)*2; { char buff[20]; - int len= sprintf(buff,"%d", round+3+i); + long len= my_sprintf(buff, (buff, "%d", round+3+i)); myassert(strcmp(s_data,buff)==0); - myassert(length[6] == len); + myassert(length[6] == (ulong) len); } rc = mysql_fetch(stmt); @@ -3594,16 +3624,18 @@ static void test_fetch_float() static void test_fetch_double() { MYSQL_STMT *stmt; - int rc, i, round, bit; - long data[10], length[10]; + int rc, i, round; + ulong bit; + long data[10]; float f_data; double d_data; char s_data[10]; MYSQL_BIND bind[7]; + my_bool is_null[7]; + ulong length[7]; myheader("test_fetch_double"); - init_bind(bind); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_bind_long"); myquery(rc); @@ -3628,10 +3660,11 @@ static void test_fetch_double() verify_param_count(stmt, 7); round= 0; - for (i=0; i < 7; i++) + for (i= 0; i < (int) array_elements(bind); i++) { bind[i].buffer_type= MYSQL_TYPE_LONG; - bind[i].buffer= (void *)&data[i]; + bind[i].buffer= (char *)&data[i]; + bind[i].is_null= 0; data[i]= round+i+1; round= (round +10)*10; } @@ -3651,10 +3684,11 @@ static void test_fetch_double() stmt = mysql_prepare(mysql,"SELECT * FROM test_bind_long",50); myquery(rc); - for (i=0; i < 7; i++) + for (i= 0; i < (int) array_elements(bind); i++) { - bind[i].buffer= (void *)&data[i]; - bind[i].length= (long *)&length[i]; + bind[i].buffer= (char *)&data[i]; + bind[i].length= &length[i]; + bind[i].is_null= &is_null[i]; } bind[0].buffer_type= MYSQL_TYPE_TINY; bind[1].buffer_type= MYSQL_TYPE_SHORT; @@ -3662,13 +3696,14 @@ static void test_fetch_double() bind[3].buffer_type= MYSQL_TYPE_LONGLONG; bind[4].buffer_type= MYSQL_TYPE_STRING; - bind[4].buffer= (void *)&s_data; + bind[4].buffer= (char *)&s_data; + bind[4].buffer_length= sizeof(s_data); bind[5].buffer_type= MYSQL_TYPE_FLOAT; - bind[5].buffer= (void *)&f_data; + bind[5].buffer= (char *)&f_data; bind[6].buffer_type= MYSQL_TYPE_DOUBLE; - bind[6].buffer= (void *)&d_data; + bind[6].buffer= (char *)&d_data; rc = mysql_bind_result(stmt, bind); mystmt(stmt, rc); @@ -3679,13 +3714,13 @@ static void test_fetch_double() rc = mysql_fetch(stmt); mystmt(stmt,rc); - fprintf(stdout, "\n tiny : %ld(%ld)", data[0], length[0]); - fprintf(stdout, "\n short : %ld(%ld)", data[1], length[1]); - fprintf(stdout, "\n int : %ld(%ld)", data[2], length[2]); - fprintf(stdout, "\n longlong : %ld(%ld)", data[3], length[3]); - fprintf(stdout, "\n float : %f(%ld)", f_data, length[5]); - fprintf(stdout, "\n double : %g(%ld)", d_data, length[6]); - fprintf(stdout, "\n char : %s(%ld)", s_data, length[4]); + fprintf(stdout, "\n tiny : %ld(%lu)", data[0], length[0]); + fprintf(stdout, "\n short : %ld(%lu)", data[1], length[1]); + fprintf(stdout, "\n int : %ld(%lu)", data[2], length[2]); + fprintf(stdout, "\n longlong : %ld(%lu)", data[3], length[3]); + fprintf(stdout, "\n float : %f(%lu)", f_data, length[5]); + fprintf(stdout, "\n double : %g(%lu)", d_data, length[6]); + fprintf(stdout, "\n char : %s(%lu)", s_data, length[4]); round= 0; bit= 1; @@ -3700,9 +3735,9 @@ static void test_fetch_double() /* CHAR */ { char buff[20]; - int len= sprintf(buff,"%d", round+1+i); + long len= my_sprintf(buff, (buff, "%d", round+1+i)); myassert(strcmp(s_data,buff)==0); - myassert(length[4] == len); + myassert(length[4] == (ulong) len); } /* FLOAT */ @@ -3727,6 +3762,7 @@ static void test_fetch_double() static void test_prepare_ext() { MYSQL_STMT *stmt; + uint i; int rc; char *sql; int nData=1; @@ -3734,12 +3770,9 @@ static void test_prepare_ext() char tData=1; short sData=10; longlong bData=20; - MYSQL_BIND bind_int[6]; - + MYSQL_BIND bind[6]; myheader("test_prepare_ext"); - init_bind(bind_int); - rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_prepare_ext"); myquery(rc); @@ -3785,37 +3818,40 @@ static void test_prepare_ext() myquery(rc); /* insert by prepare - all integers */ - strcpy(query,(char *)"INSERT INTO test_prepare_ext(c1,c2,c3,c4,c5,c6) VALUES(?,?,?,?,?,?)"); + strmov(query,(char *)"INSERT INTO test_prepare_ext(c1,c2,c3,c4,c5,c6) VALUES(?,?,?,?,?,?)"); stmt = mysql_prepare(mysql,query, strlen(query)); myquery(rc); verify_param_count(stmt,6); /*tinyint*/ - bind_int[0].buffer_type=FIELD_TYPE_TINY; - bind_int[0].buffer= (void *)&tData; + bind[0].buffer_type=FIELD_TYPE_TINY; + bind[0].buffer= (char *)&tData; /*smallint*/ - bind_int[1].buffer_type=FIELD_TYPE_SHORT; - bind_int[1].buffer= (void *)&sData; + bind[1].buffer_type=FIELD_TYPE_SHORT; + bind[1].buffer= (char *)&sData; /*mediumint*/ - bind_int[2].buffer_type=FIELD_TYPE_LONG; - bind_int[2].buffer= (void *)&nData; + bind[2].buffer_type=FIELD_TYPE_LONG; + bind[2].buffer= (char *)&nData; /*int*/ - bind_int[3].buffer_type=FIELD_TYPE_LONG; - bind_int[3].buffer= (void *)&nData; + bind[3].buffer_type=FIELD_TYPE_LONG; + bind[3].buffer= (char *)&nData; /*integer*/ - bind_int[4].buffer_type=FIELD_TYPE_LONG; - bind_int[4].buffer= (void *)&nData; + bind[4].buffer_type=FIELD_TYPE_LONG; + bind[4].buffer= (char *)&nData; /*bigint*/ - bind_int[5].buffer_type=FIELD_TYPE_LONGLONG; - bind_int[5].buffer= (void *)&bData; + bind[5].buffer_type=FIELD_TYPE_LONGLONG; + bind[5].buffer= (char *)&bData; - rc = mysql_bind_param(stmt,bind_int); + for (i= 0; i < array_elements(bind); i++) + bind[i].is_null=0; + + rc = mysql_bind_param(stmt,bind); mystmt(stmt, rc); /* @@ -3846,7 +3882,6 @@ static void test_prepare_ext() - /******************************************************** * to test real and alias names * *********************************************************/ @@ -3876,7 +3911,7 @@ static void test_field_names() rc = mysql_commit(mysql); myquery(rc); - /* with table name included with true column name */ + /* with table name included with TRUE column name */ rc = mysql_query(mysql,"SELECT id as 'id-alias' FROM test_field_names1"); myquery(rc); @@ -3886,7 +3921,7 @@ static void test_field_names() myassert(0 == my_process_result_set(result)); mysql_free_result(result); - /* with table name included with true column name */ + /* with table name included with TRUE column name */ rc = mysql_query(mysql,"SELECT t1.id as 'id-alias',test_field_names2.name FROM test_field_names1 t1,test_field_names2"); myquery(rc); @@ -3945,16 +3980,17 @@ static void test_errors() static void test_insert() { MYSQL_STMT *stmt; - int rc, length; + int rc; char query[200]; char str_data[50]; char tiny_data; MYSQL_RES *result; MYSQL_BIND bind[2]; + ulong length[2]; myheader("test_insert"); - rc = mysql_autocommit(mysql, true); + rc = mysql_autocommit(mysql, TRUE); myquery(rc); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_prep_insert"); @@ -3969,7 +4005,7 @@ static void test_insert() /* insert by prepare */ bzero(bind, sizeof(bind)); - strcpy(query,"INSERT INTO test_prep_insert VALUES(?,?)"); + strmov(query,"INSERT INTO test_prep_insert VALUES(?,?)"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); @@ -3977,11 +4013,14 @@ static void test_insert() /* tinyint */ bind[0].buffer_type=FIELD_TYPE_TINY; - bind[0].buffer=(gptr)&tiny_data; + bind[0].buffer=(char *)&tiny_data; + bind[0].is_null= 0; + /* string */ bind[1].buffer_type=FIELD_TYPE_STRING; bind[1].buffer=str_data; - bind[1].length=(long *)&length; + bind[1].buffer_length=sizeof(str_data);; + bind[1].is_null= 0; rc = mysql_bind_param(stmt,bind); mystmt(stmt, rc); @@ -3989,7 +4028,7 @@ static void test_insert() /* now, execute the prepared statement to insert 10 records.. */ for (tiny_data=0; tiny_data < 3; tiny_data++) { - length = sprintf(str_data,"MySQL%d",tiny_data); + length[1] = my_sprintf(str_data, (str_data, "MySQL%d",tiny_data)); rc = mysql_execute(stmt); mystmt(stmt, rc); } @@ -4025,7 +4064,7 @@ static void test_prepare_resultset() myheader("test_prepare_resultset"); - rc = mysql_autocommit(mysql, true); + rc = mysql_autocommit(mysql, TRUE); myquery(rc); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_prepare_resultset"); @@ -4038,7 +4077,7 @@ static void test_prepare_resultset() name varchar(50),extra double)"); myquery(rc); - strcpy(query,"SELECT * FROM test_prepare_resultset"); + strmov(query,"SELECT * FROM test_prepare_resultset"); stmt = PREPARE(mysql, query); mystmt_init(stmt); @@ -4082,7 +4121,7 @@ static void test_field_flags() rc = mysql_commit(mysql); myquery(rc); - /* with table name included with true column name */ + /* with table name included with TRUE column name */ rc = mysql_query(mysql,"SELECT * FROM test_field_flags"); myquery(rc); @@ -4096,15 +4135,15 @@ static void test_field_flags() { field = mysql_fetch_field(result); fprintf(stdout,"\n field:%d",i); - if(field->flags & NOT_NULL_FLAG) + if (field->flags & NOT_NULL_FLAG) fprintf(stdout,"\n NOT_NULL_FLAG"); - if(field->flags & PRI_KEY_FLAG) + if (field->flags & PRI_KEY_FLAG) fprintf(stdout,"\n PRI_KEY_FLAG"); - if(field->flags & UNIQUE_KEY_FLAG) + if (field->flags & UNIQUE_KEY_FLAG) fprintf(stdout,"\n UNIQUE_KEY_FLAG"); - if(field->flags & MULTIPLE_KEY_FLAG) + if (field->flags & MULTIPLE_KEY_FLAG) fprintf(stdout,"\n MULTIPLE_KEY_FLAG"); - if(field->flags & AUTO_INCREMENT_FLAG) + if (field->flags & AUTO_INCREMENT_FLAG) fprintf(stdout,"\n AUTO_INCREMENT_FLAG"); } @@ -4118,7 +4157,7 @@ static void test_stmt_close() { MYSQL *lmysql; MYSQL_STMT *stmt1, *stmt2, *stmt3, *stmt_x; - MYSQL_BIND param[1]; + MYSQL_BIND bind[1]; MYSQL_RES *result; char query[100]; unsigned int count; @@ -4126,8 +4165,7 @@ static void test_stmt_close() myheader("test_stmt_close"); - init_bind(param); - if(!(lmysql = mysql_init(NULL))) + if (!(lmysql = mysql_init(NULL))) { myerror("mysql_init() failed"); exit(0); @@ -4140,32 +4178,32 @@ static void test_stmt_close() exit(0); } if (opt_db) - strcpy(current_db,opt_db); + strmov(current_db,opt_db); /* set AUTOCOMMIT to ON*/ - mysql_autocommit(lmysql, true); + mysql_autocommit(lmysql, TRUE); mysql_query(lmysql,"DROP TABLE IF EXISTS test_stmt_close"); mysql_query(lmysql,"CREATE TABLE test_stmt_close(id int)"); - strcpy(query,"ALTER TABLE test_stmt_close ADD name varchar(20)"); + strmov(query,"ALTER TABLE test_stmt_close ADD name varchar(20)"); stmt1= PREPARE(lmysql, query); mystmt_init(stmt1); count= mysql_param_count(stmt1); fprintf(stdout,"\n total params in alter: %d", count); myassert(count == 0); - strcpy(query,"INSERT INTO test_stmt_close(id) VALUES(?)"); + strmov(query,"INSERT INTO test_stmt_close(id) VALUES(?)"); stmt_x= PREPARE(mysql, query); mystmt_init(stmt_x); count= mysql_param_count(stmt_x); fprintf(stdout,"\n total params in insert: %d", count); myassert(count == 1); - strcpy(query,"UPDATE test_stmt_close SET id=? WHERE id=?"); + strmov(query,"UPDATE test_stmt_close SET id=? WHERE id=?"); stmt3= PREPARE(lmysql, query); mystmt_init(stmt3); count= mysql_param_count(stmt3); fprintf(stdout,"\n total params in update: %d", count); myassert(count == 2); - strcpy(query,"SELECT * FROM test_stmt_close WHERE id=?"); + strmov(query,"SELECT * FROM test_stmt_close WHERE id=?"); stmt2= PREPARE(lmysql, query); mystmt_init(stmt2); count= mysql_param_count(stmt2); @@ -4186,9 +4224,11 @@ static void test_stmt_close() #endif count= 100; - param[0].buffer=(gptr)&count; - param[0].buffer_type=MYSQL_TYPE_LONG; - rc = mysql_bind_param(stmt_x, param); + bind[0].buffer=(char *)&count; + bind[0].buffer_type=MYSQL_TYPE_LONG; + bind[0].is_null=0; + + rc = mysql_bind_param(stmt_x, bind); mystmt(stmt_x, rc); rc = mysql_execute(stmt_x); mystmt(stmt_x, rc); @@ -4212,6 +4252,7 @@ static void test_stmt_close() mysql_free_result(result); } + /******************************************************** * To test simple set-variable prepare * *********************************************************/ @@ -4226,10 +4267,10 @@ static void test_set_variable() myheader("test_set_variable"); - rc = mysql_autocommit(mysql, true); + rc = mysql_autocommit(mysql, TRUE); myquery(rc); - strcpy(query,"SET GLOBAL delayed_insert_limit=?"); + strmov(query,"SET GLOBAL delayed_insert_limit=?"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); @@ -4238,10 +4279,10 @@ static void test_set_variable() result= mysql_param_result(stmt); mytest_r(result); - init_bind(bind); bind[0].buffer_type= MYSQL_TYPE_LONG; - bind[0].buffer=(gptr)&select_limit; + bind[0].buffer=(char *)&select_limit; + bind[0].is_null=0; rc = mysql_bind_param(stmt, bind); mystmt(stmt,rc); @@ -4251,13 +4292,13 @@ static void test_set_variable() mysql_store_result(mysql); - strcpy(query,"show variables like 'delayed_insert_limit'"); + strmov(query,"show variables like 'delayed_insert_limit'"); rc = mysql_query(mysql,query); myquery(rc); verify_col_data(NullS, NullS, "88"); -#if TO_BE_FIXED +#ifdef TO_BE_FIXED select_limit= 100;/* reset to default */ rc= mysql_execute(stmt); @@ -4273,6 +4314,9 @@ static void test_set_variable() #endif mysql_stmt_close(stmt); } + + + #if NOT_USED /* Insert meta info .. */ static void test_insert_meta() @@ -4285,7 +4329,7 @@ static void test_insert_meta() myheader("test_insert_meta"); - rc = mysql_autocommit(mysql, true); + rc = mysql_autocommit(mysql, TRUE); myquery(rc); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_prep_insert"); @@ -4298,7 +4342,7 @@ static void test_insert_meta() col2 varchar(50), col3 varchar(30))"); myquery(rc); - strcpy(query,"INSERT INTO test_prep_insert VALUES(10,'venu1','test')"); + strmov(query,"INSERT INTO test_prep_insert VALUES(10,'venu1','test')"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); @@ -4307,7 +4351,7 @@ static void test_insert_meta() result= mysql_param_result(stmt); mytest_r(result); - strcpy(query,"INSERT INTO test_prep_insert VALUES(?,'venu',?)"); + strmov(query,"INSERT INTO test_prep_insert VALUES(?,'venu',?)"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); @@ -4347,7 +4391,7 @@ static void test_update_meta() myheader("test_update_meta"); - rc = mysql_autocommit(mysql, true); + rc = mysql_autocommit(mysql, TRUE); myquery(rc); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_prep_update"); @@ -4360,7 +4404,7 @@ static void test_update_meta() col2 varchar(50), col3 varchar(30))"); myquery(rc); - strcpy(query,"UPDATE test_prep_update SET col1=10, col2='venu1' WHERE col3='test'"); + strmov(query,"UPDATE test_prep_update SET col1=10, col2='venu1' WHERE col3='test'"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); @@ -4369,7 +4413,7 @@ static void test_update_meta() result= mysql_param_result(stmt); mytest_r(result); - strcpy(query,"UPDATE test_prep_update SET col1=?, col2='venu' WHERE col3=?"); + strmov(query,"UPDATE test_prep_update SET col1=?, col2='venu' WHERE col3=?"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); @@ -4413,7 +4457,7 @@ static void test_select_meta() myheader("test_select_meta"); - rc = mysql_autocommit(mysql, true); + rc = mysql_autocommit(mysql, TRUE); myquery(rc); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_prep_select"); @@ -4426,7 +4470,7 @@ static void test_select_meta() col2 varchar(50), col3 varchar(30))"); myquery(rc); - strcpy(query,"SELECT * FROM test_prep_select WHERE col1=10"); + strmov(query,"SELECT * FROM test_prep_select WHERE col1=10"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); @@ -4435,7 +4479,7 @@ static void test_select_meta() result= mysql_param_result(stmt); mytest_r(result); - strcpy(query,"SELECT col1, col3 from test_prep_select WHERE col1=? AND col3='test' AND col2= ?"); + strmov(query,"SELECT col1, col3 from test_prep_select WHERE col1=? AND col3='test' AND col2= ?"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); @@ -4469,6 +4513,7 @@ n } #endif + /* Test FUNCTION field info / DATE_FORMAT() table_name . */ static void test_func_fields() { @@ -4478,7 +4523,7 @@ static void test_func_fields() myheader("test_func_fields"); - rc = mysql_autocommit(mysql, true); + rc = mysql_autocommit(mysql, TRUE); myquery(rc); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_dateformat"); @@ -4548,16 +4593,17 @@ static void test_func_fields() mysql_free_result(result); } + /* Multiple stmts .. */ static void test_multi_stmt() { #if TO_BE_FIXED_IN_SERVER MYSQL_STMT *stmt, *stmt1; int rc, id; - long length; char name[50]={0}; MYSQL_BIND bind[2]; - + ulong length[2]; + my_bool is_null[2]; myheader("test_multi_stmt"); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_multi_table"); @@ -4574,14 +4620,15 @@ static void test_multi_stmt() verify_param_count(stmt,1); - init_bind(bind); - - bind[0].buffer_type = MYSQL_TYPE_SHORT; - bind[0].buffer = (void *)&id; + bind[0].buffer_type= MYSQL_TYPE_SHORT; + bind[0].buffer= (char *)&id; + bind[0].is_null= &is_null[0]; bind[1].buffer_type = MYSQL_TYPE_STRING; - bind[1].buffer = (void *)&name; - bind[1].length = &length;; + bind[1].buffer = (char *)&name; + bind[1].length = &length[1]; + bind[1].is_null= &is_null[0]; + rc = mysql_bind_param(stmt, bind); mystmt(stmt, rc); @@ -4598,7 +4645,7 @@ static void test_multi_stmt() mystmt(stmt, rc); fprintf(stdout, "\n int_data: %d", id); - fprintf(stdout, "\n str_data: %s(%d)", name, length); + fprintf(stdout, "\n str_data: %s(%lu)", name, length); myassert(id == 10); myassert(strcmp(name,"mysql")==0); @@ -4635,19 +4682,20 @@ static void test_multi_stmt() #endif } + /******************************************************** * to test simple sample - manual * *********************************************************/ static void test_manual_sample() { unsigned int param_count; - MYSQL_BIND bind[3]; MYSQL_STMT *stmt; short small_data; - int int_data; + int int_data, i; char str_data[50], query[255]; - long length; ulonglong affected_rows; + MYSQL_BIND bind[3]; + my_bool is_null[3]; myheader("test_manual_sample"); @@ -4673,8 +4721,8 @@ static void test_manual_sample() } /* Prepare a insert query with 3 parameters */ - strcpy(query, "INSERT INTO test_table(col1,col2,col3) values(?,?,?)"); - if(!(stmt = mysql_prepare(mysql,query,strlen(query)))) + strmov(query, "INSERT INTO test_table(col1,col2,col3) values(?,?,?)"); + if (!(stmt = mysql_prepare(mysql,query,strlen(query)))) { fprintf(stderr, "\n prepare, insert failed"); fprintf(stderr, "\n %s", mysql_error(mysql)); @@ -4697,17 +4745,22 @@ static void test_manual_sample() /* INTEGER PART */ memset(bind,0,sizeof(bind)); bind[0].buffer_type= MYSQL_TYPE_LONG; - bind[0].buffer= (void *)&int_data; - + bind[0].buffer= (char *)&int_data; + /* STRING PART */ bind[1].buffer_type= MYSQL_TYPE_VAR_STRING; - bind[1].buffer= (void *)str_data; + bind[1].buffer= (char *)str_data; bind[1].buffer_length= sizeof(str_data); /* SMALLINT PART */ bind[2].buffer_type= MYSQL_TYPE_SHORT; - bind[2].buffer= (void *)&small_data; - bind[2].length= (long *)&length; + bind[2].buffer= (char *)&small_data; + + for (i= 0; i < (int) array_elements(bind); i++) + { + bind[i].is_null= &is_null[i]; + is_null[i]=0; + } /* Bind the buffers */ if (mysql_bind_param(stmt, bind)) @@ -4719,9 +4772,9 @@ static void test_manual_sample() /* Specify the data */ int_data= 10; /* integer */ - strcpy(str_data,"MySQL"); /* string */ + strmov(str_data,"MySQL"); /* string */ /* INSERT SMALLINT data as NULL */ - length= MYSQL_NULL_DATA; + is_null[2]= 1; /* Execute the insert statement - 1*/ if (mysql_execute(stmt)) @@ -4743,9 +4796,9 @@ static void test_manual_sample() /* Re-execute the insert, by changing the values */ int_data= 1000; - strcpy(str_data,"The most popular open source database"); + strmov(str_data,"The most popular open source database"); small_data= 1000; /* smallint */ - length= 0; + is_null[2]= 0; /* Execute the insert statement - 2*/ if (mysql_execute(stmt)) @@ -4784,6 +4837,7 @@ static void test_manual_sample() fprintf(stdout, "Success !!!"); } + /******************************************************** * to test alter table scenario in the middle of prepare * *********************************************************/ @@ -4793,6 +4847,7 @@ static void test_prepare_alter() int rc, id; long length; MYSQL_BIND bind[1]; + my_bool is_null; myheader("test_prepare_alter"); @@ -4810,11 +4865,9 @@ static void test_prepare_alter() verify_param_count(stmt,1); - init_bind(bind); - bind[0].buffer_type= MYSQL_TYPE_SHORT; - bind[0].length= (long *)&length; - bind[0].buffer= (void *)&id; + bind[0].buffer= (char *)&id; + bind[0].is_null= &is_null; rc = mysql_bind_param(stmt, bind); mystmt(stmt, rc); @@ -4826,7 +4879,7 @@ static void test_prepare_alter() if (thread_query((char *)"ALTER TABLE test_prep_alter change id id_new varchar(20)")) exit(0); - length = MYSQL_NULL_DATA; + is_null=1; rc = mysql_execute(stmt); mystmt(stmt, rc); @@ -4862,7 +4915,7 @@ static void test_multi_query() rc = mysql_query(mysql, query); /* syntax error */ myquery_r(rc); - if(!(l_mysql = mysql_init(NULL))) + if (!(l_mysql = mysql_init(NULL))) { fprintf(stdout,"\n mysql_init() failed"); exit(1); @@ -4881,7 +4934,7 @@ static void test_multi_query() myquery(rc); count= 0; - while(mysql_more_results(mysql) && count < sizeof(rows)/sizeof(uint)) + while (mysql_more_results(mysql) && count < sizeof(rows)/sizeof(uint)) { fprintf(stdout,"\n query %d", count); if ((rc= mysql_next_result(mysql))) @@ -4897,6 +4950,7 @@ static void test_multi_query() mysql= org_mysql; } + /******************************************************** * to test simple bind store result * *********************************************************/ @@ -4905,13 +4959,14 @@ static void test_store_result() MYSQL_STMT *stmt; int rc; const char query[100]; - int nData, length, length1; + long nData; char szData[100]; MYSQL_BIND bind[2]; + ulong length, length1; + my_bool is_null[2]; myheader("test_store_result"); - init_bind(bind); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_store_result"); myquery(rc); @@ -4934,16 +4989,20 @@ static void test_store_result() myquery(rc); /* fetch */ - bind[0].buffer_type=FIELD_TYPE_LONG; - bind[0].buffer= (gptr) &nData; /* integer data */ - bind[0].length= (long *)&length; + bind[0].buffer= (char*) &nData; /* integer data */ + bind[0].length= &length; + bind[1].is_null= &is_null[1]; + + length= 0; bind[1].buffer_type=FIELD_TYPE_STRING; bind[1].buffer=szData; /* string data */ bind[1].buffer_length=sizeof(szData); - bind[1].length=(long *)&length1; + bind[1].length= &length1; + bind[1].is_null= &is_null[1]; + length1= 0; - strcpy((char *)query , "SELECT * FROM test_store_result"); + strmov((char *)query , "SELECT * FROM test_store_result"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); @@ -4959,7 +5018,7 @@ static void test_store_result() rc = mysql_fetch(stmt); mystmt(stmt,rc); - fprintf(stdout,"\n row 1: %d,%s(%d)",nData, szData, length1); + fprintf(stdout,"\n row 1: %ld,%s(%lu)", nData, szData, length1); myassert(nData == 10); myassert(strcmp(szData,"venu")==0); myassert(length1 == 4); @@ -4967,7 +5026,7 @@ static void test_store_result() rc = mysql_fetch(stmt); mystmt(stmt,rc); - fprintf(stdout,"\n row 2: %d,%s(%d)",nData, szData, length1); + fprintf(stdout,"\n row 2: %ld,%s(%lu)",nData, szData, length1); myassert(nData == 20); myassert(strcmp(szData,"mysql")==0); myassert(length1 == 5); @@ -4976,11 +5035,11 @@ static void test_store_result() rc = mysql_fetch(stmt); mystmt(stmt,rc); - if (length == MYSQL_NULL_DATA) - fprintf(stdout,"\n row 3: NULL,%s(%d)", szData, length1); + if (is_null[1]) + fprintf(stdout,"\n row 3: NULL,%s(%lu)", szData, length1); else - fprintf(stdout,"\n row 3: %d,%s(%d)", nData, szData, length1); - myassert(length == MYSQL_NULL_DATA); + fprintf(stdout,"\n row 3: %ld,%s(%lu)", nData, szData, length1); + myassert(is_null[1]); myassert(strcmp(szData,"monty")==0); myassert(length1 == 5); @@ -4996,7 +5055,7 @@ static void test_store_result() rc = mysql_fetch(stmt); mystmt(stmt,rc); - fprintf(stdout,"\n row 1: %d,%s(%d)",nData, szData, length1); + fprintf(stdout,"\n row 1: %ld,%s(%lu)",nData, szData, length1); myassert(nData == 10); myassert(strcmp(szData,"venu")==0); myassert(length1 == 4); @@ -5004,7 +5063,7 @@ static void test_store_result() rc = mysql_fetch(stmt); mystmt(stmt,rc); - fprintf(stdout,"\n row 2: %d,%s(%d)",nData, szData, length1); + fprintf(stdout,"\n row 2: %ld,%s(%lu)",nData, szData, length1); myassert(nData == 20); myassert(strcmp(szData,"mysql")==0); myassert(length1 == 5); @@ -5013,11 +5072,11 @@ static void test_store_result() rc = mysql_fetch(stmt); mystmt(stmt,rc); - if (length == MYSQL_NULL_DATA) - fprintf(stdout,"\n row 3: NULL,%s(%d)", szData, length1); + if (is_null[1]) + fprintf(stdout,"\n row 3: NULL,%s(%lu)", szData, length1); else - fprintf(stdout,"\n row 3: %d,%s(%d)", nData, szData, length1); - myassert(length == MYSQL_NULL_DATA); + fprintf(stdout,"\n row 3: %ld,%s(%lu)", nData, szData, length1); + myassert(is_null[1]); myassert(strcmp(szData,"monty")==0); myassert(length1 == 5); @@ -5027,6 +5086,7 @@ static void test_store_result() mysql_stmt_close(stmt); } + /******************************************************** * to test simple bind store result * *********************************************************/ @@ -5088,6 +5148,7 @@ static void test_store_result1() mysql_stmt_close(stmt); } + /******************************************************** * to test simple bind store result * *********************************************************/ @@ -5101,7 +5162,6 @@ static void test_store_result2() myheader("test_store_result2"); - init_bind(bind); rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_store_result"); myquery(rc); @@ -5126,10 +5186,12 @@ static void test_store_result2() /* fetch */ bind[0].buffer_type=FIELD_TYPE_LONG; - bind[0].buffer= (gptr) &nData; /* integer data */ + bind[0].buffer= (char *) &nData; /* integer data */ bind[0].length= &length; + bind[0].is_null= 0; + length= 0; - strcpy((char *)query , "SELECT col1 FROM test_store_result where col1= ?"); + strmov((char *)query , "SELECT col1 FROM test_store_result where col1= ?"); stmt = mysql_prepare(mysql, query, strlen(query)); mystmt_init(stmt); @@ -5176,6 +5238,7 @@ static void test_store_result2() mysql_stmt_close(stmt); } + /******************************************************** * to test simple subselect prepare * *********************************************************/ @@ -5185,13 +5248,11 @@ static void test_subselect() MYSQL_STMT *stmt; int rc; int id; - long length; + ulong length; MYSQL_BIND bind[1]; myheader("test_subselect"); - init_bind(bind); - rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_sub1"); myquery(rc); @@ -5222,10 +5283,12 @@ static void test_subselect() /* fetch */ bind[0].buffer_type=FIELD_TYPE_LONG; - bind[0].buffer= (gptr) &id; + bind[0].buffer= (char *) &id; bind[0].length= &length; + bind[0],is_null= 0; + length=0; - strcpy((char *)query , "SELECT ROW(1,7) IN (select id, id1 from test_sub2 WHERE id1=?)"); + strmov((char *)query , "SELECT ROW(1,7) IN (select id, id1 from test_sub2 WHERE id1=?)"); myassert(1 == my_stmt_result("SELECT ROW(1,7) IN (select id, id1 from test_sub2 WHERE id1=8)",100)); myassert(1 == my_stmt_result("SELECT ROW(1,7) IN (select id, id1 from test_sub2 WHERE id1=7)",100)); stmt = mysql_prepare(mysql, query, strlen(query)); @@ -5244,7 +5307,7 @@ static void test_subselect() rc = mysql_fetch(stmt); mystmt(stmt,rc); - fprintf(stdout,"\n row 1: %d(%ld)",id, length); + fprintf(stdout,"\n row 1: %d(%lu)",id, length); myassert(id == 1); rc = mysql_fetch(stmt); @@ -5259,21 +5322,21 @@ static struct my_option myctest_long_options[] = { {"help", '?', "Display this help and exit", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, - {"database", 'D', "Database to use", (gptr*) &opt_db, (gptr*) &opt_db, + {"database", 'D', "Database to use", (char **) &opt_db, (char **) &opt_db, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, - {"host", 'h', "Connect to host", (gptr*) &opt_host, (gptr*) &opt_host, 0, GET_STR_ALLOC, + {"host", 'h', "Connect to host", (char **) &opt_host, (char **) &opt_host, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"password", 'p', "Password to use when connecting to server. If password is not given it's asked from the tty.", 0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0}, #ifndef DONT_ALLOW_USER_CHANGE - {"user", 'u', "User for login if not current user", (gptr*) &opt_user, - (gptr*) &opt_user, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"user", 'u', "User for login if not current user", (char **) &opt_user, + (char **) &opt_user, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #endif - {"port", 'P', "Port number to use for connection", (gptr*) &opt_port, - (gptr*) &opt_port, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, - {"socket", 'S', "Socket file to use for connection", (gptr*) &opt_unix_socket, - (gptr*) &opt_unix_socket, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"port", 'P', "Port number to use for connection", (char **) &opt_port, + (char **) &opt_port, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"socket", 'S', "Socket file to use for connection", (char **) &opt_unix_socket, + (char **) &opt_unix_socket, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} }; |