diff options
author | unknown <bell@sanja.is.com.ua> | 2004-06-10 10:59:55 +0300 |
---|---|---|
committer | unknown <bell@sanja.is.com.ua> | 2004-06-10 10:59:55 +0300 |
commit | 8e6b48f808882e0586beb09259c329729f475015 (patch) | |
tree | 843e4e7d10f5b0100a82cd522e1a21416d20f204 | |
parent | 350ad5003e90c4129a69937afaf7d87b828a506c (diff) | |
download | mariadb-git-8e6b48f808882e0586beb09259c329729f475015.tar.gz |
cleunup() of count() and max()/min() added (BUG#2687)
mysql-test/r/func_group.result:
test of optimized aggregate function re-execution
mysql-test/t/func_group.test:
test of optimized aggregate function re-execution
sql/item_sum.cc:
cleunup() added
sql/item_sum.h:
cleunup() added
-rw-r--r-- | mysql-test/r/func_group.result | 28 | ||||
-rw-r--r-- | mysql-test/t/func_group.test | 22 | ||||
-rw-r--r-- | sql/item_sum.cc | 19 | ||||
-rw-r--r-- | sql/item_sum.h | 2 |
4 files changed, 71 insertions, 0 deletions
diff --git a/mysql-test/r/func_group.result b/mysql-test/r/func_group.result index bd5646f4068..06259ff4931 100644 --- a/mysql-test/r/func_group.result +++ b/mysql-test/r/func_group.result @@ -656,3 +656,31 @@ select stddev(2) from t1; stddev(2) NULL drop table t1; +create table t1 (a int); +insert into t1 values (1),(2); +prepare stmt1 from 'SELECT COUNT(*) FROM t1'; +execute stmt1; +COUNT(*) +2 +execute stmt1; +COUNT(*) +2 +execute stmt1; +COUNT(*) +2 +deallocate prepare stmt1; +drop table t1; +create table t1 (a int, primary key(a)); +insert into t1 values (1),(2); +prepare stmt1 from 'SELECT max(a) FROM t1'; +execute stmt1; +max(a) +2 +execute stmt1; +max(a) +2 +execute stmt1; +max(a) +2 +deallocate prepare stmt1; +drop table t1; diff --git a/mysql-test/t/func_group.test b/mysql-test/t/func_group.test index 7966a2262f4..74f4c1bad44 100644 --- a/mysql-test/t/func_group.test +++ b/mysql-test/t/func_group.test @@ -396,3 +396,25 @@ create table t1 (a int); select variance(2) from t1; select stddev(2) from t1; drop table t1; + + +# +# cleunup() of optimized away count(*) and max/min +# +create table t1 (a int); +insert into t1 values (1),(2); +prepare stmt1 from 'SELECT COUNT(*) FROM t1'; +execute stmt1; +execute stmt1; +execute stmt1; +deallocate prepare stmt1; +drop table t1; + +create table t1 (a int, primary key(a)); +insert into t1 values (1),(2); +prepare stmt1 from 'SELECT max(a) FROM t1'; +execute stmt1; +execute stmt1; +execute stmt1; +deallocate prepare stmt1; +drop table t1; diff --git a/sql/item_sum.cc b/sql/item_sum.cc index 0c5b29fc069..098ccf70861 100644 --- a/sql/item_sum.cc +++ b/sql/item_sum.cc @@ -361,6 +361,16 @@ longlong Item_sum_count::val_int() return (longlong) count; } + +void Item_sum_count::cleanup() +{ + DBUG_ENTER("Item_sum_count::cleanup"); + Item_sum_int::cleanup(); + used_table_cache= ~(table_map) 0; + DBUG_VOID_RETURN; +} + + /* Avgerage */ @@ -575,6 +585,15 @@ Item_sum_hybrid::val_str(String *str) } +void Item_sum_hybrid::cleanup() +{ + DBUG_ENTER("Item_sum_hybrid::cleanup"); + Item_sum::cleanup(); + used_table_cache= ~(table_map) 0; + DBUG_VOID_RETURN; +} + + Item *Item_sum_min::copy_or_same(THD* thd) { return new (&thd->mem_root) Item_sum_min(thd, this); diff --git a/sql/item_sum.h b/sql/item_sum.h index ef947900fd2..be8bb28e16b 100644 --- a/sql/item_sum.h +++ b/sql/item_sum.h @@ -172,6 +172,7 @@ class Item_sum_count :public Item_sum_int void make_const(longlong count_arg) { count=count_arg; used_table_cache=0; } longlong val_int(); void reset_field(); + void cleanup(); void update_field(); const char *func_name() const { return "count"; } Item *copy_or_same(THD* thd); @@ -428,6 +429,7 @@ class Item_sum_hybrid :public Item_sum void min_max_update_str_field(); void min_max_update_real_field(); void min_max_update_int_field(); + void cleanup(); }; |