Merge mysql.com:/misc/mysql/31177/50-31177

into  mysql.com:/misc/mysql/31177/51-31177
parents 69ed192e 31d4e58a
...@@ -754,9 +754,9 @@ static struct my_option my_long_options[] = ...@@ -754,9 +754,9 @@ static struct my_option my_long_options[] =
0, 0}, 0, 0},
{"max_allowed_packet", OPT_MAX_ALLOWED_PACKET, {"max_allowed_packet", OPT_MAX_ALLOWED_PACKET,
"Max packet length to send to, or receive from server", "Max packet length to send to, or receive from server",
(uchar**) &opt_max_allowed_packet, (uchar**) &opt_max_allowed_packet, 0, GET_ULONG, (uchar**) &opt_max_allowed_packet, (uchar**) &opt_max_allowed_packet, 0,
REQUIRED_ARG, 16 *1024L*1024L, 4096, (longlong) 2*1024L*1024L*1024L, GET_ULONG, REQUIRED_ARG, 16 *1024L*1024L, 4096,
MALLOC_OVERHEAD, 1024, 0}, (longlong) 2*1024L*1024L*1024L, MALLOC_OVERHEAD, 1024, 0},
{"net_buffer_length", OPT_NET_BUFFER_LENGTH, {"net_buffer_length", OPT_NET_BUFFER_LENGTH,
"Buffer for TCP/IP and socket communication", "Buffer for TCP/IP and socket communication",
(uchar**) &opt_net_buffer_length, (uchar**) &opt_net_buffer_length, 0, GET_ULONG, (uchar**) &opt_net_buffer_length, (uchar**) &opt_net_buffer_length, 0, GET_ULONG,
...@@ -764,12 +764,13 @@ static struct my_option my_long_options[] = ...@@ -764,12 +764,13 @@ static struct my_option my_long_options[] =
{"select_limit", OPT_SELECT_LIMIT, {"select_limit", OPT_SELECT_LIMIT,
"Automatic limit for SELECT when using --safe-updates", "Automatic limit for SELECT when using --safe-updates",
(uchar**) &select_limit, (uchar**) &select_limit,
(uchar**) &select_limit, 0, GET_ULONG, REQUIRED_ARG, 1000L, 1, ~0L, 0, 1, 0}, (uchar**) &select_limit, 0, GET_ULONG, REQUIRED_ARG, 1000L, 1, ULONG_MAX,
0, 1, 0},
{"max_join_size", OPT_MAX_JOIN_SIZE, {"max_join_size", OPT_MAX_JOIN_SIZE,
"Automatic limit for rows in a join when using --safe-updates", "Automatic limit for rows in a join when using --safe-updates",
(uchar**) &max_join_size, (uchar**) &max_join_size,
(uchar**) &max_join_size, 0, GET_ULONG, REQUIRED_ARG, 1000000L, 1, ~0L, 0, 1, (uchar**) &max_join_size, 0, GET_ULONG, REQUIRED_ARG, 1000000L, 1, ULONG_MAX,
0}, 0, 1, 0},
{"secure-auth", OPT_SECURE_AUTH, "Refuse client connecting to server if it" {"secure-auth", OPT_SECURE_AUTH, "Refuse client connecting to server if it"
" uses old (pre-4.1.1) protocol", (uchar**) &opt_secure_auth, " uses old (pre-4.1.1) protocol", (uchar**) &opt_secure_auth,
(uchar**) &opt_secure_auth, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, (uchar**) &opt_secure_auth, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
......
...@@ -5050,7 +5050,7 @@ static struct my_option my_long_options[] = ...@@ -5050,7 +5050,7 @@ static struct my_option my_long_options[] =
"Don't use the memory allocation checking.", 0, 0, 0, GET_NO_ARG, NO_ARG, "Don't use the memory allocation checking.", 0, 0, 0, GET_NO_ARG, NO_ARG,
0, 0, 0, 0, 0, 0}, 0, 0, 0, 0, 0, 0},
{"sleep", 'T', "Sleep always this many seconds on sleep commands.", {"sleep", 'T', "Sleep always this many seconds on sleep commands.",
(uchar**) &opt_sleep, (uchar**) &opt_sleep, 0, GET_INT, REQUIRED_ARG, -1, 0, 0, (uchar**) &opt_sleep, (uchar**) &opt_sleep, 0, GET_INT, REQUIRED_ARG, -1, -1, 0,
0, 0, 0}, 0, 0, 0},
{"socket", 'S', "Socket file to use for connection.", {"socket", 'S', "Socket file to use for connection.",
(uchar**) &unix_sock, (uchar**) &unix_sock, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, (uchar**) &unix_sock, (uchar**) &unix_sock, 0, GET_STR, REQUIRED_ARG, 0, 0, 0,
......
...@@ -200,6 +200,7 @@ double my_strtod(const char *str, char **end, int *error); ...@@ -200,6 +200,7 @@ double my_strtod(const char *str, char **end, int *error);
double my_atof(const char *nptr); double my_atof(const char *nptr);
extern char *llstr(longlong value,char *buff); extern char *llstr(longlong value,char *buff);
extern char *ullstr(longlong value,char *buff);
#ifndef HAVE_STRTOUL #ifndef HAVE_STRTOUL
extern long strtol(const char *str, char **ptr, int base); extern long strtol(const char *str, char **ptr, int base);
extern ulong strtoul(const char *str, char **ptr, int base); extern ulong strtoul(const char *str, char **ptr, int base);
......
...@@ -74,7 +74,8 @@ extern void my_print_variables(const struct my_option *options); ...@@ -74,7 +74,8 @@ extern void my_print_variables(const struct my_option *options);
extern void my_getopt_register_get_addr(uchar ** (*func_addr)(const char *, uint, extern void my_getopt_register_get_addr(uchar ** (*func_addr)(const char *, uint,
const struct my_option *)); const struct my_option *));
ulonglong getopt_ull_limit_value(ulonglong num, const struct my_option *optp); ulonglong getopt_ull_limit_value(ulonglong num, const struct my_option *optp,
bool *fixed);
my_bool getopt_compare_strings(const char *s, const char *t, uint length); my_bool getopt_compare_strings(const char *s, const char *t, uint length);
C_MODE_END C_MODE_END
......
...@@ -109,12 +109,20 @@ c1 ...@@ -109,12 +109,20 @@ c1
DROP TABLE t1; DROP TABLE t1;
SET @@auto_increment_offset= SET @@auto_increment_offset=
@bug20627_old_auto_increment_offset; @bug20627_old_auto_increment_offset;
Warnings:
Warning 1292 Truncated incorrect auto-increment-offset value: '0'
SET @@auto_increment_increment= SET @@auto_increment_increment=
@bug20627_old_auto_increment_increment; @bug20627_old_auto_increment_increment;
Warnings:
Warning 1292 Truncated incorrect auto-increment-increment value: '0'
SET @@session.auto_increment_offset= SET @@session.auto_increment_offset=
@bug20627_old_session_auto_increment_offset; @bug20627_old_session_auto_increment_offset;
Warnings:
Warning 1292 Truncated incorrect auto-increment-offset value: '0'
SET @@session.auto_increment_increment= SET @@session.auto_increment_increment=
@bug20627_old_session_auto_increment_increment; @bug20627_old_session_auto_increment_increment;
Warnings:
Warning 1292 Truncated incorrect auto-increment-increment value: '0'
SET @bug20830_old_auto_increment_offset= SET @bug20830_old_auto_increment_offset=
@@auto_increment_offset= 2; @@auto_increment_offset= 2;
SET @bug20830_old_auto_increment_increment= SET @bug20830_old_auto_increment_increment=
...@@ -237,12 +245,20 @@ SUM(c1) ...@@ -237,12 +245,20 @@ SUM(c1)
DROP TABLE t1; DROP TABLE t1;
SET @@auto_increment_offset= SET @@auto_increment_offset=
@bug20830_old_auto_increment_offset; @bug20830_old_auto_increment_offset;
Warnings:
Warning 1292 Truncated incorrect auto-increment-offset value: '0'
SET @@auto_increment_increment= SET @@auto_increment_increment=
@bug20830_old_auto_increment_increment; @bug20830_old_auto_increment_increment;
Warnings:
Warning 1292 Truncated incorrect auto-increment-increment value: '0'
SET @@session.auto_increment_offset= SET @@session.auto_increment_offset=
@bug20830_old_session_auto_increment_offset; @bug20830_old_session_auto_increment_offset;
Warnings:
Warning 1292 Truncated incorrect auto-increment-offset value: '0'
SET @@session.auto_increment_increment= SET @@session.auto_increment_increment=
@bug20830_old_session_auto_increment_increment; @bug20830_old_session_auto_increment_increment;
Warnings:
Warning 1292 Truncated incorrect auto-increment-increment value: '0'
CREATE TABLE t1(a BIT); CREATE TABLE t1(a BIT);
INSERT DELAYED INTO t1 VALUES(1); INSERT DELAYED INTO t1 VALUES(1);
FLUSH TABLE t1; FLUSH TABLE t1;
......
...@@ -1792,6 +1792,8 @@ show variables like "innodb_thread_concurrency"; ...@@ -1792,6 +1792,8 @@ show variables like "innodb_thread_concurrency";
Variable_name Value Variable_name Value
innodb_thread_concurrency 8 innodb_thread_concurrency 8
set global innodb_thread_concurrency=1001; set global innodb_thread_concurrency=1001;
Warnings:
Warning 1292 Truncated incorrect innodb_thread_concurrency value: '1001'
show variables like "innodb_thread_concurrency"; show variables like "innodb_thread_concurrency";
Variable_name Value Variable_name Value
innodb_thread_concurrency 1000 innodb_thread_concurrency 1000
...@@ -1811,6 +1813,8 @@ show variables like "innodb_concurrency_tickets"; ...@@ -1811,6 +1813,8 @@ show variables like "innodb_concurrency_tickets";
Variable_name Value Variable_name Value
innodb_concurrency_tickets 1000 innodb_concurrency_tickets 1000
set global innodb_concurrency_tickets=0; set global innodb_concurrency_tickets=0;
Warnings:
Warning 1292 Truncated incorrect innodb_concurrency_tickets value: '0'
show variables like "innodb_concurrency_tickets"; show variables like "innodb_concurrency_tickets";
Variable_name Value Variable_name Value
innodb_concurrency_tickets 1 innodb_concurrency_tickets 1
......
...@@ -673,6 +673,8 @@ INSERT INTO t1(b,c) SELECT b,c FROM t2; ...@@ -673,6 +673,8 @@ INSERT INTO t1(b,c) SELECT b,c FROM t2;
UPDATE t2 SET c='2007-01-03'; UPDATE t2 SET c='2007-01-03';
INSERT INTO t1(b,c) SELECT b,c FROM t2; INSERT INTO t1(b,c) SELECT b,c FROM t2;
set @@sort_buffer_size=8192; set @@sort_buffer_size=8192;
Warnings:
Warning 1292 Truncated incorrect sort_buffer_size value: '8192'
SELECT COUNT(*) FROM t1; SELECT COUNT(*) FROM t1;
COUNT(*) COUNT(*)
3072 3072
......
...@@ -276,6 +276,8 @@ Variable_name Value ...@@ -276,6 +276,8 @@ Variable_name Value
Key_blocks_unused KEY_BLOCKS_UNUSED Key_blocks_unused KEY_BLOCKS_UNUSED
set global keycache2.key_buffer_size=0; set global keycache2.key_buffer_size=0;
set global keycache3.key_buffer_size=100; set global keycache3.key_buffer_size=100;
Warnings:
Warning 1292 Truncated incorrect key_buffer_size value: '100'
set global keycache3.key_buffer_size=0; set global keycache3.key_buffer_size=0;
create table t1 (mytext text, FULLTEXT (mytext)); create table t1 (mytext text, FULLTEXT (mytext));
insert t1 values ('aaabbb'); insert t1 values ('aaabbb');
......
set global max_allowed_packet=100; set global max_allowed_packet=100;
Warnings:
Warning 1292 Truncated incorrect max_allowed_packet value: '100'
set max_allowed_packet=100; set max_allowed_packet=100;
Warnings:
Warning 1292 Truncated incorrect max_allowed_packet value: '100'
set global net_buffer_length=100; set global net_buffer_length=100;
Warnings:
Warning 1292 Truncated incorrect net_buffer_length value: '100'
set net_buffer_length=100; set net_buffer_length=100;
Warnings:
Warning 1292 Truncated incorrect net_buffer_length value: '100'
SELECT length("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") as len; SELECT length("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") as len;
len len
1024 1024
......
...@@ -807,6 +807,8 @@ select @@max_prepared_stmt_count; ...@@ -807,6 +807,8 @@ select @@max_prepared_stmt_count;
@@max_prepared_stmt_count @@max_prepared_stmt_count
0 0
set global max_prepared_stmt_count=10000000000000000; set global max_prepared_stmt_count=10000000000000000;
Warnings:
Warning 1292 Truncated incorrect max_prepared_stmt_count value: '10000000000000000'
select @@max_prepared_stmt_count; select @@max_prepared_stmt_count;
@@max_prepared_stmt_count @@max_prepared_stmt_count
1048576 1048576
......
...@@ -3666,6 +3666,8 @@ CREATE TABLE t1 (a int, b int auto_increment, PRIMARY KEY (b)); ...@@ -3666,6 +3666,8 @@ CREATE TABLE t1 (a int, b int auto_increment, PRIMARY KEY (b));
CREATE TABLE t2 (x int auto_increment, y int, z int, CREATE TABLE t2 (x int auto_increment, y int, z int,
PRIMARY KEY (x), FOREIGN KEY (y) REFERENCES t1 (b)); PRIMARY KEY (x), FOREIGN KEY (y) REFERENCES t1 (b));
SET SESSION sort_buffer_size = 32 * 1024; SET SESSION sort_buffer_size = 32 * 1024;
Warnings:
Warning 1292 Truncated incorrect sort_buffer_size value: '32768'
SELECT SQL_NO_CACHE COUNT(*) SELECT SQL_NO_CACHE COUNT(*)
FROM (SELECT a, b, (SELECT x FROM t2 WHERE y=b ORDER BY z DESC LIMIT 1) c FROM (SELECT a, b, (SELECT x FROM t2 WHERE y=b ORDER BY z DESC LIMIT 1) c
FROM t1) t; FROM t1) t;
...@@ -4101,6 +4103,8 @@ INSERT INTO `t1` VALUES ('asdf','2007-02-08 01:11:26'); ...@@ -4101,6 +4103,8 @@ INSERT INTO `t1` VALUES ('asdf','2007-02-08 01:11:26');
INSERT INTO `t2` VALUES ('abcdefghijk'); INSERT INTO `t2` VALUES ('abcdefghijk');
INSERT INTO `t2` VALUES ('asdf'); INSERT INTO `t2` VALUES ('asdf');
SET session sort_buffer_size=8192; SET session sort_buffer_size=8192;
Warnings:
Warning 1292 Truncated incorrect sort_buffer_size value: '8192'
SELECT (SELECT 1 FROM t1 WHERE t1.a=t2.a ORDER BY t1.b LIMIT 1) AS d1 FROM t2; SELECT (SELECT 1 FROM t1 WHERE t1.a=t2.a ORDER BY t1.b LIMIT 1) AS d1 FROM t2;
d1 d1
1 1
......
...@@ -269,6 +269,8 @@ a+0 b+0 ...@@ -269,6 +269,8 @@ a+0 b+0
56 379 56 379
68 454 68 454
set @@max_length_for_sort_data=0; set @@max_length_for_sort_data=0;
Warnings:
Warning 1292 Truncated incorrect max_length_for_sort_data value: '0'
select a+0, b+0 from t1 where a > 40 and a < 70 order by 2; select a+0, b+0 from t1 where a > 40 and a < 70 order by 2;
a+0 b+0 a+0 b+0
57 135 57 135
......
...@@ -269,6 +269,8 @@ a+0 b+0 ...@@ -269,6 +269,8 @@ a+0 b+0
56 379 56 379
68 454 68 454
set @@max_length_for_sort_data=0; set @@max_length_for_sort_data=0;
Warnings:
Warning 1292 Truncated incorrect max_length_for_sort_data value: '0'
select a+0, b+0 from t1 where a > 40 and a < 70 order by 2; select a+0, b+0 from t1 where a > 40 and a < 70 order by 2;
a+0 b+0 a+0 b+0
57 135 57 135
......
...@@ -141,7 +141,7 @@ set GLOBAL myisam_max_sort_file_size=2000000; ...@@ -141,7 +141,7 @@ set GLOBAL myisam_max_sort_file_size=2000000;
show global variables like 'myisam_max_sort_file_size'; show global variables like 'myisam_max_sort_file_size';
select * from information_schema.global_variables where variable_name like 'myisam_max_sort_file_size'; select * from information_schema.global_variables where variable_name like 'myisam_max_sort_file_size';
set GLOBAL myisam_max_sort_file_size=default; set GLOBAL myisam_max_sort_file_size=default;
--replace_result 2147483647 FILE_SIZE 9223372036854775807 FILE_SIZE --replace_result 2147482624 FILE_SIZE 2146435072 FILE_SIZE
show variables like 'myisam_max_sort_file_size'; show variables like 'myisam_max_sort_file_size';
--replace_result 2147483647 FILE_SIZE 9223372036854775807 FILE_SIZE --replace_result 2147483647 FILE_SIZE 9223372036854775807 FILE_SIZE
select * from information_schema.session_variables where variable_name like 'myisam_max_sort_file_size'; select * from information_schema.session_variables where variable_name like 'myisam_max_sort_file_size';
......
This diff is collapsed.
...@@ -266,7 +266,7 @@ class Default_object_creation_ctx : public Object_creation_ctx ...@@ -266,7 +266,7 @@ class Default_object_creation_ctx : public Object_creation_ctx
#define QUERY_ALLOC_PREALLOC_SIZE 8192 #define QUERY_ALLOC_PREALLOC_SIZE 8192
#define TRANS_ALLOC_BLOCK_SIZE 4096 #define TRANS_ALLOC_BLOCK_SIZE 4096
#define TRANS_ALLOC_PREALLOC_SIZE 4096 #define TRANS_ALLOC_PREALLOC_SIZE 4096
#define RANGE_ALLOC_BLOCK_SIZE 2048 #define RANGE_ALLOC_BLOCK_SIZE 4096
#define ACL_ALLOC_BLOCK_SIZE 1024 #define ACL_ALLOC_BLOCK_SIZE 1024
#define UDF_ALLOC_BLOCK_SIZE 1024 #define UDF_ALLOC_BLOCK_SIZE 1024
#define TABLE_ALLOC_BLOCK_SIZE 1024 #define TABLE_ALLOC_BLOCK_SIZE 1024
......
This diff is collapsed.
...@@ -120,6 +120,9 @@ static int check_max_delayed_threads(THD *thd, set_var *var); ...@@ -120,6 +120,9 @@ static int check_max_delayed_threads(THD *thd, set_var *var);
static void fix_thd_mem_root(THD *thd, enum_var_type type); static void fix_thd_mem_root(THD *thd, enum_var_type type);
static void fix_trans_mem_root(THD *thd, enum_var_type type); static void fix_trans_mem_root(THD *thd, enum_var_type type);
static void fix_server_id(THD *thd, enum_var_type type); static void fix_server_id(THD *thd, enum_var_type type);
static ulonglong fix_unsigned(THD *thd, ulonglong num,
const struct my_option *option_limits);
static void throw_bounds_warning(THD *thd, const char *name, ulonglong num);
static KEY_CACHE *create_key_cache(const char *name, uint length); static KEY_CACHE *create_key_cache(const char *name, uint length);
void fix_sql_mode_var(THD *thd, enum_var_type type); void fix_sql_mode_var(THD *thd, enum_var_type type);
static uchar *get_error_count(THD *thd); static uchar *get_error_count(THD *thd);
...@@ -1101,6 +1104,27 @@ static void fix_server_id(THD *thd, enum_var_type type) ...@@ -1101,6 +1104,27 @@ static void fix_server_id(THD *thd, enum_var_type type)
} }
static void throw_bounds_warning(THD *thd, const char *name, ulonglong num)
{
char buf[22];
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_TRUNCATED_WRONG_VALUE,
ER(ER_TRUNCATED_WRONG_VALUE), name,
ullstr(num, buf));
}
static ulonglong fix_unsigned(THD *thd, ulonglong num,
const struct my_option *option_limits)
{
bool fixed= FALSE;
ulonglong out= getopt_ull_limit_value(num, option_limits, &fixed);
if (fixed)
throw_bounds_warning(thd, option_limits->name, num);
return out;
}
sys_var_long_ptr:: sys_var_long_ptr::
sys_var_long_ptr(sys_var_chain *chain, const char *name_arg, ulong *value_ptr_arg, sys_var_long_ptr(sys_var_chain *chain, const char *name_arg, ulong *value_ptr_arg,
sys_after_update_func after_update_arg) sys_after_update_func after_update_arg)
...@@ -1121,9 +1145,20 @@ bool sys_var_long_ptr_global::update(THD *thd, set_var *var) ...@@ -1121,9 +1145,20 @@ bool sys_var_long_ptr_global::update(THD *thd, set_var *var)
ulonglong tmp= var->save_result.ulonglong_value; ulonglong tmp= var->save_result.ulonglong_value;
pthread_mutex_lock(guard); pthread_mutex_lock(guard);
if (option_limits) if (option_limits)
*value= (ulong) getopt_ull_limit_value(tmp, option_limits); *value= (ulong) fix_unsigned(thd, tmp, option_limits);
else else
{
#if SIZEOF_LONG < SIZEOF_LONG_LONG
/* Avoid overflows on 32 bit systems */
if (tmp > (ulonglong) ~(ulong) 0)
{
tmp= ((ulonglong) ~(ulong) 0);
throw_bounds_warning(thd, name, var->save_result.ulonglong_value);
}
#endif
*value= (ulong) tmp; *value= (ulong) tmp;
}
pthread_mutex_unlock(guard); pthread_mutex_unlock(guard);
return 0; return 0;
} }
...@@ -1142,7 +1177,7 @@ bool sys_var_ulonglong_ptr::update(THD *thd, set_var *var) ...@@ -1142,7 +1177,7 @@ bool sys_var_ulonglong_ptr::update(THD *thd, set_var *var)
ulonglong tmp= var->save_result.ulonglong_value; ulonglong tmp= var->save_result.ulonglong_value;
pthread_mutex_lock(&LOCK_global_system_variables); pthread_mutex_lock(&LOCK_global_system_variables);
if (option_limits) if (option_limits)
*value= (ulonglong) getopt_ull_limit_value(tmp, option_limits); *value= (ulonglong) fix_unsigned(thd, tmp, option_limits);
else else
*value= (ulonglong) tmp; *value= (ulonglong) tmp;
pthread_mutex_unlock(&LOCK_global_system_variables); pthread_mutex_unlock(&LOCK_global_system_variables);
...@@ -1192,38 +1227,29 @@ bool sys_var_thd_ulong::check(THD *thd, set_var *var) ...@@ -1192,38 +1227,29 @@ bool sys_var_thd_ulong::check(THD *thd, set_var *var)
bool sys_var_thd_ulong::update(THD *thd, set_var *var) bool sys_var_thd_ulong::update(THD *thd, set_var *var)
{ {
ulonglong tmp= var->save_result.ulonglong_value; ulonglong tmp= var->save_result.ulonglong_value;
char buf[22];
bool truncated= false;
/* Don't use bigger value than given with --maximum-variable-name=.. */ /* Don't use bigger value than given with --maximum-variable-name=.. */
if ((ulong) tmp > max_system_variables.*offset) if ((ulong) tmp > max_system_variables.*offset)
{ {
truncated= true; throw_bounds_warning(thd, name, tmp);
llstr(tmp, buf);
tmp= max_system_variables.*offset; tmp= max_system_variables.*offset;
} }
#if SIZEOF_LONG == 4 if (option_limits)
/* Avoid overflows on 32 bit systems */ tmp= (ulong) fix_unsigned(thd, tmp, option_limits);
if (tmp > (ulonglong) ~(ulong) 0) #if SIZEOF_LONG < SIZEOF_LONG_LONG
else if (tmp > (ulonglong) ~(ulong) 0)
{ {
truncated= true;
llstr(tmp, buf);
tmp= ((ulonglong) ~(ulong) 0); tmp= ((ulonglong) ~(ulong) 0);
throw_bounds_warning(thd, name, var->save_result.ulonglong_value);
} }
#endif #endif
if (truncated)
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_TRUNCATED_WRONG_VALUE,
ER(ER_TRUNCATED_WRONG_VALUE), name,
buf);
if (option_limits)
tmp= (ulong) getopt_ull_limit_value(tmp, option_limits);
if (var->type == OPT_GLOBAL) if (var->type == OPT_GLOBAL)
global_system_variables.*offset= (ulong) tmp; global_system_variables.*offset= (ulong) tmp;
else else
thd->variables.*offset= (ulong) tmp; thd->variables.*offset= (ulong) tmp;
return 0; return 0;
} }
...@@ -1258,7 +1284,7 @@ bool sys_var_thd_ha_rows::update(THD *thd, set_var *var) ...@@ -1258,7 +1284,7 @@ bool sys_var_thd_ha_rows::update(THD *thd, set_var *var)
tmp= max_system_variables.*offset; tmp= max_system_variables.*offset;
if (option_limits) if (option_limits)
tmp= (ha_rows) getopt_ull_limit_value(tmp, option_limits); tmp= (ha_rows) fix_unsigned(thd, tmp, option_limits);
if (var->type == OPT_GLOBAL) if (var->type == OPT_GLOBAL)
{ {
/* Lock is needed to make things safe on 32 bit systems */ /* Lock is needed to make things safe on 32 bit systems */
...@@ -1302,7 +1328,7 @@ bool sys_var_thd_ulonglong::update(THD *thd, set_var *var) ...@@ -1302,7 +1328,7 @@ bool sys_var_thd_ulonglong::update(THD *thd, set_var *var)
tmp= max_system_variables.*offset; tmp= max_system_variables.*offset;
if (option_limits) if (option_limits)
tmp= getopt_ull_limit_value(tmp, option_limits); tmp= fix_unsigned(thd, tmp, option_limits);
if (var->type == OPT_GLOBAL) if (var->type == OPT_GLOBAL)
{ {
/* Lock is needed to make things safe on 32 bit systems */ /* Lock is needed to make things safe on 32 bit systems */
...@@ -2012,7 +2038,7 @@ bool sys_var_key_buffer_size::update(THD *thd, set_var *var) ...@@ -2012,7 +2038,7 @@ bool sys_var_key_buffer_size::update(THD *thd, set_var *var)
} }
key_cache->param_buff_size= key_cache->param_buff_size=
(ulonglong) getopt_ull_limit_value(tmp, option_limits); (ulonglong) fix_unsigned(thd, tmp, option_limits);
/* If key cache didn't existed initialize it, else resize it */ /* If key cache didn't existed initialize it, else resize it */
key_cache->in_init= 1; key_cache->in_init= 1;
...@@ -2060,7 +2086,7 @@ bool sys_var_key_cache_long::update(THD *thd, set_var *var) ...@@ -2060,7 +2086,7 @@ bool sys_var_key_cache_long::update(THD *thd, set_var *var)
goto end; goto end;
*((ulong*) (((char*) key_cache) + offset))= *((ulong*) (((char*) key_cache) + offset))=
(ulong) getopt_ull_limit_value(tmp, option_limits); (ulong) fix_unsigned(thd, tmp, option_limits);
/* /*
Don't create a new key cache if it didn't exist Don't create a new key cache if it didn't exist
......
...@@ -32,3 +32,9 @@ char *llstr(longlong value,char *buff) ...@@ -32,3 +32,9 @@ char *llstr(longlong value,char *buff)
longlong10_to_str(value,buff,-10); longlong10_to_str(value,buff,-10);
return buff; return buff;
} }
char *ullstr(longlong value,char *buff)
{
longlong10_to_str(value,buff,10);
return buff;
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment