From: Sergey Glukhov Date: March 30 2011 9:32am Subject: bzr commit into mysql-5.1 branch (sergey.glukhov:3644) Bug#11766270 List-Archive: http://lists.mysql.com/commits/134224 X-Bug: 11766270 Message-Id: <201103300933.p2U9XhSg025972@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0856350768416333524==" --===============0856350768416333524== 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/ based on revid:sergey.glukhov@stripped 3644 Sergey Glukhov 2011-03-30 Bug#11766270 59343: YEAR(4): INCORRECT RESULT AND VALGRIND WARNINGS WITH MIN/MAX, UNION When we create temporary result table for UNION incorrect max_length for YEAR field is used and it leads to incorrect field value and incorrect result string length as YEAR field value calculation depends on field length. Fix: for YEAR field use Field_year::max_length for Item_sum_hybrid::max_length intialization. @ mysql-test/r/func_group.result test case @ mysql-test/t/func_group.test test case @ sql/item_sum.cc for YEAR field use Field_year::max_length for Item_sum_hybrid::max_length intialization. modified: mysql-test/r/func_group.result mysql-test/t/func_group.test sql/item_sum.cc === modified file 'mysql-test/r/func_group.result' --- a/mysql-test/r/func_group.result 2010-12-21 12:30:07 +0000 +++ b/mysql-test/r/func_group.result 2011-03-30 09:31:58 +0000 @@ -1737,4 +1737,13 @@ SELECT MIN(GET_LOCK('aaaaaaaaaaaaaaaaa', SELECT MIN(GET_LOCK('aaaaaaaaaaaaaaaaa',0) / '0b1111111111111111111111111111111111111111111111111111111111111111111111111' ^ (RAND())); SELECT RELEASE_LOCK('aaaaaaaaaaaaaaaaa'); # +# Bug #11766270 59343: YEAR(4): INCORRECT RESULT AND VALGRIND WARNINGS WITH MIN/MAX, UNION +# +CREATE TABLE t1(f1 YEAR(4)); +INSERT INTO t1 VALUES (0000),(2001); +(SELECT MAX(f1) FROM t1) UNION (SELECT MAX(f1) FROM t1); +MAX(f1) +2001 +DROP TABLE t1; +# End of 5.1 tests === modified file 'mysql-test/t/func_group.test' --- a/mysql-test/t/func_group.test 2010-12-21 12:30:07 +0000 +++ b/mysql-test/t/func_group.test 2011-03-30 09:31:58 +0000 @@ -1118,5 +1118,14 @@ SELECT RELEASE_LOCK('aaaaaaaaaaaaaaaaa') --enable_result_log --echo # +--echo # Bug #11766270 59343: YEAR(4): INCORRECT RESULT AND VALGRIND WARNINGS WITH MIN/MAX, UNION +--echo # + +CREATE TABLE t1(f1 YEAR(4)); +INSERT INTO t1 VALUES (0000),(2001); +(SELECT MAX(f1) FROM t1) UNION (SELECT MAX(f1) FROM t1); +DROP TABLE t1; + +--echo # --echo End of 5.1 tests === modified file 'sql/item_sum.cc' --- a/sql/item_sum.cc 2011-02-22 21:03:32 +0000 +++ b/sql/item_sum.cc 2011-03-30 09:31:58 +0000 @@ -640,6 +640,19 @@ Item_sum_hybrid::fix_fields(THD *thd, It else hybrid_field_type= Item::field_type(); + /* + We have to use original max_length for YEAR fields + as YEAR field value calculation depends on + field length and if this Item_sum_hybrid is + used as prototype for temporary table field with + max_length == 20 then we can get incorrect value + and incorrect result string length + (see Field_year::val_str()). + */ + if (hybrid_field_type == MYSQL_TYPE_YEAR && + hybrid_type == INT_RESULT) + max_length= item->max_length; + if (check_sum_func(thd, ref)) return TRUE; --===============0856350768416333524== 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\ # 7ediaz6fsldjp11w # target_branch: file:///home/gluh/MySQL/mysql-5.1/ # testament_sha1: d96f5ed09ae8faf3b84343cc75bad986eb2521cb # timestamp: 2011-03-30 13:32:04 +0400 # source_branch: bzr+ssh://sgluhov@stripped/bzrroot\ # /server/mysql-5.1/ # base_revision_id: sergey.glukhov@stripped\ # f715tu7n1tmwno8x # # Begin bundle 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 --===============0856350768416333524==--