1
0
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:
Sergei Golubchik
2014-02-17 11:00:51 +01:00
1315 changed files with 4149 additions and 1509 deletions

View File

@@ -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);
};