summaryrefslogtreecommitdiff
path: root/sql/item_sum.h
diff options
context:
space:
mode:
authorunknown <bell@laptop.sanja.is.com.ua>2003-08-28 03:10:14 +0300
committerunknown <bell@laptop.sanja.is.com.ua>2003-08-28 03:10:14 +0300
commit85f7a6978bced6b17940363b792e7bc80dcce3aa (patch)
treeed1b5477d82793fa5e64d377ef4d4c7a1e83bc07 /sql/item_sum.h
parentc2d54add7ede5e2e4610c43eeff6aa6f055cf197 (diff)
downloadmariadb-git-85f7a6978bced6b17940363b792e7bc80dcce3aa.tar.gz
reset() split in 2 function clear() & add()
aggregate function reinitialization (if no rows was found) made with help of clear() (fixed BUG#860) mysql-test/r/subselect.result: test for BUG#860 mysql-test/t/subselect.test: test for BUG#860 sql/item_sum.cc: reset() replaced with clear() sql/item_sum.h: reset() replaced with clear() (reset now is just composition of clear() and add()) sql/item_uniq.h: reset() replaced with clear() sql/sql_select.cc: removed NULL value assigment, now it will be done by clear() call function for clearing if there was not found any row in group sql/sql_select.h: function for clearing if there was not found any row in group
Diffstat (limited to 'sql/item_sum.h')
-rw-r--r--sql/item_sum.h29
1 files changed, 14 insertions, 15 deletions
diff --git a/sql/item_sum.h b/sql/item_sum.h
index bd946609745..8ceada278b8 100644
--- a/sql/item_sum.h
+++ b/sql/item_sum.h
@@ -62,7 +62,8 @@ public:
enum Type type() const { return SUM_FUNC_ITEM; }
virtual enum Sumfunctype sum_func () const=0;
- virtual bool reset()=0;
+ inline bool reset() { clear(); return add(); };
+ virtual void clear()= 0;
virtual bool add()=0;
virtual void reset_field()=0;
virtual void update_field(int offset)=0;
@@ -124,7 +125,7 @@ class Item_sum_sum :public Item_sum_num
Item_sum_sum(THD *thd, Item_sum_sum &item)
:Item_sum_num(thd, item), sum(item.sum) {}
enum Sumfunctype sum_func () const {return SUM_FUNC;}
- bool reset();
+ void clear();
bool add();
double val();
void reset_field();
@@ -151,7 +152,7 @@ class Item_sum_count :public Item_sum_int
table_map used_tables() const { return used_table_cache; }
bool const_item() const { return !used_table_cache; }
enum Sumfunctype sum_func () const { return COUNT_FUNC; }
- bool reset();
+ void clear();
void no_rows_in_result() { count=0; }
bool add();
void make_const(longlong count_arg) { count=count_arg; used_table_cache=0; }
@@ -225,7 +226,7 @@ class Item_sum_count_distinct :public Item_sum_int
table_map used_tables() const { return used_table_cache; }
enum Sumfunctype sum_func () const { return COUNT_DISTINCT_FUNC; }
- bool reset();
+ void clear();
bool add();
longlong val_int();
void reset_field() { return ;} // Never called
@@ -269,7 +270,7 @@ class Item_sum_avg :public Item_sum_num
Item_sum_avg(THD *thd, Item_sum_avg &item)
:Item_sum_num(thd, item), sum(item.sum), count(item.count) {}
enum Sumfunctype sum_func () const {return AVG_FUNC;}
- bool reset();
+ void clear();
bool add();
double val();
void reset_field();
@@ -322,7 +323,7 @@ class Item_sum_variance : public Item_sum_num
Item_sum_num(thd, item), sum(item.sum), sum_sqr(item.sum_sqr),
count(item.count) {}
enum Sumfunctype sum_func () const { return VARIANCE_FUNC; }
- bool reset();
+ void clear();
bool add();
double val();
void reset_field();
@@ -391,13 +392,12 @@ class Item_sum_hybrid :public Item_sum
table_map used_tables() const { return used_table_cache; }
bool const_item() const { return !used_table_cache; }
- bool reset()
+ void clear()
{
sum=0.0;
sum_int=0;
value.length(0);
null_value=1;
- return add();
}
double val();
longlong val_int();
@@ -451,7 +451,7 @@ class Item_sum_bit :public Item_sum_int
Item_sum_bit(THD *thd, Item_sum_bit &item):
Item_sum_int(thd, item), reset_bits(item.reset_bits), bits(item.bits) {}
enum Sumfunctype sum_func () const {return SUM_BIT_FUNC;}
- bool reset();
+ void clear();
longlong val_int();
void reset_field();
void fix_length_and_dec()
@@ -509,8 +509,7 @@ public:
enum Sumfunctype sum_func () const { return UDF_SUM_FUNC; }
virtual bool have_field_update(void) const { return 0; }
- bool reset() { return 0; } /* TO BE FIXED */
- bool clear();
+ void clear();
bool add();
void reset_field() {};
void update_field(int offset_arg) {};
@@ -592,7 +591,7 @@ class Item_sum_udf_float :public Item_sum_num
~Item_sum_udf_float() {}
enum Sumfunctype sum_func () const { return UDF_SUM_FUNC; }
double val() { return 0.0; }
- bool reset() { return 0; }
+ bool clear() {}
bool add() { return 0; }
void update_field(int offset) {}
};
@@ -609,7 +608,7 @@ public:
enum Sumfunctype sum_func () const { return UDF_SUM_FUNC; }
longlong val_int() { return 0; }
double val() { return 0; }
- bool reset() { return 0; }
+ void clear() {}
bool add() { return 0; }
void update_field(int offset) {}
};
@@ -629,7 +628,7 @@ public:
enum Item_result result_type () const { return STRING_RESULT; }
void fix_length_and_dec() { maybe_null=1; max_length=0; }
enum Sumfunctype sum_func () const { return UDF_SUM_FUNC; }
- bool reset() { return 0; }
+ void clear() {}
bool add() { return 0; }
void update_field(int offset) {}
};
@@ -715,7 +714,7 @@ class Item_func_group_concat : public Item_sum
const char *func_name() const { return "group_concat"; }
enum Type type() const { return SUM_FUNC_ITEM; }
virtual Item_result result_type () const { return STRING_RESULT; }
- bool reset();
+ void clear();
bool add();
void reset_field();
bool fix_fields(THD *, TABLE_LIST *, Item **);