From: Magne Mahre Date: March 25 2009 10:27pm Subject: bzr commit into mysql-6.0 branch (magne.mahre:2749) Bug#38124 List-Archive: http://lists.mysql.com/commits/70450 X-Bug: 38124 Message-Id: <0KH300NYY2EP4Z90@bgo1sminn1.broadpark.no> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_x9s+jg6qUIr66SQnjSfy9Q)" --Boundary_(ID_x9s+jg6qUIr66SQnjSfy9Q) 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:alik@stripped 2749 Magne Mahre 2009-03-25 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. @ mysql-test/t/log_state.test The test hacks introduced to counter the effects of this bug has been removed. 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-25 22:27:46 +0000 @@ -311,6 +311,31 @@ 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 = '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; +@@general_log_file +/data/z/mysql-6.0-runtime-fix38124/mysql-test/var/run/mysqld.log +SET GLOBAL general_log_file = @old_general_log_file; +SELECT @@general_log_file; +@@general_log_file +/data/z/mysql-6.0-runtime-fix38124/mysql-test/var/mysqld.1/mysqld.log # 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-25 22:27:46 +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,36 @@ 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 # -- + +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; + + +## Reset to initial values +SET GLOBAL general_log_file = @old_general_log_file; +SELECT @@general_log_file; + + --enable_ps_protocol # @@ -381,15 +359,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-06 22:17:00 +0000 +++ b/sql/set_var.cc 2009-03-25 22:27:46 +0000 @@ -2592,9 +2592,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_x9s+jg6qUIr66SQnjSfy9Q) 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: 31636bb2bc36ee0985cc4b1c0d967456879fd73f # timestamp: 2009-03-25 23:28:00 +0100 # base_revision_id: alik@stripped # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWYVJrbgABFxfgEAwWff//3qm noC////6YAlX3vrctEtsoAh2rztXp5COretCp7Qkqk2U9NB6ofqDQ0ZqT1MgGEHkCMgaaBkk09TE aGlG9UNGgNAANAAAAHMCYmgwmTJkyMJgmmmRiYAhgEiIgmQpvSp+mKYNGqHozVGZIDQ9QzU0eoIp ST9TNVPCnmEp6aTanqYTYo9T1HpDQeoBoASSBDQTTCmNACKPU9pJo1GmNRkA08pc1qEIcYYgxUaG 1PBTf4Nm/WCw6qB42h2byff+wrFjMlLX3F7k61n/mcb1MGChqUZWmNtRJiQiif+cn5t0ZzLWF7wZ Dzz1yBwV1nCtbdpdY/Lh/ez47kvTZAsWKAuOUoIh1lcwzXbTPbxymXrA6w4vUwEEMQt/WzyRu+dm PCsy8ufquodM77nSrL6UmjLna7Hc1S+98mGyEfMRabxwjhAxdfls8n5fSBCmiNZRTHSA6h+Mwadd x99ML2ghrIqr42vgxX+1WVYhxZc8OSN6lbLKDrIIOUyD4X1/itiaqIAsVzbrY1Cm3LW622412Nsh fdap0VhWaczp68uvv785nmOp60Mu8NT3uWsQ88uT0a0ySf2tjb64GRsI858eImEG3IYb3Jzvu9lI 02TTr9/kNUq++XYqm6FVRsPYCYGaOSLOAyMwDoau6LL77EZqCrngIexJHoeth4VqiRtVvDyhDXu2 2hGbX80MdbFwQETAStGRtDaZy+2K/L6lhX60RQ/Sr15kdpnEGXPAQ+SiKy9aiVNfXGtaGJEnMF9M 1hQSfUikIuRMULmMopAMKnIFuIyp2nE3UEZImwTJ1vjbcU+1p85EFChrwUWVZQagbRtexHoodEhp Yc4CtRkCGKjAI8RNlFIlN0mlxDpcsQZrSPoVuzZXzPJg+xCsYBSB00W4CIEUmRUSHBO0ZC2MjOul Cy/F4ojQKxHeCgPKysgLM1n8b15lGrHpVYwO+FvxL0bMcdZx2mqq0YZhtOjSYIVpKKmge07iINHU Sywh8scM4ZPv4sD0HDPKVrKeJfuEeF4O4jdSIvlYtuCYuybavRyNzIwDB2axEax0elYikmTHJxWT YfAeXnpYD5lYw/aQXmRHT2XjQt1RsavQijlNYLAcIkYn0cVF56XlBG1wSG8rzWSNRrNzpRXIlPqM C3qhxPRDFjWsTHkEPbGY9aik6zIpiNC3HfmPhgbLjsORE5Ep/LevqfBVRMmrzdisKx5GBaUG39ba yAiRnXvPK4g4x9qXI1XlRcbC8y9RjVpCmmsHAETt2wIHDDAyLDoFbsbXEwoIDTW2ErmpGImoAmVE BQhEkPKciBW8KSl1JI2SPC8CKyRS3MugPpbS+SYBirVhGItVr9RjbCfgoFt8JJmJcHvVMIA/Rrab 8rJE4gwk6XkPMRx2UlrwUkNLo/gN+eaxLsc9tRmlGgR5JJlbDP+SkR2CGWjbbH5iHsBs+XLmIEU+ Ij6Aj8bgKf6BakQ/mJUJ7xO4C2WAQikE394lQl7plWBe1/AV4me9bU4GYXM6iS/lCPDv0gKYFA6k mnIkB7FWskQd2w9AWcNngntLKHGP7uUiFLcHtZCsGnQQuggkjJ9DbroPd8qErxGscHSNc3fz4THl 70xtP1YBYhoPRsF8c41yGEnsFA4vjBxQQCIrZyhauksS9iAlQuyko5qQ2Mj6h4pmeF9YlObE3nyX hpqH4cdGPpzosq+ZRkvbyIC5bmUZiX45o72SPUnLZrN3AoOS6l80U0IdSdjsSESR/U+ZpM1lvcPb HYTR47KyI4ZOpK6SCEzjMeyilvYotSLwIVdWvkNwh/I9PviNQcjuaVgp6j3Wq9EzJI4YUuVSIixt MpDlm0JPAEVyZVxjuQZLDNxkKmNMklIElBSaWG1UQSxjaWPfiJLhnhDQgKEKtBjV9L7lBTEOZyoS 2pgy4qDpuEXA9UJUxy4mh5gaEDE3jtOw43GkmniMISxGfWr9WHb2NAPmuDQ1mnO8iyjI4DIbyecr mEQkEXysTqkKHN2IcUxCWNAmBP1EfZUuqqBWGu+ncv4cTmcOR1gIYdYBrcm5EP9sDNpzXyPq0CNK OytyBTOoHSmLBvBm8Njt0SKCRHD2DcIzJTWghD1Sig5Cuprkq1bY5U9G+Lek3UoVg7wMFBgIi+vS 9OUA1/Hl0zWmDbFXDMVOY84lOHDoMQRD0cxJL7o/FIgZqntmmUQ3sMQiWZSh9U0nwJCuywiHhJNm MtmhrNVvPQHkeW1AkzOd78ZkSGtS5kTbnwpqNWWfTfNxU9FuXfnz4BGinPnOiyEcxeXN6HGaJZzI CjYGGSH7rzTKCkcgPJUK1H9919GmJGCq9uaO0m2XseExMF2GCpLUJQMBrA43929g12skocxu+40W lsHqx7gIvXb8D79u2AgxQmXwcOMVZYwsQuF+MtIJz3laXNkqVILcSxF0REkcjzAkmcJj4MSZlJh5 sktOdQssTFtHj8jMzL/t25mjAnHndx8sWGbupCew1zIk/AQ6BUUCS5Yh4Aui7VeI62Yr2qmzxhbW pxoBqrkrWZZQjsskUOSojIHME+igQWhGfaLdWVbD3R2SiOTyAybj+Giu5SY615ELE233wKVSGQVl SgnK8ROKj1vQ7cVh5MzVudIs5pGpXjLgMkW2gOjdWKgjxGu+L3fY0m5MJpr1QENq9lLyLOXm1Q6e nr1FQy77L1SSVq3QqL39hYdbuMMFbdaJwqkCOY96CELRs2o5thzDirRzxOncPVTBnlcsryxSNea2 gUFGkUqsI3sC9nyYVKtXtGaA+rTYvgQlxfSfq2aZNP33LkGgMJsVZVK0V6foZqa/E9y+GzPYEEag ZmRh2QwCm/QOcOvNcoIxHknMt5OhRGwIVPV3QpXIWrvrUFwLxyWo8ygHYmJAfeQHG/FI1uxDdyjA WwGBHEpdcBes5CIxD/F3JFOFCQhUmtuA --Boundary_(ID_x9s+jg6qUIr66SQnjSfy9Q)--