From: Magne Mahre Date: March 31 2009 4:47pm Subject: bzr commit into mysql-6.0 branch (magne.mahre:2759) Bug#38124 List-Archive: http://lists.mysql.com/commits/70931 X-Bug: 38124 Message-Id: <0KHD001F4QNQL100@bgo1sminn1.broadpark.no> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_8hkKLUrebebbULg94S/diw)" --Boundary_(ID_8hkKLUrebebbULg94S/diw) MIME-version: 1.0 Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7BIT Content-disposition: inline #At file:///data/z/mysql-6.0-runtime-fix38124/ based on revid:davi.arnaut@stripped 2759 Magne Mahre 2009-03-31 Bug #38124 "general_log_file" variable silently unset when using expression When assigning the new string value to the variable, the Item::str_value member was used. This is not according to the protocol. str_value is an internal member used for temporary assignments, and is not consistently set for all string operations. It is set for constant strings, so it would work in these cases, but not for string functions (concat, substr, etc.) The correct approach is to use Item::val_str(..) to evaluate and retrieve the string. modified: mysql-test/r/log_state.result mysql-test/t/log_state.test sql/set_var.cc === modified file 'mysql-test/r/log_state.result' --- a/mysql-test/r/log_state.result 2009-01-26 16:32:29 +0000 +++ b/mysql-test/r/log_state.result 2009-03-31 16:47:35 +0000 @@ -311,6 +311,30 @@ SET @@global.general_log_file = @old_gen SET @@global.slow_query_log = @old_slow_query_log; SET @@global.slow_query_log_file = @old_slow_query_log_file; End of 5.1 tests + +# -- +# -- Bug#38124: "general_log_file" variable silently unset when +# -- using expression +# -- +SET GLOBAL general_log_file = DEFAULT; +SELECT @@general_log_file INTO @my_glf; +SET GLOBAL general_log_file = 'BUG38124.LOG'; +SELECT @@general_log_file; +@@general_log_file +BUG38124.LOG +SET GLOBAL general_log_file = concat('BUG38124-2.LOG'); +SELECT @@general_log_file; +@@general_log_file +BUG38124-2.LOG +SET GLOBAL general_log_file = substr('BUG38124-2.LOG',3,6); +SELECT @@general_log_file; +@@general_log_file +G38124 +SET GLOBAL general_log_file = DEFAULT; +SELECT @@general_log_file = @my_glf; +@@general_log_file = @my_glf +1 +SET GLOBAL general_log_file = @old_general_log_file; # Close connection con1 SET global general_log = @old_general_log; SET global general_log_file = @old_general_log_file; === modified file 'mysql-test/t/log_state.test' --- a/mysql-test/t/log_state.test 2009-01-26 16:32:29 +0000 +++ b/mysql-test/t/log_state.test 2009-03-31 16:47:35 +0000 @@ -1,16 +1,5 @@ ### t/log_state.test ### # -# This test suffers from server -# Bug#38124 "general_log_file" variable silently unset when using expression -# In short: -# SET GLOBAL general_log_file = @ -# SET GLOBAL slow_query_log = @ -# cause that the value of these server system variables is set to default -# instead of the assigned values. There comes no error message or warning. -# If this bug is fixed please -# 1. try this test with "let $fixed_bug38124 = 0;" -# 2. remove all workarounds if 1. was successful. -let $fixed_bug38124 = 0; --source include/not_embedded.inc --source include/have_csv.inc @@ -166,16 +155,6 @@ SET @@global.general_log = @old_general_ SET @@global.general_log_file = @old_general_log_file; SET @@global.slow_query_log = @old_slow_query_log; SET @@global.slow_query_log_file = @old_slow_query_log_file; -if(!$fixed_bug38124) -{ - --disable_query_log - let $my_var = `SELECT @old_general_log_file`; - eval SET @@global.general_log_file = '$my_var'; - let $my_var = `SELECT @old_slow_query_log_file`; - eval SET @@global.slow_query_log_file = '$my_var'; - --enable_query_log -} - ########################################################################### @@ -278,15 +257,6 @@ SET GLOBAL slow_query_log_file= NULL; # Reset to initial values in case a setting above was successful. SET GLOBAL general_log_file= @old_general_log_file; SET GLOBAL slow_query_log_file= @old_slow_query_log_file; -if(!$fixed_bug38124) -{ - --disable_query_log - let $my_var = `SELECT @old_general_log_file`; - eval SET @@global.general_log_file = '$my_var'; - let $my_var = `SELECT @old_slow_query_log_file`; - eval SET @@global.slow_query_log_file = '$my_var'; - --enable_query_log -} ########################################################################### @@ -308,15 +278,6 @@ show variables like 'slow_query_log_file --echo SET GLOBAL general_log_file = @old_general_log_file; SET GLOBAL slow_query_log_file = @old_slow_query_log_file; -if(!$fixed_bug38124) -{ - --disable_query_log - let $my_var = `SELECT @old_general_log_file`; - eval SET @@global.general_log_file = '$my_var'; - let $my_var = `SELECT @old_slow_query_log_file`; - eval SET @@global.slow_query_log_file = '$my_var'; - --enable_query_log -} --echo --echo # -- End of Bug#32748. @@ -352,19 +313,43 @@ SET @@global.general_log = @old_general_ SET @@global.general_log_file = @old_general_log_file; SET @@global.slow_query_log = @old_slow_query_log; SET @@global.slow_query_log_file = @old_slow_query_log_file; -if(!$fixed_bug38124) -{ - --disable_query_log - let $my_var = `SELECT @old_general_log_file`; - eval SET @@global.general_log_file = '$my_var'; - let $my_var = `SELECT @old_slow_query_log_file`; - eval SET @@global.slow_query_log_file = '$my_var'; - --enable_query_log -} - --echo End of 5.1 tests + +########################################################################### + +--echo +--echo # -- +--echo # -- Bug#38124: "general_log_file" variable silently unset when +--echo # -- using expression +--echo # -- + +# Store away the special DEFAULT value so we +# can compare it later, then try to set the +# general_log_file using different functions +# and expressions. + +SET GLOBAL general_log_file = DEFAULT; +SELECT @@general_log_file INTO @my_glf; + +SET GLOBAL general_log_file = 'BUG38124.LOG'; +SELECT @@general_log_file; + +SET GLOBAL general_log_file = concat('BUG38124-2.LOG'); +SELECT @@general_log_file; + +SET GLOBAL general_log_file = substr('BUG38124-2.LOG',3,6); +SELECT @@general_log_file; + +SET GLOBAL general_log_file = DEFAULT; +SELECT @@general_log_file = @my_glf; + + +## Reset to initial values +SET GLOBAL general_log_file = @old_general_log_file; + + --enable_ps_protocol # @@ -381,15 +366,6 @@ SET global general_log = @old_general_lo SET global general_log_file = @old_general_log_file; SET global slow_query_log = @old_slow_query_log; SET global slow_query_log_file = @old_slow_query_log_file; -if(!$fixed_bug38124) -{ - --disable_query_log - let $my_var = `SELECT @old_general_log_file`; - eval SET @@global.general_log_file = '$my_var'; - let $my_var = `SELECT @old_slow_query_log_file`; - eval SET @@global.slow_query_log_file = '$my_var'; - --enable_query_log -} # Remove the log files that was created in the "default location" # i.e var/run === modified file 'sql/set_var.cc' --- a/sql/set_var.cc 2009-03-27 22:06:26 +0000 +++ b/sql/set_var.cc 2009-03-31 16:47:35 +0000 @@ -2676,9 +2676,20 @@ bool update_sys_var_str_path(THD *thd, s MYSQL_QUERY_LOG *file_log= 0; MYSQL_BACKUP_LOG *backup_log= 0; char buff[FN_REFLEN]; - char *res= 0, *old_value=(char *)(var ? var->value->str_value.ptr() : 0); + char *res= 0, *old_value= 0; bool result= 0; - uint str_length= (var ? var->value->str_value.length() : 0); + uint str_length= 0; + + if (var) + { + String str(buff, sizeof(buff), system_charset_info), *newval; + + newval= var->value->val_str(&str); + old_value= newval->c_ptr(); + str_length= strlen(old_value); + } + + /* Added support for backup log types. --Boundary_(ID_8hkKLUrebebbULg94S/diw) MIME-version: 1.0 Content-type: text/bzr-bundle; charset=us-ascii; name="bzr/magne.mahre@stripped" Content-transfer-encoding: 7BIT Content-disposition: inline; filename="bzr/magne.mahre@stripped" # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: magne.mahre@stripped # target_branch: file:///data/z/mysql-6.0-runtime-fix38124/ # testament_sha1: 4fa46dc7bd47e3173451059b76e333ebda09309a # timestamp: 2009-03-31 18:47:50 +0200 # base_revision_id: davi.arnaut@stripped\ # yonsevjt1833wt5o # # Begin bundle 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 5IpwoSDPI2H4 --Boundary_(ID_8hkKLUrebebbULg94S/diw)--