Loading mysql-test/r/group_by.result +1 −0 Original line number Diff line number Diff line Loading @@ -128,3 +128,4 @@ a MAX(b) ELT(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f') a MAX(b) MAKE_SET(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h') 1 4 c 10 43 a,b,d,f a c count(distinct rand()) mysql-test/t/group_by.test +8 −0 Original line number Diff line number Diff line Loading @@ -346,3 +346,11 @@ select a, MAX(b), CONCAT_WS(MAX(b), '43', '4', '5') from t1 group by a; select a, MAX(b), ELT(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f') from t1 group by a; select a, MAX(b), MAKE_SET(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h') from t1 group by a; drop table t1; # not purely group_by bug, but group_by is involved... create table t1 (a date default null, b date default null); insert t1 values ('1999-10-01','2000-01-10'), ('1997-01-01','1998-10-01'); select a,min(b) c,count(distinct rand()) from t1 group by a having c<a + interval 1 day; drop table t1; sql/item.cc +11 −0 Original line number Diff line number Diff line Loading @@ -194,6 +194,17 @@ bool Item_field::get_date(TIME *ltime,bool fuzzydate) return 0; } bool Item_field::get_date_result(TIME *ltime,bool fuzzydate) { if ((null_value=result_field->is_null()) || result_field->get_date(ltime,fuzzydate)) { bzero((char*) ltime,sizeof(*ltime)); return 1; } return 0; } bool Item_field::get_time(TIME *ltime) { if ((null_value=field->is_null()) || field->get_time(ltime)) Loading sql/item.h +7 −4 Original line number Diff line number Diff line Loading @@ -82,6 +82,8 @@ class Item { virtual void split_sum_func(List<Item> &fields) {} virtual bool get_date(TIME *ltime,bool fuzzydate); virtual bool get_time(TIME *ltime); virtual bool get_date_result(TIME *ltime,bool fuzzydate) { return get_date(ltime,fuzzydate); } }; Loading Loading @@ -130,6 +132,7 @@ class Item_field :public Item_ident } Field *tmp_table_field() { return result_field; } bool get_date(TIME *ltime,bool fuzzydate); bool get_date_result(TIME *ltime,bool fuzzydate); bool get_time(TIME *ltime); }; Loading Loading @@ -333,7 +336,7 @@ class Item_ref :public Item_ident } bool get_date(TIME *ltime,bool fuzzydate) { return (null_value=(*ref)->get_date(ltime,fuzzydate)); return (null_value=(*ref)->get_date_result(ltime,fuzzydate)); } bool send(String *tmp) { return (*ref)->send(tmp); } void make_field(Send_field *field) { (*ref)->make_field(field); } Loading Loading
mysql-test/r/group_by.result +1 −0 Original line number Diff line number Diff line Loading @@ -128,3 +128,4 @@ a MAX(b) ELT(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f') a MAX(b) MAKE_SET(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h') 1 4 c 10 43 a,b,d,f a c count(distinct rand())
mysql-test/t/group_by.test +8 −0 Original line number Diff line number Diff line Loading @@ -346,3 +346,11 @@ select a, MAX(b), CONCAT_WS(MAX(b), '43', '4', '5') from t1 group by a; select a, MAX(b), ELT(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f') from t1 group by a; select a, MAX(b), MAKE_SET(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h') from t1 group by a; drop table t1; # not purely group_by bug, but group_by is involved... create table t1 (a date default null, b date default null); insert t1 values ('1999-10-01','2000-01-10'), ('1997-01-01','1998-10-01'); select a,min(b) c,count(distinct rand()) from t1 group by a having c<a + interval 1 day; drop table t1;
sql/item.cc +11 −0 Original line number Diff line number Diff line Loading @@ -194,6 +194,17 @@ bool Item_field::get_date(TIME *ltime,bool fuzzydate) return 0; } bool Item_field::get_date_result(TIME *ltime,bool fuzzydate) { if ((null_value=result_field->is_null()) || result_field->get_date(ltime,fuzzydate)) { bzero((char*) ltime,sizeof(*ltime)); return 1; } return 0; } bool Item_field::get_time(TIME *ltime) { if ((null_value=field->is_null()) || field->get_time(ltime)) Loading
sql/item.h +7 −4 Original line number Diff line number Diff line Loading @@ -82,6 +82,8 @@ class Item { virtual void split_sum_func(List<Item> &fields) {} virtual bool get_date(TIME *ltime,bool fuzzydate); virtual bool get_time(TIME *ltime); virtual bool get_date_result(TIME *ltime,bool fuzzydate) { return get_date(ltime,fuzzydate); } }; Loading Loading @@ -130,6 +132,7 @@ class Item_field :public Item_ident } Field *tmp_table_field() { return result_field; } bool get_date(TIME *ltime,bool fuzzydate); bool get_date_result(TIME *ltime,bool fuzzydate); bool get_time(TIME *ltime); }; Loading Loading @@ -333,7 +336,7 @@ class Item_ref :public Item_ident } bool get_date(TIME *ltime,bool fuzzydate) { return (null_value=(*ref)->get_date(ltime,fuzzydate)); return (null_value=(*ref)->get_date_result(ltime,fuzzydate)); } bool send(String *tmp) { return (*ref)->send(tmp); } void make_field(Send_field *field) { (*ref)->make_field(field); } Loading