From: Sergey Glukhov Date: April 12 2011 10:01am Subject: bzr commit into mysql-5.1 branch (sergey.glukhov:3655) Bug#11766270 List-Archive: http://lists.mysql.com/commits/135245 X-Bug: 11766270 Message-Id: <201104121001.p3CA1H0b028179@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0147005399412003360==" --===============0147005399412003360== 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 3655 Sergey Glukhov 2011-04-12 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. The fix is to use underlying item 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/field.cc added assert @ sql/item_sum.cc init Item_sum_hybrid::max_length with use underlying item max_length for INT result type. modified: mysql-test/r/func_group.result mysql-test/t/func_group.test sql/field.cc sql/item_sum.cc === modified file 'mysql-test/r/func_group.result' --- a/mysql-test/r/func_group.result 2011-03-31 18:59:11 +0000 +++ b/mysql-test/r/func_group.result 2011-04-12 10:01:33 +0000 @@ -1746,4 +1746,15 @@ MAX(LENGTH(a)) LENGTH(MAX(a)) MIN(a) MAX 20 20 18446668621106209655 18446668621106209655 18446668621106209655 18446668621106209655 DROP TABLE t1; # +# 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); +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def MAX(f1) MAX(f1) 13 4 4 Y 32864 0 63 +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 2011-03-31 18:59:11 +0000 +++ b/mysql-test/t/func_group.test 2011-04-12 10:01:33 +0000 @@ -1128,5 +1128,17 @@ SELECT MAX(LENGTH(a)), LENGTH(MAX(a)), M DROP TABLE t1; --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); +--enable_metadata +(SELECT MAX(f1) FROM t1) UNION (SELECT MAX(f1) FROM t1); +--disable_metadata +DROP TABLE t1; + + +--echo # --echo End of 5.1 tests === modified file 'sql/field.cc' --- a/sql/field.cc 2011-02-08 11:52:33 +0000 +++ b/sql/field.cc 2011-04-12 10:01:33 +0000 @@ -5467,6 +5467,7 @@ double Field_year::val_real(void) longlong Field_year::val_int(void) { ASSERT_COLUMN_MARKED_FOR_READ; + DBUG_ASSERT(field_length == 2 || field_length == 4); int tmp= (int) ptr[0]; if (field_length != 4) tmp%=100; // Return last 2 char @@ -5479,6 +5480,7 @@ longlong Field_year::val_int(void) String *Field_year::val_str(String *val_buffer, String *val_ptr __attribute__((unused))) { + DBUG_ASSERT(field_length < 5); val_buffer->alloc(5); val_buffer->length(field_length); char *to=(char*) val_buffer->ptr(); === modified file 'sql/item_sum.cc' --- a/sql/item_sum.cc 2011-02-22 21:03:32 +0000 +++ b/sql/item_sum.cc 2011-04-12 10:01:33 +0000 @@ -612,17 +612,13 @@ Item_sum_hybrid::fix_fields(THD *thd, It switch (hybrid_type= item->result_type()) { case INT_RESULT: - max_length= 20; - break; case DECIMAL_RESULT: + case STRING_RESULT: max_length= item->max_length; break; case REAL_RESULT: max_length= float_length(decimals); break; - case STRING_RESULT: - max_length= item->max_length; - break; case ROW_RESULT: default: DBUG_ASSERT(0); --===============0147005399412003360== 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\ # qhsvx5oeo3ji23hb # target_branch: file:///home/gluh/MySQL/mysql-5.1/ # testament_sha1: f1ba4b35499da14c3a1184c8f856c63faa143eb5 # timestamp: 2011-04-12 14:01:51 +0400 # source_branch: bzr+ssh://sgluhov@stripped/bzrroot\ # /server/mysql-5.1/ # base_revision_id: sergey.glukhov@stripped\ # uirtqyq7pu1q16td # # Begin bundle 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 72f+LuSKcKEhUG6AXg== --===============0147005399412003360==--