mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
MySQL-5.5.36 merge
(without few incorrect bugfixes and with 1250 files where only a copyright year was changed)
This commit is contained in:
@@ -57,19 +57,8 @@ protected:
|
||||
/* the aggregate function class to act on */
|
||||
Item_sum *item_sum;
|
||||
|
||||
/**
|
||||
When feeding back the data in endup() from Unique/temp table back to
|
||||
Item_sum::add() methods we must read the data from Unique (and not
|
||||
recalculate the functions that are given as arguments to the aggregate
|
||||
function.
|
||||
This flag is to tell the add() methods to take the data from the Unique
|
||||
instead by calling the relevant val_..() method
|
||||
*/
|
||||
|
||||
bool use_distinct_values;
|
||||
|
||||
public:
|
||||
Aggregator (Item_sum *arg): item_sum(arg), use_distinct_values(FALSE) {}
|
||||
Aggregator (Item_sum *arg): item_sum(arg) {}
|
||||
virtual ~Aggregator () {} /* Keep gcc happy */
|
||||
|
||||
enum Aggregator_type { SIMPLE_AGGREGATOR, DISTINCT_AGGREGATOR };
|
||||
@@ -106,10 +95,16 @@ public:
|
||||
/** Floating point value of being-aggregated argument */
|
||||
virtual double arg_val_real() = 0;
|
||||
/**
|
||||
NULLness of being-aggregated argument; can be called only after
|
||||
arg_val_decimal() or arg_val_real().
|
||||
NULLness of being-aggregated argument.
|
||||
|
||||
@param use_null_value Optimization: to determine if the argument is NULL
|
||||
we must, in the general case, call is_null() on it, which itself might
|
||||
call val_*() on it, which might be costly. If you just have called
|
||||
arg_val*(), you can pass use_null_value=true; this way, arg_is_null()
|
||||
might avoid is_null() and instead do a cheap read of the Item's null_value
|
||||
(updated by arg_val*()).
|
||||
*/
|
||||
virtual bool arg_is_null() = 0;
|
||||
virtual bool arg_is_null(bool use_null_value) = 0;
|
||||
};
|
||||
|
||||
|
||||
@@ -495,7 +490,7 @@ public:
|
||||
|
||||
Item *get_arg(uint i) { return args[i]; }
|
||||
Item *set_arg(uint i, THD *thd, Item *new_val);
|
||||
uint get_arg_count() { return arg_count; }
|
||||
uint get_arg_count() const { return arg_count; }
|
||||
|
||||
/* Initialization of distinct related members */
|
||||
void init_aggregator()
|
||||
@@ -626,10 +621,20 @@ class Aggregator_distinct : public Aggregator
|
||||
*/
|
||||
bool always_null;
|
||||
|
||||
/**
|
||||
When feeding back the data in endup() from Unique/temp table back to
|
||||
Item_sum::add() methods we must read the data from Unique (and not
|
||||
recalculate the functions that are given as arguments to the aggregate
|
||||
function.
|
||||
This flag is to tell the arg_*() methods to take the data from the Unique
|
||||
instead of calling the relevant val_..() method.
|
||||
*/
|
||||
bool use_distinct_values;
|
||||
|
||||
public:
|
||||
Aggregator_distinct (Item_sum *sum) :
|
||||
Aggregator(sum), table(NULL), tmp_table_param(NULL), tree(NULL),
|
||||
always_null(FALSE) {}
|
||||
always_null(false), use_distinct_values(false) {}
|
||||
virtual ~Aggregator_distinct ();
|
||||
Aggregator_type Aggrtype() { return DISTINCT_AGGREGATOR; }
|
||||
|
||||
@@ -639,7 +644,7 @@ public:
|
||||
void endup();
|
||||
virtual my_decimal *arg_val_decimal(my_decimal * value);
|
||||
virtual double arg_val_real();
|
||||
virtual bool arg_is_null();
|
||||
virtual bool arg_is_null(bool use_null_value);
|
||||
|
||||
bool unique_walk_function(void *element);
|
||||
bool unique_walk_function_for_count(void *element);
|
||||
@@ -666,7 +671,7 @@ public:
|
||||
void endup() {};
|
||||
virtual my_decimal *arg_val_decimal(my_decimal * value);
|
||||
virtual double arg_val_real();
|
||||
virtual bool arg_is_null();
|
||||
virtual bool arg_is_null(bool use_null_value);
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user