From 70cf375d9d3d7e67c4ff135d20274aa0107ac32c Mon Sep 17 00:00:00 2001 From: Sergey Glukhov Date: Tue, 12 Apr 2011 14:01:33 +0400 Subject: 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. --- sql/item_sum.cc | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) (limited to 'sql/item_sum.cc') diff --git a/sql/item_sum.cc b/sql/item_sum.cc index 2a8aea68f7a..c62738abac0 100644 --- a/sql/item_sum.cc +++ b/sql/item_sum.cc @@ -612,17 +612,13 @@ Item_sum_hybrid::fix_fields(THD *thd, Item **ref) 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); -- cgit v1.2.1