Commit d28ce157 authored by unknown's avatar unknown

Merge rkalimullin@bk-internal.mysql.com:/home/bk/mysql-5.0-maint

into  mysql.com:/home/ram/work/b31249/b31249.5.0


mysql-test/r/type_datetime.result:
  manual merge
mysql-test/t/type_datetime.test:
  manual merge
parents 715da32e 1a5f13a1
...@@ -436,3 +436,17 @@ f1 ...@@ -436,3 +436,17 @@ f1
Warnings: Warnings:
Warning 1292 Truncated incorrect datetime value: '0000-00-00 45:44:44' Warning 1292 Truncated incorrect datetime value: '0000-00-00 45:44:44'
drop table t1; drop table t1;
create table t1 (a tinyint);
insert into t1 values (), (), ();
select sum(a) from t1 group by convert(a, datetime);
sum(a)
NULL
select convert(a, datetime) from t1;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
def convert(a, datetime) 12 29 0 Y 128 6 63
convert(a, datetime)
NULL
NULL
NULL
drop table t1;
End of 5.0 tests
...@@ -292,3 +292,16 @@ insert into t1 set f1 = '45:44:44'; ...@@ -292,3 +292,16 @@ insert into t1 set f1 = '45:44:44';
insert into t1 set f1 = '15:44:44'; insert into t1 set f1 = '15:44:44';
select * from t1 where (convert(f1,datetime)) != 1; select * from t1 where (convert(f1,datetime)) != 1;
drop table t1; drop table t1;
#
# Bug #31249: problem with convert(..., datetime)
#
create table t1 (a tinyint);
insert into t1 values (), (), ();
select sum(a) from t1 group by convert(a, datetime);
--enable_metadata
select convert(a, datetime) from t1;
--disable_metadata
drop table t1;
--echo End of 5.0 tests
...@@ -844,7 +844,9 @@ public: ...@@ -844,7 +844,9 @@ public:
enum_field_types field_type() const { return MYSQL_TYPE_DATETIME; } enum_field_types field_type() const { return MYSQL_TYPE_DATETIME; }
void fix_length_and_dec() void fix_length_and_dec()
{ {
Item_typecast_maybe_null::fix_length_and_dec(); collation.set(&my_charset_bin);
maybe_null= 1;
max_length= MAX_DATETIME_FULL_WIDTH * MY_CHARSET_BIN_MB_MAXLEN;
decimals= DATETIME_DEC; decimals= DATETIME_DEC;
} }
......
...@@ -13902,13 +13902,31 @@ calc_group_buffer(JOIN *join,ORDER *group) ...@@ -13902,13 +13902,31 @@ calc_group_buffer(JOIN *join,ORDER *group)
group_item->decimals); group_item->decimals);
break; break;
case STRING_RESULT: case STRING_RESULT:
{
enum enum_field_types type= group_item->field_type();
/*
As items represented as DATE/TIME fields in the group buffer
have STRING_RESULT result type, we increase the length
by 8 as maximum pack length of such fields.
*/
if (type == MYSQL_TYPE_TIME ||
type == MYSQL_TYPE_DATE ||
type == MYSQL_TYPE_DATETIME ||
type == MYSQL_TYPE_TIMESTAMP)
{
key_length+= 8;
}
else
{
/* /*
Group strings are taken as varstrings and require an length field. Group strings are taken as varstrings and require an length field.
A field is not yet created by create_tmp_field() A field is not yet created by create_tmp_field()
and the sizes should match up. and the sizes should match up.
*/ */
key_length+= group_item->max_length + HA_KEY_BLOB_LENGTH; key_length+= group_item->max_length + HA_KEY_BLOB_LENGTH;
}
break; break;
}
default: default:
/* This case should never be choosen */ /* This case should never be choosen */
DBUG_ASSERT(0); DBUG_ASSERT(0);
......
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