From: Sergey Glukhov Date: April 1 2011 7:54am Subject: bzr commit into mysql-5.1 branch (sergey.glukhov:3644) Bug#11766270 List-Archive: http://lists.mysql.com/commits/134430 X-Bug: 11766270 Message-Id: <201104010756.p317u727001758@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============5704761069459883693==" --===============5704761069459883693== 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-04-01 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 2010-12-21 12:30:07 +0000 +++ b/mysql-test/r/func_group.result 2011-04-01 07:54:43 +0000 @@ -1737,4 +1737,15 @@ 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); +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 2010-12-21 12:30:07 +0000 +++ b/mysql-test/t/func_group.test 2011-04-01 07:54:43 +0000 @@ -1118,5 +1118,17 @@ 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); +--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-01 07:54:43 +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-01 07:54:43 +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); --===============5704761069459883693== 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\ # vzlybvxxh4xjeqb6 # target_branch: file:///home/gluh/MySQL/mysql-5.1/ # testament_sha1: 8086d45d34f11df7cea977bda9d00aa3989026e0 # timestamp: 2011-04-01 11:54:50 +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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 --===============5704761069459883693==--