From d1fb6bbcc890955e634d644a002a707c3d8e7f67 Mon Sep 17 00:00:00 2001 From: "Tatiana A. Nurnberg" Date: Tue, 3 Feb 2009 02:43:32 +0100 Subject: Bug#40657: assertion with out of range variables and traditional sql_mode In STRICT mode, out-of-bounds values caused an error message to be queued (rather than just a warning), without any further error-like processing happening. (The error is queued during update, at which time it's too late. For it to be processed properly, it would need to be queued during check-stage.) The assertion rightfully complains that we're trying to send an OK while having an error queued. Changeset breaks a lot of tests out into check-stage. This also allows us to send more correct warnings/error messages. mysql-test/r/auto_increment_increment_basic.result: update test results reflecting more correct warnings mysql-test/r/auto_increment_increment_func.result: update test results reflecting more correct warnings mysql-test/r/auto_increment_offset_basic.result: update test results reflecting more correct warnings mysql-test/r/auto_increment_offset_func.result: update test results reflecting more correct warnings mysql-test/r/concurrent_insert_basic.result: update test results reflecting more correct warnings mysql-test/r/connect_timeout_basic.result: update test results reflecting more correct warnings mysql-test/r/default_week_format_basic.result: update test results reflecting more correct warnings mysql-test/r/delayed_insert_timeout_basic.result: update test results reflecting more correct warnings mysql-test/r/div_precision_increment_basic.result: update test results reflecting more correct warnings mysql-test/r/expire_logs_days_basic.result: update test results reflecting more correct warnings mysql-test/r/group_concat_max_len_basic.result: update test results reflecting more correct warnings mysql-test/r/interactive_timeout_basic.result: update test results reflecting more correct warnings mysql-test/r/max_allowed_packet_basic.result: update test results reflecting more correct warnings mysql-test/r/max_binlog_size_basic.result: update test results reflecting more correct warnings mysql-test/r/max_connections_basic.result: update test results reflecting more correct warnings mysql-test/r/max_delayed_threads_basic.result: update test results reflecting more correct warnings mysql-test/r/max_error_count_basic.result: update test results reflecting more correct warnings mysql-test/r/max_insert_delayed_threads_basic.result: update test results reflecting more correct warnings mysql-test/r/max_length_for_sort_data_basic.result: update test results reflecting more correct warnings mysql-test/r/max_prepared_stmt_count_basic.result: update test results reflecting more correct warnings mysql-test/r/max_relay_log_size_basic.result: update test results reflecting more correct warnings mysql-test/r/max_sort_length_basic.result: update test results reflecting more correct warnings mysql-test/r/max_sp_recursion_depth_basic.result: update test results reflecting more correct warnings mysql-test/r/myisam_data_pointer_size_basic.result: update test results reflecting more correct warnings mysql-test/r/net_buffer_length_basic.result: update test results reflecting more correct warnings mysql-test/r/net_read_timeout_basic.result: update test results reflecting more correct warnings mysql-test/r/net_write_timeout_basic.result: update test results reflecting more correct warnings mysql-test/r/optimizer_prune_level_basic.result: update test results reflecting more correct warnings mysql-test/r/optimizer_search_depth_basic.result: update test results reflecting more correct warnings mysql-test/r/preload_buffer_size_basic.result: update test results reflecting more correct warnings mysql-test/r/ps.result: update test results reflecting more correct warnings mysql-test/r/read_buffer_size_basic.result: update test results reflecting more correct warnings mysql-test/r/read_rnd_buffer_size_basic.result: update test results reflecting more correct warnings mysql-test/r/slave_net_timeout_basic.result: update test results reflecting more correct warnings mysql-test/r/slow_launch_time_basic.result: update test results reflecting more correct warnings mysql-test/r/table_definition_cache_basic.result: update test results reflecting more correct warnings mysql-test/r/table_lock_wait_timeout_basic.result: update test results reflecting more correct warnings mysql-test/r/table_open_cache_basic.result: update test results reflecting more correct warnings mysql-test/r/variables.result: add test case that throws error (rather than warning) in the middle of trying to set a system-variable. mysql-test/t/variables.test: add test case that throws error (rather than warning) in the middle of trying to set a system-variable. sql/set_var.cc: Add comments. Prevent double-warnings. Through warnings for negative values given to unsigned system-variables. Process errors and warnings at check() stage rather than update() stage, since we may only issue warnings at the latter. --- mysql-test/t/variables.test | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'mysql-test/t/variables.test') diff --git a/mysql-test/t/variables.test b/mysql-test/t/variables.test index 828cb3a2916..9b611558447 100644 --- a/mysql-test/t/variables.test +++ b/mysql-test/t/variables.test @@ -1077,3 +1077,38 @@ SET @@session.thread_stack= 7; --error ER_INCORRECT_GLOBAL_LOCAL_VAR SET @@global.thread_stack= 7; # + +# +# Bug #40657 - assertion with out of range variables and traditional sql_mode +# + +SELECT @@global.expire_logs_days INTO @old_eld; + +SET GLOBAL expire_logs_days = -1; +--echo needs to've been adjusted (0) +SELECT @@global.expire_logs_days; + +SET GLOBAL expire_logs_days = 11; +SET @old_mode=@@sql_mode; +SET SESSION sql_mode = 'TRADITIONAL'; +--error ER_WRONG_VALUE_FOR_VAR +SET GLOBAL expire_logs_days = 100; +--echo needs to be unchanged (11) +SELECT @@global.expire_logs_days; +SET SESSION sql_mode = @old_mode; + +SET GLOBAL expire_logs_days = 100; +--echo needs to've been adjusted (99) +SELECT @@global.expire_logs_days; + +SET GLOBAL expire_logs_days = 11; +SET GLOBAL expire_logs_days = 99; +--echo needs to pass with no warnings (99) +SELECT @@global.expire_logs_days; + +# cleanup +SET GLOBAL expire_logs_days = @old_eld; + + + +--echo End of 5.1 tests -- cgit v1.2.1 From 6877425f2f41717a329d757a5f98c57b4e0c1eb5 Mon Sep 17 00:00:00 2001 From: Patrick Crews Date: Thu, 26 Feb 2009 10:57:33 +0200 Subject: Bug#41893: main.variables mysql-test fails if new variable like '%alloc%' is added. Started fix in 5.0 as the same issue is here. Revising queries used given what appears to be the scope of this test to only select the manipulated variables. Added tests for values that are / are not multiples of 1024 to test rounding / constraints. This behavior is not currently documented (docs bug has been opened) --- mysql-test/t/variables.test | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) (limited to 'mysql-test/t/variables.test') diff --git a/mysql-test/t/variables.test b/mysql-test/t/variables.test index 60254ad9a1d..173be9d87c6 100644 --- a/mysql-test/t/variables.test +++ b/mysql-test/t/variables.test @@ -150,18 +150,46 @@ select @@timestamp>0; set @@rand_seed1=10000000,@@rand_seed2=1000000; select ROUND(RAND(),5); -show variables like '%alloc%'; -set @@range_alloc_block_size=1024*16; +--echo +--echo ==+ Testing %alloc% system variables +== +--echo ==+ NOTE: These values *must* be a multiple of 1024 +== +--echo ==+ Other values will be rounded down to nearest multiple +== +--echo +--echo ==+ Show initial values +== +SHOW VARIABLES WHERE variable_name IN ('range_alloc_block_size', +'query_alloc_block_size', 'query_prealloc_size', +'transaction_alloc_block_size', 'transaction_prealloc_size'); +--echo ==+ Manipulate variable values += +--echo Testing values that are multiples of 1024 +set @@range_alloc_block_size=1024*15+1024; +set @@query_alloc_block_size=1024*15+1024*2; +set @@query_prealloc_size=1024*18-1024; +set @@transaction_alloc_block_size=1024*21-1024*1; +set @@transaction_prealloc_size=1024*21-2048; +--echo ==+ Check manipulated values ==+ +SHOW VARIABLES WHERE variable_name IN ('range_alloc_block_size', +'query_alloc_block_size', 'query_prealloc_size', +'transaction_alloc_block_size', 'transaction_prealloc_size'); +--echo ==+ Manipulate variable values +== +--echo Testing values that are not 1024 multiples +set @@range_alloc_block_size=1024*16+1023; set @@query_alloc_block_size=1024*17+2; -set @@query_prealloc_size=1024*18; +set @@query_prealloc_size=1024*18-1023; set @@transaction_alloc_block_size=1024*20-1; set @@transaction_prealloc_size=1024*21-1; select @@query_alloc_block_size; -show variables like '%alloc%'; +--echo ==+ Check manipulated values ==+ +SHOW VARIABLES WHERE variable_name IN ('range_alloc_block_size', +'query_alloc_block_size', 'query_prealloc_size', +'transaction_alloc_block_size', 'transaction_prealloc_size'); +--echo ==+ Set values back to the default values +== set @@range_alloc_block_size=default; set @@query_alloc_block_size=default, @@query_prealloc_size=default; set transaction_alloc_block_size=default, @@transaction_prealloc_size=default; -show variables like '%alloc%'; +--echo ==+ Check the values not that they are reset +== +SHOW VARIABLES WHERE variable_name IN ('range_alloc_block_size', +'query_alloc_block_size', 'query_prealloc_size', +'transaction_alloc_block_size', 'transaction_prealloc_size'); # # Bug #10904 Illegal mix of collations between -- cgit v1.2.1 From afdf8a447f538a20f61fc4d7cea26975da53e973 Mon Sep 17 00:00:00 2001 From: Patrick Crews Date: Thu, 26 Feb 2009 18:00:47 +0200 Subject: Bug#41893 - main.variables mysql-test fails if new variable like '%alloc%' is added. Fixed a typo in the bug fix patch. --- mysql-test/t/variables.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mysql-test/t/variables.test') diff --git a/mysql-test/t/variables.test b/mysql-test/t/variables.test index 173be9d87c6..424776dfda4 100644 --- a/mysql-test/t/variables.test +++ b/mysql-test/t/variables.test @@ -186,7 +186,7 @@ SHOW VARIABLES WHERE variable_name IN ('range_alloc_block_size', set @@range_alloc_block_size=default; set @@query_alloc_block_size=default, @@query_prealloc_size=default; set transaction_alloc_block_size=default, @@transaction_prealloc_size=default; ---echo ==+ Check the values not that they are reset +== +--echo ==+ Check the values now that they are reset +== SHOW VARIABLES WHERE variable_name IN ('range_alloc_block_size', 'query_alloc_block_size', 'query_prealloc_size', 'transaction_alloc_block_size', 'transaction_prealloc_size'); -- cgit v1.2.1 From 1f847d1604b9430356133aa379fe242cfc687cc5 Mon Sep 17 00:00:00 2001 From: Patrick Crews Date: Fri, 27 Feb 2009 10:24:57 +0200 Subject: Bug#41893: main.variables mysql-test fails in new variable like '%alloc%' is added. Added ORDER BY clause to I_S query to ensure consistent order. There were differences between 5.1 and 6.0 output. Correcting it 5.1. --- mysql-test/t/variables.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mysql-test/t/variables.test') diff --git a/mysql-test/t/variables.test b/mysql-test/t/variables.test index 5cfa614f94a..6cd5abc3ea2 100644 --- a/mysql-test/t/variables.test +++ b/mysql-test/t/variables.test @@ -188,7 +188,7 @@ SHOW VARIABLES WHERE variable_name IN ('range_alloc_block_size', SELECT * FROM information_schema.session_variables WHERE variable_name IN ('range_alloc_block_size', 'query_alloc_block_size', 'query_prealloc_size', -'transaction_alloc_block_size', 'transaction_prealloc_size'); +'transaction_alloc_block_size', 'transaction_prealloc_size') ORDER BY 1; --echo Testing values that are multiples of 1024 set @@range_alloc_block_size=1024*15+1024; set @@query_alloc_block_size=1024*15+1024*2; -- cgit v1.2.1 From 3ef86918a20cb682bbc48b8f6e0848772d88f94c Mon Sep 17 00:00:00 2001 From: Sergey Glukhov Date: Thu, 5 Mar 2009 15:34:02 +0400 Subject: Bug#41030 Wrong meta data (incorrect fieldlen) set user variable max length on fix_length_and_dec() stage using real value length. mysql-test/r/variables.result: test result mysql-test/t/variables.test: test case sql/item_func.cc: set user variable max length on fix_length_and_dec() stage using real value length. --- mysql-test/t/variables.test | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'mysql-test/t/variables.test') diff --git a/mysql-test/t/variables.test b/mysql-test/t/variables.test index 6cd5abc3ea2..2797bb3c801 100644 --- a/mysql-test/t/variables.test +++ b/mysql-test/t/variables.test @@ -1121,3 +1121,10 @@ SET @@session.thread_stack= 7; --error ER_INCORRECT_GLOBAL_LOCAL_VAR SET @@global.thread_stack= 7; # + +# +# Bug#41030 Wrong meta data (incorrect fieldlen) +# +--enable_metadata +select @@storage_engine; +--disable_metadata -- cgit v1.2.1 From e7afab72459e7832fc22922e1e4838bc7f9a7cb1 Mon Sep 17 00:00:00 2001 From: "Tatiana A. Nurnberg" Date: Mon, 9 Mar 2009 15:26:53 +0100 Subject: Bug#40657: assertion with out of range variables and traditional sql_mode test-fixes for 32-bit mysql-test/t/variables.test: Test for 10351 ("Max_Heap_Table_Size cannot be set to 4 gb") now throws a warning on 32-bit, as it should. As we're not actually interested in the warning but only in whether the variable is set to a correct value afterwards, we disable warnings for the duration of that test case so we won't have to split the test into a 32-bit and a 64-bit flavour for no real reason. --- mysql-test/t/variables.test | 2 ++ 1 file changed, 2 insertions(+) (limited to 'mysql-test/t/variables.test') diff --git a/mysql-test/t/variables.test b/mysql-test/t/variables.test index db1e218b334..95f4d6e97c5 100644 --- a/mysql-test/t/variables.test +++ b/mysql-test/t/variables.test @@ -647,12 +647,14 @@ set @@global.error_count=1; # Bug #10351: Setting ulong variable to > MAX_ULONG fails on 32-bit platform # +--disable_warnings set @@max_heap_table_size= 4294967296; select @@max_heap_table_size > 0; set global max_heap_table_size= 4294967296; select @@max_heap_table_size > 0; set @@max_heap_table_size= 4294967296; select @@max_heap_table_size > 0; +--enable_warnings # # Bug #11775 Variable character_set_system does not exist (sometimes) -- cgit v1.2.1 From 402bc523b2105e31e9ac37eb94eb5b15c3ccf66a Mon Sep 17 00:00:00 2001 From: Davi Arnaut Date: Wed, 11 Mar 2009 17:30:56 -0300 Subject: Bug#36540: CREATE EVENT and ALTER EVENT statements fail with large server_id The problem is that creating a event could fail if the value of the variable server_id didn't fit in the originator column of the event system table. The cause is two-fold: it was possible to set server_id to a value outside the documented range (from 0 to 2^32-1) and the originator column of the event table didn't have enough room for values in this range. The log tables (general_log and slow_log) also don't have a proper column type to store the server_id and having a large server_id value could prevent queries from being logged. The solution is to ensure that all system tables that store the server_id value have a proper column type (int unsigned) and that the variable can't be set to a value that is not within the range. mysql-test/r/events_bugs.result: Add test case result for Bug#36540 mysql-test/r/log_tables.result: Update column type. mysql-test/r/system_mysql_db.result: Update column type. mysql-test/r/variables.result: Add test case result for server_id value range. mysql-test/suite/sys_vars/r/server_id_basic_64.result: Update test case results. mysql-test/t/events_bugs.test: Add test case for Bug#36540 mysql-test/t/log_tables.test: Fix column type. mysql-test/t/variables.test: Add test case for server_id value range. scripts/mysql_system_tables.sql: Columns that store the server_id value must be of type INT UNSIGNED, fix event (originator), general_log and slow_log (server_id) tables in accordance. scripts/mysql_system_tables_fix.sql: Columns that store the server_id value must be of type INT UNSIGNED, fix event (originator), general_log and slow_log (server_id) tables in accordance. sql/mysqld.cc: Set min and max values for the server_id variable. Unfortunately we can't easily change server_id variable type from ulong to uint32 because of the sys_var classes. --- mysql-test/t/variables.test | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'mysql-test/t/variables.test') diff --git a/mysql-test/t/variables.test b/mysql-test/t/variables.test index 95f4d6e97c5..7865a9d7b8e 100644 --- a/mysql-test/t/variables.test +++ b/mysql-test/t/variables.test @@ -1164,5 +1164,21 @@ SET GLOBAL expire_logs_days = @old_eld; select @@storage_engine; --disable_metadata +# +# Bug#36540: CREATE EVENT and ALTER EVENT statements fail with large server_id +# + +SET @old_server_id = @@GLOBAL.server_id; +SET GLOBAL server_id = (1 << 32) - 1; +SELECT @@GLOBAL.server_id; +SET GLOBAL server_id = (1 << 32); +SELECT @@GLOBAL.server_id; +SET GLOBAL server_id = (1 << 60); +SELECT @@GLOBAL.server_id; +SET GLOBAL server_id = 0; +SELECT @@GLOBAL.server_id; +SET GLOBAL server_id = -1; +SELECT @@GLOBAL.server_id; +SET GLOBAL server_id = @old_server_id; --echo End of 5.1 tests -- cgit v1.2.1 From 59fbffa45cc804bde74d504129eb705cd80b3bba Mon Sep 17 00:00:00 2001 From: "Tatiana A. Nurnberg" Date: Wed, 11 Mar 2009 23:32:53 +0100 Subject: Bug#40657: assertion with out of range variables and traditional sql_mode normalize error-messages mysql-test/r/variables.result: show that warning uses underscore (sysvar-name), not hyphens (option-name) mysql-test/t/variables.test: show that warning uses underscore (sysvar-name), not hyphens (option-name) sql/set_var.cc: normalize error-messages --- mysql-test/t/variables.test | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'mysql-test/t/variables.test') diff --git a/mysql-test/t/variables.test b/mysql-test/t/variables.test index 95f4d6e97c5..43169b22b5e 100644 --- a/mysql-test/t/variables.test +++ b/mysql-test/t/variables.test @@ -1155,6 +1155,11 @@ SELECT @@global.expire_logs_days; # cleanup SET GLOBAL expire_logs_days = @old_eld; +# show that warning uses underscore (sysvar-name), not hyphens (option-name) +SET GLOBAL auto_increment_offset=-1; +SET GLOBAL auto_increment_offset=0; + + # # Bug#41030 Wrong meta data (incorrect fieldlen) -- cgit v1.2.1