Commit 697836c7 authored by evgen@moonbone.local's avatar evgen@moonbone.local

Fix bug#12266 GROUP BY DATE(LEFT(column,8)) returns result strings with reduced

length.

When temporary field created for DATE(LEFT(column,8)) expression, max_length
value is taken from Item_date_typecast, and it is getting it from underlaid
Item_func_left and it's max_length is 8 in given expression. And all this
results in stripping last 2 digits.

To Item_date_typecast class added its own fix_length_and_dec() function 
that sets max_length value to 10, which is proper for DATE field.
parent 280da3cf
......@@ -757,3 +757,10 @@ SELECT n+1 AS n FROM t1 GROUP BY n;
n
2
DROP TABLE t1;
create table t1 (f1 date);
insert into t1 values('2005-06-06');
insert into t1 values('2005-06-06');
select date(left(f1+0,8)) from t1 group by 1;
date(left(f1+0,8))
2005-06-06
drop table t1;
......@@ -590,4 +590,14 @@ INSERT INTO t1 VALUES (1);
SELECT n+1 AS n FROM t1 GROUP BY n;
DROP TABLE t1;
#
# Bug #12266 GROUP BY expression on DATE column produces result with
# reduced length
#
create table t1 (f1 date);
insert into t1 values('2005-06-06');
insert into t1 values('2005-06-06');
select date(left(f1+0,8)) from t1 group by 1;
drop table t1;
# End of 4.1 tests
......@@ -709,6 +709,12 @@ public:
{
return (new Field_date(maybe_null, name, t_arg, &my_charset_bin));
}
void fix_length_and_dec()
{
collation.set(&my_charset_bin);
max_length= 10;
maybe_null= 1;
}
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment