From: Sergey Glukhov Date: December 21 2010 3:31pm Subject: bzr commit into mysql-5.1-bugteam branch (sergey.glukhov:3534) Bug#57810 List-Archive: http://lists.mysql.com/commits/127451 X-Bug: 57810 Message-Id: <201012211541.oBLFfNcU025115@rcsinet13.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============7843472505374627457==" --===============7843472505374627457== 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 3534 Sergey Glukhov 2010-12-21 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 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 The fix: If 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-21 15:31:13 +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-21 15:31:13 +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-16 14:40:52 +0000 +++ b/sql/item_func.cc 2010-12-21 15:31:13 +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 (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: --===============7843472505374627457== 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\ # gz0i6or7qfy1k2sf # target_branch: file:///home/gluh/MySQL/mysql-5.1-bugteam/ # testament_sha1: d5455ec43f95f6c5ac39f0fce588b16818a54450 # timestamp: 2010-12-21 18:31:16 +0300 # source_branch: bzr+ssh://sgluhov@stripped/bzrroot\ # /server/mysql-5.1-bugteam/ # base_revision_id: sergey.glukhov@stripped\ # epoilau29aftwat4 # # Begin bundle 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 6QEhysqri9maUfxdyRThQkANctqM --===============7843472505374627457==--