diff options
-rw-r--r-- | configure.in | 3 | ||||
-rw-r--r-- | extra/my_print_defaults.c | 2 | ||||
-rw-r--r-- | include/my_global.h | 2 | ||||
-rw-r--r-- | libmysql/client_settings.h | 6 | ||||
-rw-r--r-- | libmysql/libmysql.c | 10 | ||||
-rw-r--r-- | mysql-test/r/func_str.result | 15 | ||||
-rw-r--r-- | mysql-test/r/key_cache.result | 12 | ||||
-rw-r--r-- | mysql-test/t/func_str.test | 5 | ||||
-rw-r--r-- | mysql-test/t/key_cache.test | 16 | ||||
-rw-r--r-- | sql/item.cc | 23 | ||||
-rw-r--r-- | sql/item.h | 9 | ||||
-rw-r--r-- | sql/item_sum.h | 8 | ||||
-rw-r--r-- | sql/item_timefunc.cc | 2 | ||||
-rw-r--r-- | strings/ctype-simple.c | 28 | ||||
-rw-r--r-- | strings/ctype-ucs2.c | 29 |
15 files changed, 100 insertions, 70 deletions
diff --git a/configure.in b/configure.in index c9738ed63a3..7d7c477e0f2 100644 --- a/configure.in +++ b/configure.in @@ -1851,7 +1851,8 @@ AC_CHECK_FUNCS(alarm bcmp bfill bmove bzero chsize cuserid fchmod fcntl \ # isinf() could be a function or a macro (HPUX) AC_MSG_CHECKING(for isinf with <math.h>) AC_TRY_LINK([#include <math.h>], [float f = 0.0; isinf(f)], - AC_MSG_RESULT(yes) AC_DEFINE(HAVE_ISINF,,[isinf() macro or function]), + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_ISINF,,[isinf() macro or function]), AC_MSG_RESULT(no)) CFLAGS="$ORG_CFLAGS" diff --git a/extra/my_print_defaults.c b/extra/my_print_defaults.c index e580603bcb8..f4da839f8e2 100644 --- a/extra/my_print_defaults.c +++ b/extra/my_print_defaults.c @@ -49,7 +49,7 @@ static struct my_option my_long_options[] = {"help", '?', "Display this help message and exit.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, {"verbose", 'v', "Increase the output level", - 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, + 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, {"version", 'V', "Output version information and exit.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} diff --git a/include/my_global.h b/include/my_global.h index 7540897e6f4..e7d924eb0ca 100644 --- a/include/my_global.h +++ b/include/my_global.h @@ -674,7 +674,7 @@ typedef SOCKET_SIZE_TYPE size_socket; #define FLT_MAX ((float)3.40282346638528860e+38) #endif -#ifndef HAVE_ISINF +#if !defined(HAVE_ISINF) && !defined(isinf) #define isinf(X) 0 #endif diff --git a/libmysql/client_settings.h b/libmysql/client_settings.h index a9695801e65..1c1ff9bac10 100644 --- a/libmysql/client_settings.h +++ b/libmysql/client_settings.h @@ -62,10 +62,4 @@ int cli_read_change_user_result(MYSQL *mysql, char *buff, const char *passwd); #ifdef EMBEDDED_LIBRARY int init_embedded_server(int argc, char **argv, char **groups); void end_embedded_server(); - -#else -/* Prevent warnings of unused parameters */ -#define init_embedded_server(a,b,c) ((void)a, (void)b, (void)c, 0) -#define end_embedded_server() #endif /*EMBEDDED_LIBRARY*/ - diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 6ee2ba438bd..8903ae83f4b 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -113,7 +113,9 @@ static my_bool org_my_init_done= 0; 1 could not initialize environment (out of memory or thread keys) */ -int STDCALL mysql_server_init(int argc, char **argv, char **groups) +int STDCALL mysql_server_init(int argc __attribute__((unused)), + char **argv __attribute__((unused)), + char **groups __attribute__((unused))) { int result= 0; if (!mysql_client_init) @@ -152,7 +154,9 @@ int STDCALL mysql_server_init(int argc, char **argv, char **groups) #if defined(SIGPIPE) && !defined(__WIN__) (void) signal(SIGPIPE, SIG_IGN); #endif +#ifdef EMBEDDED_LIBRARY result= init_embedded_server(argc, argv, groups); +#endif } #ifdef THREAD else @@ -164,7 +168,9 @@ int STDCALL mysql_server_init(int argc, char **argv, char **groups) void STDCALL mysql_server_end() { +#ifdef EMBEDDED_LIBRARY end_embedded_server(); +#endif /* If library called my_init(), free memory allocated by it */ if (!org_my_init_done) { @@ -4054,7 +4060,9 @@ static void stmt_update_metadata(MYSQL_STMT *stmt, MYSQL_ROWS *data) MYSQL_FIELD *field; uchar *null_ptr, bit; uchar *row= (uchar*) data->data; +#ifndef DBUG_OFF uchar *row_end= row + data->length; +#endif null_ptr= row; row+= (stmt->field_count+9)/8; /* skip null bits */ diff --git a/mysql-test/r/func_str.result b/mysql-test/r/func_str.result index 9904242b3e0..216e2ed26f2 100644 --- a/mysql-test/r/func_str.result +++ b/mysql-test/r/func_str.result @@ -639,14 +639,21 @@ name aaaaaaaaaaccccc bbbbbbbbbbddddd drop table t1, t2; -create table t1 (c1 INT); -insert into t1 (c1) values ('21474836461'); +create table t1 (c1 INT, c2 INT UNSIGNED); +insert into t1 values ('21474836461','21474836461'); Warnings: Warning 1265 Data truncated for column 'c1' at row 1 +Warning 1265 Data truncated for column 'c2' at row 1 +insert into t1 values ('-21474836461','-21474836461'); +Warnings: +Warning 1265 Data truncated for column 'c1' at row 1 +Warning 1265 Data truncated for column 'c2' at row 1 show warnings; Level Code Message Warning 1265 Data truncated for column 'c1' at row 1 +Warning 1265 Data truncated for column 'c2' at row 1 select * from t1; -c1 -2147483647 +c1 c2 +2147483647 4294967295 +-2147483648 0 drop table t1; diff --git a/mysql-test/r/key_cache.result b/mysql-test/r/key_cache.result index eeb838dc72c..1580f51975e 100644 --- a/mysql-test/r/key_cache.result +++ b/mysql-test/r/key_cache.result @@ -88,11 +88,9 @@ create table t2 (p int primary key, i int, a char(10), key k1(i), key k2(a)); show status like 'key_blocks_used'; Variable_name Value Key_blocks_used 0 -show status like 'The below may fail on 64-bit systems (ingo)'; -Variable_name Value show status like 'key_blocks_unused'; Variable_name Value -Key_blocks_unused 1812 +Key_blocks_unused KEY_BLOCKS_UNUSED insert into t1 values (1, 'qqqq'), (11, 'yyyy'); insert into t2 values (1, 1, 'qqqq'), (2, 1, 'pppp'), (3, 1, 'yyyy'), (4, 3, 'zzzz'); @@ -111,11 +109,9 @@ update t2 set i=2 where i=1; show status like 'key_blocks_used'; Variable_name Value Key_blocks_used 4 -show status like 'The below may fail on 64-bit systems (ingo)'; -Variable_name Value show status like 'key_blocks_unused'; Variable_name Value -Key_blocks_unused 1808 +Key_blocks_unused KEY_BLOCKS_UNUSED cache index t1 key (`primary`) in keycache1; Table Op Msg_type Msg_text test.t1 assign_to_keycache status OK @@ -275,11 +271,9 @@ drop table t1,t2,t3; show status like 'key_blocks_used'; Variable_name Value Key_blocks_used 4 -show status like 'The below may fail on 64-bit systems (ingo)'; -Variable_name Value show status like 'key_blocks_unused'; Variable_name Value -Key_blocks_unused 1812 +Key_blocks_unused KEY_BLOCKS_UNUSED set global keycache2.key_buffer_size=0; set global keycache3.key_buffer_size=100; set global keycache3.key_buffer_size=0; diff --git a/mysql-test/t/func_str.test b/mysql-test/t/func_str.test index 24753c28073..c4413c3ef3f 100644 --- a/mysql-test/t/func_str.test +++ b/mysql-test/t/func_str.test @@ -385,8 +385,9 @@ drop table t1, t2; # Test case for conversion of long string value to integer (Bug #3472) # -create table t1 (c1 INT); -insert into t1 (c1) values ('21474836461'); +create table t1 (c1 INT, c2 INT UNSIGNED); +insert into t1 values ('21474836461','21474836461'); +insert into t1 values ('-21474836461','-21474836461'); show warnings; select * from t1; drop table t1; diff --git a/mysql-test/t/key_cache.test b/mysql-test/t/key_cache.test index ca846a31def..b45df8eb58e 100644 --- a/mysql-test/t/key_cache.test +++ b/mysql-test/t/key_cache.test @@ -67,8 +67,12 @@ create table t1 (p int primary key, a char(10)) delay_key_write=1; create table t2 (p int primary key, i int, a char(10), key k1(i), key k2(a)); show status like 'key_blocks_used'; -show status like 'The below may fail on 64-bit systems (ingo)'; -show status like 'key_blocks_unused'; # This may fail on 64-bit systems (ingo) + +# Following results differs on 64 and 32 bit systems because of different +# pointer sizes, which takes up different amount of space in key cache + +--replace_result 1812 KEY_BLOCKS_UNUSED 1793 KEY_BLOCKS_UNUSED +show status like 'key_blocks_unused'; insert into t1 values (1, 'qqqq'), (11, 'yyyy'); insert into t2 values (1, 1, 'qqqq'), (2, 1, 'pppp'), @@ -80,8 +84,8 @@ update t1 set p=2 where p=1; update t2 set i=2 where i=1; show status like 'key_blocks_used'; -show status like 'The below may fail on 64-bit systems (ingo)'; -show status like 'key_blocks_unused'; # This may fail on 64-bit systems (ingo) +--replace_result 1808 KEY_BLOCKS_UNUSED 1789 KEY_BLOCKS_UNUSED +show status like 'key_blocks_unused'; cache index t1 key (`primary`) in keycache1; @@ -142,8 +146,8 @@ cache index t1,t2 in default; drop table t1,t2,t3; show status like 'key_blocks_used'; -show status like 'The below may fail on 64-bit systems (ingo)'; -show status like 'key_blocks_unused'; # This may fail on 64-bit systems (ingo) +--replace_result 1812 KEY_BLOCKS_UNUSED 1793 KEY_BLOCKS_UNUSED +show status like 'key_blocks_unused'; # Cleanup # We don't reset keycache2 as we want to ensure that mysqld will reset it diff --git a/sql/item.cc b/sql/item.cc index 2dabb8e26ef..11a9e88bdd6 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -503,6 +503,22 @@ Item *Item_field::get_tmp_table_item(THD *thd) } +/* + Create an item from a string we KNOW points to a valid longlong/ulonglong + end \0 terminated number string +*/ + +Item_int::Item_int(const char *str_arg, uint length) +{ + char *end_ptr= (char*) str_arg + length; + int error; + value= my_strtoll10(str_arg, &end_ptr, &error); + max_length= (uint) (end_ptr - str_arg); + name= (char*) str_arg; + fixed= 1; +} + + String *Item_int::val_str(String *str) { // following assert is redundant, because fixed=1 assigned in constructor @@ -519,6 +535,13 @@ void Item_int::print(String *str) } +Item_uint::Item_uint(const char *str_arg, uint length): + Item_int(str_arg, length) +{ + unsigned_flag= 1; +} + + String *Item_uint::val_str(String *str) { // following assert is redundant, because fixed=1 assigned in constructor diff --git a/sql/item.h b/sql/item.h index 780e2fcadac..99a0516e439 100644 --- a/sql/item.h +++ b/sql/item.h @@ -456,10 +456,7 @@ public: #endif Item_int(const char *str_arg,longlong i,uint length) :value(i) { max_length=length; name=(char*) str_arg; fixed= 1; } - Item_int(const char *str_arg) : - value(str_arg[0] == '-' ? strtoll(str_arg,(char**) 0,10) : - (longlong) strtoull(str_arg,(char**) 0,10)) - { max_length= (uint) strlen(str_arg); name=(char*) str_arg; fixed= 1; } + Item_int(const char *str_arg, uint length=64); enum Type type() const { return INT_ITEM; } enum Item_result result_type () const { return INT_RESULT; } enum_field_types field_type() const { return MYSQL_TYPE_LONGLONG; } @@ -479,9 +476,7 @@ public: class Item_uint :public Item_int { public: - Item_uint(const char *str_arg, uint length) : - Item_int(str_arg, (longlong) strtoull(str_arg, (char**) 0,10), length) - { unsigned_flag= 1; } + Item_uint(const char *str_arg, uint length); Item_uint(uint32 i) :Item_int((longlong) i, 10) { unsigned_flag= 1; } double val() diff --git a/sql/item_sum.h b/sql/item_sum.h index d7753303f55..4cded41a9f6 100644 --- a/sql/item_sum.h +++ b/sql/item_sum.h @@ -735,8 +735,12 @@ class Item_func_group_concat : public Item_sum } longlong val_int() { - String *res; res=val_str(&str_value); - return res ? strtoll(res->c_ptr(),(char**) 0,10) : (longlong) 0; + String *res; + char *end_ptr; + int error; + res= val_str(&str_value); + end_ptr= (char*) res->ptr()+ res->length(); + return res ? my_strtoll10(res->ptr(), &end_ptr, &error) : (longlong) 0; } String* val_str(String* str); Item *copy_or_same(THD* thd); diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc index 0c0b5265db7..e8848243812 100644 --- a/sql/item_timefunc.cc +++ b/sql/item_timefunc.cc @@ -1666,7 +1666,7 @@ bool Item_date_add_interval::get_date(TIME *ltime, uint fuzzy_date) days--; sec+= 3600*LL(24); } - ltime->second_part= microseconds; + ltime->second_part= (uint) microseconds; ltime->second= (uint) (sec % 60); ltime->minute= (uint) (sec/60 % 60); ltime->hour= (uint) (sec/3600); diff --git a/strings/ctype-simple.c b/strings/ctype-simple.c index c8eb3c07a3f..ba1fc1c424a 100644 --- a/strings/ctype-simple.c +++ b/strings/ctype-simple.c @@ -235,9 +235,9 @@ long my_strntol_8bit(CHARSET_INFO *cs, char **endptr, int *err) { int negative; - register ulong cutoff; + register uint32 cutoff; register unsigned int cutlim; - register ulong i; + register uint32 i; register const char *s; register unsigned char c; const char *save, *e; @@ -297,8 +297,8 @@ long my_strntol_8bit(CHARSET_INFO *cs, #endif save = s; - cutoff = ((ulong)~0L) / (unsigned long int) base; - cutlim = (uint) (((ulong)~0L) % (unsigned long int) base); + cutoff = ((uint32)~0L) / (uint32) base; + cutlim = (uint) (((uint32)~0L) % (uint32) base); overflow = 0; i = 0; @@ -318,7 +318,7 @@ long my_strntol_8bit(CHARSET_INFO *cs, overflow = 1; else { - i *= (ulong) base; + i *= (uint32) base; i += c; } } @@ -331,16 +331,16 @@ long my_strntol_8bit(CHARSET_INFO *cs, if (negative) { - if (i > (ulong) LONG_MIN) + if (i > (uint32) INT_MIN32) overflow = 1; } - else if (i > (ulong) LONG_MAX) + else if (i > INT_MAX32) overflow = 1; if (overflow) { err[0]= ERANGE; - return negative ? LONG_MIN : LONG_MAX; + return negative ? INT_MIN32 : INT_MAX32; } return (negative ? -((long) i) : (long) i); @@ -358,9 +358,9 @@ ulong my_strntoul_8bit(CHARSET_INFO *cs, char **endptr, int *err) { int negative; - register ulong cutoff; + register uint32 cutoff; register unsigned int cutlim; - register ulong i; + register uint32 i; register const char *s; register unsigned char c; const char *save, *e; @@ -419,8 +419,8 @@ ulong my_strntoul_8bit(CHARSET_INFO *cs, #endif save = s; - cutoff = ((ulong)~0L) / (unsigned long int) base; - cutlim = (uint) (((ulong)~0L) % (unsigned long int) base); + cutoff = ((uint32)~0L) / (uint32) base; + cutlim = (uint) (((uint32)~0L) % (uint32) base); overflow = 0; i = 0; @@ -440,7 +440,7 @@ ulong my_strntoul_8bit(CHARSET_INFO *cs, overflow = 1; else { - i *= (ulong) base; + i *= (uint32) base; i += c; } } @@ -454,7 +454,7 @@ ulong my_strntoul_8bit(CHARSET_INFO *cs, if (overflow) { err[0]= ERANGE; - return ((ulong)~0L); + return (~(uint32) 0); } return (negative ? -((long) i) : (long) i); diff --git a/strings/ctype-ucs2.c b/strings/ctype-ucs2.c index 99d97a9614b..59c1706fd26 100644 --- a/strings/ctype-ucs2.c +++ b/strings/ctype-ucs2.c @@ -406,8 +406,8 @@ long my_strntol_ucs2(CHARSET_INFO *cs, int cnv; my_wc_t wc; register unsigned int cutlim; - register ulong cutoff; - register ulong res; + register uint32 cutoff; + register uint32 res; register const uchar *s= (const uchar*) nptr; register const uchar *e= (const uchar*) nptr+l; const uchar *save; @@ -446,8 +446,8 @@ bs: overflow = 0; res = 0; save = s; - cutoff = ((ulong)~0L) / (unsigned long int) base; - cutlim = (uint) (((ulong)~0L) % (unsigned long int) base); + cutoff = ((uint32)~0L) / (uint32) base; + cutlim = (uint) (((uint32)~0L) % (uint32) base); do { if ((cnv=cs->cset->mb_wc(cs,&wc,s,e))>0) @@ -467,7 +467,7 @@ bs: overflow = 1; else { - res *= (ulong) base; + res *= (uint32) base; res += wc; } } @@ -496,16 +496,16 @@ bs: if (negative) { - if (res > (ulong) LONG_MIN) + if (res > (uint32) INT_MIN32) overflow = 1; } - else if (res > (ulong) LONG_MAX) + else if (res > INT_MAX32) overflow = 1; if (overflow) { err[0]=ERANGE; - return negative ? LONG_MIN : LONG_MAX; + return negative ? INT_MIN32 : INT_MAX32; } return (negative ? -((long) res) : (long) res); @@ -521,8 +521,8 @@ ulong my_strntoul_ucs2(CHARSET_INFO *cs, int cnv; my_wc_t wc; register unsigned int cutlim; - register ulong cutoff; - register ulong res; + register uint32 cutoff; + register uint32 res; register const uchar *s= (const uchar*) nptr; register const uchar *e= (const uchar*) nptr+l; const uchar *save; @@ -561,8 +561,8 @@ bs: overflow = 0; res = 0; save = s; - cutoff = ((ulong)~0L) / (unsigned long int) base; - cutlim = (uint) (((ulong)~0L) % (unsigned long int) base); + cutoff = ((uint32)~0L) / (uint32) base; + cutlim = (uint) (((uint32)~0L) % (uint32) base); do { @@ -583,7 +583,7 @@ bs: overflow = 1; else { - res *= (ulong) base; + res *= (uint32) base; res += wc; } } @@ -613,11 +613,10 @@ bs: if (overflow) { err[0]=(ERANGE); - return ((ulong)~0L); + return (~(uint32) 0); } return (negative ? -((long) res) : (long) res); - } |