From: Sergey Glukhov Date: December 22 2010 7:54am Subject: bzr commit into mysql-5.1-bugteam branch (sergey.glukhov:3534) Bug#57810 List-Archive: http://lists.mysql.com/commits/127483 X-Bug: 57810 Message-Id: <201012220804.oBM84cI5011705@rcsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============9220853666708455361==" --===============9220853666708455361== 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-22 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-22 07:54:27 +0000 @@ -498,4 +498,17 @@ 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 +CREATE TABLE t1 SELECT CAST((CASE(('')) WHEN (CONVERT(1, CHAR(1))) THEN (('' / 1)) END) AS CHAR) as C; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `C` varchar(23) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TABLE t1; 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-22 07:54:27 +0000 @@ -315,4 +315,13 @@ 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; +CREATE TABLE t1 SELECT CAST((CASE(('')) WHEN (CONVERT(1, CHAR(1))) THEN (('' / 1)) END) AS CHAR) as C; +SHOW CREATE TABLE t1; +DROP TABLE t1; + --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-22 07:54:27 +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: --===============9220853666708455361== 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\ # sadf27031e89ndry # target_branch: file:///home/gluh/MySQL/mysql-5.1-bugteam/ # testament_sha1: 5a478f6b30ee01415784ab5289f9a27fc956ecca # timestamp: 2010-12-22 10:54:30 +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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 jOA= --===============9220853666708455361==--