Loading mysql-test/r/group_by.result +5 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,11 @@ userid count(*) 3 3 2 1 1 2 userid count(*) 3 3 1 2 userid count(*) 3 3 table type possible_keys key key_len ref rows Extra t1 range spID spID 5 NULL 2 where used; Using index; Using temporary table type possible_keys key key_len ref rows Extra Loading mysql-test/t/group_by.test +2 −0 Original line number Diff line number Diff line Loading @@ -235,6 +235,8 @@ CREATE TABLE t1 ( INSERT INTO t1 VALUES (1,1,1),(2,2,2),(2,1,1),(3,3,3),(4,3,3),(5,3,3); explain select userid,count(*) from t1 group by userid desc; select userid,count(*) from t1 group by userid desc; select userid,count(*) from t1 group by userid desc having (count(*)+1) IN (4,3); select userid,count(*) from t1 group by userid desc having 3 IN (1,COUNT(*)); explain select spid,count(*) from t1 where spid between 1 and 2 group by spid desc; explain select spid,count(*) from t1 where spid between 1 and 2 group by spid; select spid,count(*) from t1 where spid between 1 and 2 group by spid; Loading sql/item_cmpfunc.cc +5 −1 Original line number Diff line number Diff line Loading @@ -1029,13 +1029,17 @@ void Item_func_in::update_used_tables() used_tables_cache|=item->used_tables(); const_item_cache&=item->const_item(); } void Item_func_in::split_sum_func(List<Item> &fields) { if (item->used_tables() || item->type() == SUM_FUNC_ITEM) if (item->with_sum_func && item->type() != SUM_FUNC_ITEM) item->split_sum_func(fields); else if (item->used_tables() || item->type() == SUM_FUNC_ITEM) { fields.push_front(item); item=new Item_ref((Item**) fields.head_ref(),0,item->name); } Item_func::split_sum_func(fields); } Loading sql/item_cmpfunc.h +2 −1 Original line number Diff line number Diff line Loading @@ -410,8 +410,9 @@ class Item_func_in :public Item_int_func longlong val_int(); bool fix_fields(THD *thd,struct st_table_list *tlist) { bool res= (item->fix_fields(thd,tlist) || Item_func::fix_fields(thd,tlist)); with_sum_func= with_sum_func || item->with_sum_func; return (item->fix_fields(thd,tlist) || Item_func::fix_fields(thd,tlist)); return res; } void fix_length_and_dec(); ~Item_func_in() { delete item; delete array; delete in_item; } Loading Loading
mysql-test/r/group_by.result +5 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,11 @@ userid count(*) 3 3 2 1 1 2 userid count(*) 3 3 1 2 userid count(*) 3 3 table type possible_keys key key_len ref rows Extra t1 range spID spID 5 NULL 2 where used; Using index; Using temporary table type possible_keys key key_len ref rows Extra Loading
mysql-test/t/group_by.test +2 −0 Original line number Diff line number Diff line Loading @@ -235,6 +235,8 @@ CREATE TABLE t1 ( INSERT INTO t1 VALUES (1,1,1),(2,2,2),(2,1,1),(3,3,3),(4,3,3),(5,3,3); explain select userid,count(*) from t1 group by userid desc; select userid,count(*) from t1 group by userid desc; select userid,count(*) from t1 group by userid desc having (count(*)+1) IN (4,3); select userid,count(*) from t1 group by userid desc having 3 IN (1,COUNT(*)); explain select spid,count(*) from t1 where spid between 1 and 2 group by spid desc; explain select spid,count(*) from t1 where spid between 1 and 2 group by spid; select spid,count(*) from t1 where spid between 1 and 2 group by spid; Loading
sql/item_cmpfunc.cc +5 −1 Original line number Diff line number Diff line Loading @@ -1029,13 +1029,17 @@ void Item_func_in::update_used_tables() used_tables_cache|=item->used_tables(); const_item_cache&=item->const_item(); } void Item_func_in::split_sum_func(List<Item> &fields) { if (item->used_tables() || item->type() == SUM_FUNC_ITEM) if (item->with_sum_func && item->type() != SUM_FUNC_ITEM) item->split_sum_func(fields); else if (item->used_tables() || item->type() == SUM_FUNC_ITEM) { fields.push_front(item); item=new Item_ref((Item**) fields.head_ref(),0,item->name); } Item_func::split_sum_func(fields); } Loading
sql/item_cmpfunc.h +2 −1 Original line number Diff line number Diff line Loading @@ -410,8 +410,9 @@ class Item_func_in :public Item_int_func longlong val_int(); bool fix_fields(THD *thd,struct st_table_list *tlist) { bool res= (item->fix_fields(thd,tlist) || Item_func::fix_fields(thd,tlist)); with_sum_func= with_sum_func || item->with_sum_func; return (item->fix_fields(thd,tlist) || Item_func::fix_fields(thd,tlist)); return res; } void fix_length_and_dec(); ~Item_func_in() { delete item; delete array; delete in_item; } Loading