fixed an obscure bug in group by + having + Item_ref::get_date
This commit is contained in:
parent
312f0366bc
commit
dccac58396
@ -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())
|
||||
|
@ -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;
|
||||
|
||||
|
11
sql/item.cc
11
sql/item.cc
@ -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))
|
||||
|
11
sql/item.h
11
sql/item.h
@ -82,6 +82,8 @@ public:
|
||||
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); }
|
||||
};
|
||||
|
||||
|
||||
@ -129,8 +131,9 @@ public:
|
||||
return field->result_type();
|
||||
}
|
||||
Field *tmp_table_field() { return result_field; }
|
||||
bool get_date(TIME *ltime,bool fuzzydate);
|
||||
bool get_time(TIME *ltime);
|
||||
bool get_date(TIME *ltime,bool fuzzydate);
|
||||
bool get_date_result(TIME *ltime,bool fuzzydate);
|
||||
bool get_time(TIME *ltime);
|
||||
};
|
||||
|
||||
|
||||
@ -332,8 +335,8 @@ public:
|
||||
return tmp;
|
||||
}
|
||||
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…
x
Reference in New Issue
Block a user