From: Sergey Glukhov Date: December 15 2010 11:22am Subject: bzr commit into mysql-5.1-bugteam branch (sergey.glukhov:3523) Bug#57810 List-Archive: http://lists.mysql.com/commits/126917 X-Bug: 57810 Message-Id: <201012151131.oBFBRG80016321@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============2331653487680052929==" --===============2331653487680052929== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/gluh/MySQL/mysql-5.1-bugteam/ based on revid:sergey.glukhov@stripped 3523 Sergey Glukhov 2010-12-15 Bug#57810 case/when/then : Assertion failed: length || !scale ASSERT happens due to improper calculation of the max_length in Item_func_div object, if dividend has max_length == 0 then Item_func_div::max_length is set to 0 under some circumstances. The fix: If divident argument has decimals == NOT_FIXED_DEC then set Item_func_div::max_length to max possible DOUBLE length value. @ mysql-test/r/func_math.result test case @ mysql-test/t/func_math.test test case @ sql/item_func.cc If divident argument has decimals == NOT_FIXED_DEC then set Item_func_div::max_length to max possible DOUBLE length value. modified: mysql-test/r/func_math.result mysql-test/t/func_math.test sql/item_func.cc === modified file 'mysql-test/r/func_math.result' --- a/mysql-test/r/func_math.result 2010-10-27 14:12:10 +0000 +++ b/mysql-test/r/func_math.result 2010-12-15 11:22:02 +0000 @@ -498,4 +498,10 @@ SELECT -9223372036854775808 MOD -1; SELECT -9223372036854775808999 MOD -1; -9223372036854775808999 MOD -1 0 +# +# Bug#57810 case/when/then : Assertion failed: length || !scale +# +SELECT CASE(('')) WHEN (CONVERT(1, CHAR(1))) THEN (('' / 1)) END; +CASE(('')) WHEN (CONVERT(1, CHAR(1))) THEN (('' / 1)) END +NULL End of 5.1 tests === modified file 'mysql-test/t/func_math.test' --- a/mysql-test/t/func_math.test 2010-10-27 14:12:10 +0000 +++ b/mysql-test/t/func_math.test 2010-12-15 11:22:02 +0000 @@ -315,4 +315,10 @@ SELECT -9223372036854775808 DIV -1; SELECT -9223372036854775808 MOD -1; SELECT -9223372036854775808999 MOD -1; +--echo # +--echo # Bug#57810 case/when/then : Assertion failed: length || !scale +--echo # + +SELECT CASE(('')) WHEN (CONVERT(1, CHAR(1))) THEN (('' / 1)) END; + --echo End of 5.1 tests === modified file 'sql/item_func.cc' --- a/sql/item_func.cc 2010-12-14 09:33:03 +0000 +++ b/sql/item_func.cc 2010-12-15 11:22:02 +0000 @@ -1329,9 +1329,14 @@ void Item_func_div::fix_length_and_dec() { decimals=max(args[0]->decimals,args[1]->decimals)+prec_increment; set_if_smaller(decimals, NOT_FIXED_DEC); - max_length=args[0]->max_length - args[0]->decimals + decimals; uint tmp=float_length(decimals); - set_if_smaller(max_length,tmp); + if (args[0]->decimals == NOT_FIXED_DEC) + max_length= tmp; + else + { + max_length=args[0]->max_length - args[0]->decimals + decimals; + set_if_smaller(max_length,tmp); + } break; } case INT_RESULT: --===============2331653487680052929== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/sergey.glukhov@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: sergey.glukhov@stripped\ # 6rhyec6jwcorlv65 # target_branch: file:///home/gluh/MySQL/mysql-5.1-bugteam/ # testament_sha1: 9647d0568c5287e49d298fb6b2a5a0384f3a4094 # timestamp: 2010-12-15 14:22:09 +0300 # base_revision_id: sergey.glukhov@stripped\ # mq3qxt2o3yzs6gnc # # Begin bundle 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 uT1LEtUIhEdRiqPL0LaR1C7kinChIT24Scg= --===============2331653487680052929==--