summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xBUILD/compile-pentium-max4
-rw-r--r--Makefile.am3
-rw-r--r--client/mysql.cc6
-rw-r--r--client/mysqlbinlog.cc15
-rw-r--r--cmd-line-utils/Makefile.am6
-rw-r--r--configure.in25
-rw-r--r--heap/_check.c2
-rw-r--r--include/config-win.h1
-rw-r--r--include/m_ctype.h98
-rw-r--r--include/my_list.h4
-rw-r--r--include/mysql.h32
-rw-r--r--include/violite.h3
-rw-r--r--innobase/dict/dict0dict.c3
-rw-r--r--innobase/dict/dict0load.c4
-rw-r--r--innobase/include/os0proc.h2
-rw-r--r--innobase/os/os0proc.c12
-rw-r--r--innobase/ut/ut0ut.c1
-rw-r--r--isam/pack_isam.c16
-rw-r--r--libmysql/libmysql.c144
-rw-r--r--libmysql/libmysql.def2
-rw-r--r--libmysqld/lib_sql.cc1
-rw-r--r--mysql-test/r/explain.result4
-rw-r--r--mysql-test/r/join.result10
-rw-r--r--mysys/my_once.c1
-rw-r--r--mysys/tree.c8
-rw-r--r--sql/field.cc7
-rw-r--r--sql/filesort.cc1
-rw-r--r--sql/ha_berkeley.cc1
-rw-r--r--sql/ha_innodb.cc1
-rw-r--r--sql/item.cc4
-rw-r--r--sql/item_cmpfunc.cc1
-rw-r--r--sql/item_func.cc1
-rw-r--r--sql/item_row.cc1
-rw-r--r--sql/item_strfunc.cc6
-rw-r--r--sql/item_subselect.cc2
-rw-r--r--sql/item_sum.cc2
-rw-r--r--sql/lex.h2
-rw-r--r--sql/lock.cc3
-rw-r--r--sql/log.cc1
-rw-r--r--sql/log_event.cc8
-rw-r--r--sql/mf_iocache.cc1
-rw-r--r--sql/mysql_priv.h1
-rw-r--r--sql/mysqld.cc1
-rw-r--r--sql/opt_range.cc2
-rw-r--r--sql/password.c14
-rw-r--r--sql/protocol.cc1
-rw-r--r--sql/set_var.cc4
-rw-r--r--sql/slave.cc1
-rw-r--r--sql/spatial.cc3
-rw-r--r--sql/sql_acl.cc1
-rw-r--r--sql/sql_base.cc1
-rw-r--r--sql/sql_cache.cc1
-rw-r--r--sql/sql_class.cc1
-rw-r--r--sql/sql_handler.cc1
-rw-r--r--sql/sql_help.cc4
-rw-r--r--sql/sql_lex.cc5
-rw-r--r--sql/sql_lex.h2
-rw-r--r--sql/sql_parse.cc1
-rw-r--r--sql/sql_prepare.cc1
-rw-r--r--sql/sql_repl.cc1
-rw-r--r--sql/sql_select.cc1
-rw-r--r--sql/sql_string.cc4
-rw-r--r--sql/sql_string.h2
-rw-r--r--sql/sql_table.cc1
-rw-r--r--sql/sql_yacc.yy13
-rw-r--r--strings/ctype-bin.c6
-rw-r--r--strings/ctype-mb.c1
-rw-r--r--strings/ctype.c4
-rw-r--r--tests/client_test.c1289
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= &param->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= &param->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= &param->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= &param->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= &param->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= &param->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= &param->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}
};