mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-12719 Determine Item::result_type() from Item::type_handler()
This commit is contained in:
@ -9840,7 +9840,7 @@ Item_type_holder::Item_type_holder(THD *thd, Item *item)
|
|||||||
DBUG_ASSERT(item->fixed);
|
DBUG_ASSERT(item->fixed);
|
||||||
maybe_null= item->maybe_null;
|
maybe_null= item->maybe_null;
|
||||||
get_full_info(item);
|
get_full_info(item);
|
||||||
DBUG_ASSERT(!decimals || Item_type_holder::result_type() != INT_RESULT);
|
DBUG_ASSERT(!decimals || result_type() != INT_RESULT);
|
||||||
prev_decimal_int_part= item->decimal_int_part();
|
prev_decimal_int_part= item->decimal_int_part();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -9889,14 +9889,14 @@ bool Item_type_holder::join_types(THD *thd, Item *item)
|
|||||||
which is on the right side of the UNION, the data type handler
|
which is on the right side of the UNION, the data type handler
|
||||||
changes to type_handler_longlong, while decimals is still NOT_FIXED_DEC.
|
changes to type_handler_longlong, while decimals is still NOT_FIXED_DEC.
|
||||||
*/
|
*/
|
||||||
if (Item_type_holder::result_type() == INT_RESULT)
|
if (result_type() == INT_RESULT)
|
||||||
decimals= 0;
|
decimals= 0;
|
||||||
else
|
else
|
||||||
decimals= MY_MAX(decimals, item->decimals);
|
decimals= MY_MAX(decimals, item->decimals);
|
||||||
|
|
||||||
Type_geometry_attributes::join(item);
|
Type_geometry_attributes::join(item);
|
||||||
|
|
||||||
if (Item_type_holder::result_type() == DECIMAL_RESULT)
|
if (result_type() == DECIMAL_RESULT)
|
||||||
{
|
{
|
||||||
decimals= MY_MIN(MY_MAX(decimals, item->decimals), DECIMAL_MAX_SCALE);
|
decimals= MY_MIN(MY_MAX(decimals, item->decimals), DECIMAL_MAX_SCALE);
|
||||||
int item_int_part= item->decimal_int_part();
|
int item_int_part= item->decimal_int_part();
|
||||||
@ -9908,7 +9908,7 @@ bool Item_type_holder::join_types(THD *thd, Item *item)
|
|||||||
unsigned_flag);
|
unsigned_flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (Item_type_holder::result_type())
|
switch (result_type())
|
||||||
{
|
{
|
||||||
case STRING_RESULT:
|
case STRING_RESULT:
|
||||||
{
|
{
|
||||||
|
57
sql/item.h
57
sql/item.h
@ -746,7 +746,7 @@ public:
|
|||||||
return type_handler();
|
return type_handler();
|
||||||
}
|
}
|
||||||
/* result_type() of an item specifies how the value should be returned */
|
/* result_type() of an item specifies how the value should be returned */
|
||||||
virtual Item_result result_type() const
|
Item_result result_type() const
|
||||||
{
|
{
|
||||||
return type_handler()->result_type();
|
return type_handler()->result_type();
|
||||||
}
|
}
|
||||||
@ -2230,8 +2230,6 @@ public:
|
|||||||
inline enum Type type() const;
|
inline enum Type type() const;
|
||||||
const Type_handler *type_handler() const
|
const Type_handler *type_handler() const
|
||||||
{ return Type_handler_hybrid_field_type::type_handler(); }
|
{ return Type_handler_hybrid_field_type::type_handler(); }
|
||||||
enum Item_result result_type () const
|
|
||||||
{ return Type_handler_hybrid_field_type::result_type(); }
|
|
||||||
uint cols() const { return this_item()->cols(); }
|
uint cols() const { return this_item()->cols(); }
|
||||||
Item* element_index(uint i) { return this_item()->element_index(i); }
|
Item* element_index(uint i) { return this_item()->element_index(i); }
|
||||||
Item** addr(uint i) { return this_item()->addr(i); }
|
Item** addr(uint i) { return this_item()->addr(i); }
|
||||||
@ -2389,7 +2387,6 @@ public:
|
|||||||
Item **this_item_addr(THD *thd, Item **);
|
Item **this_item_addr(THD *thd, Item **);
|
||||||
|
|
||||||
inline enum Type type() const;
|
inline enum Type type() const;
|
||||||
inline Item_result result_type() const;
|
|
||||||
const Type_handler *type_handler() const { return this_item()->type_handler(); }
|
const Type_handler *type_handler() const { return this_item()->type_handler(); }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -2414,12 +2411,6 @@ inline enum Item::Type Item_case_expr::type() const
|
|||||||
return this_item()->type();
|
return this_item()->type();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Item_result Item_case_expr::result_type() const
|
|
||||||
{
|
|
||||||
return this_item()->result_type();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
NAME_CONST(given_name, const_value).
|
NAME_CONST(given_name, const_value).
|
||||||
This 'function' has all properties of the supplied const_value (which is
|
This 'function' has all properties of the supplied const_value (which is
|
||||||
@ -2457,11 +2448,6 @@ public:
|
|||||||
return value_item->type_handler();
|
return value_item->type_handler();
|
||||||
}
|
}
|
||||||
|
|
||||||
Item_result result_type() const
|
|
||||||
{
|
|
||||||
return value_item->result_type();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool const_item() const
|
bool const_item() const
|
||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -2683,10 +2669,6 @@ public:
|
|||||||
const Type_handler *handler= field->type_handler();
|
const Type_handler *handler= field->type_handler();
|
||||||
return handler->type_handler_for_item_field();
|
return handler->type_handler_for_item_field();
|
||||||
}
|
}
|
||||||
enum Item_result result_type () const
|
|
||||||
{
|
|
||||||
return field->result_type();
|
|
||||||
}
|
|
||||||
const Type_handler *cast_to_int_type_handler() const
|
const Type_handler *cast_to_int_type_handler() const
|
||||||
{
|
{
|
||||||
return field->type_handler()->cast_to_int_type_handler();
|
return field->type_handler()->cast_to_int_type_handler();
|
||||||
@ -2830,7 +2812,6 @@ public:
|
|||||||
{ return get_item_copy<Item_field_row>(thd, mem_root, this); }
|
{ return get_item_copy<Item_field_row>(thd, mem_root, this); }
|
||||||
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_row; }
|
const Type_handler *type_handler() const { return &type_handler_row; }
|
||||||
Item_result result_type() const{ return ROW_RESULT ; }
|
|
||||||
uint cols() const { return arg_count; }
|
uint cols() const { return arg_count; }
|
||||||
bool element_index_by_name(uint *idx, const LEX_CSTRING &name) const;
|
bool element_index_by_name(uint *idx, const LEX_CSTRING &name) const;
|
||||||
Item* element_index(uint i) { return arg_count ? args[i] : this; }
|
Item* element_index(uint i) { return arg_count ? args[i] : this; }
|
||||||
@ -2909,7 +2890,6 @@ public:
|
|||||||
int save_in_field(Field *field, bool no_conversions);
|
int save_in_field(Field *field, bool no_conversions);
|
||||||
int save_safe_in_field(Field *field);
|
int save_safe_in_field(Field *field);
|
||||||
bool send(Protocol *protocol, st_value *buffer);
|
bool send(Protocol *protocol, st_value *buffer);
|
||||||
enum Item_result result_type () const { return STRING_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_null; }
|
const Type_handler *type_handler() const { return &type_handler_null; }
|
||||||
bool basic_const_item() const { return 1; }
|
bool basic_const_item() const { return 1; }
|
||||||
Item *clone_item(THD *thd);
|
Item *clone_item(THD *thd);
|
||||||
@ -3089,8 +3069,6 @@ public:
|
|||||||
|
|
||||||
const Type_handler *type_handler() const
|
const Type_handler *type_handler() const
|
||||||
{ return Type_handler_hybrid_field_type::type_handler(); }
|
{ return Type_handler_hybrid_field_type::type_handler(); }
|
||||||
enum Item_result result_type () const
|
|
||||||
{ return Type_handler_hybrid_field_type::result_type(); }
|
|
||||||
|
|
||||||
Item_param(THD *thd, const LEX_CSTRING *name_arg,
|
Item_param(THD *thd, const LEX_CSTRING *name_arg,
|
||||||
uint pos_in_query_arg, uint len_in_query_arg);
|
uint pos_in_query_arg, uint len_in_query_arg);
|
||||||
@ -3225,7 +3203,6 @@ public:
|
|||||||
}
|
}
|
||||||
Item_int(THD *thd, const char *str_arg, uint length=64);
|
Item_int(THD *thd, const char *str_arg, uint length=64);
|
||||||
enum Type type() const { return INT_ITEM; }
|
enum Type type() const { return INT_ITEM; }
|
||||||
enum Item_result result_type () const { return INT_RESULT; }
|
|
||||||
const Type_handler *type_handler() const
|
const Type_handler *type_handler() const
|
||||||
{
|
{
|
||||||
// The same condition is repeated in Item::create_tmp_field()
|
// The same condition is repeated in Item::create_tmp_field()
|
||||||
@ -3317,7 +3294,6 @@ public:
|
|||||||
Item_decimal(THD *thd, const uchar *bin, int precision, int scale);
|
Item_decimal(THD *thd, const uchar *bin, int precision, int scale);
|
||||||
|
|
||||||
enum Type type() const { return DECIMAL_ITEM; }
|
enum Type type() const { return DECIMAL_ITEM; }
|
||||||
enum Item_result result_type () const { return DECIMAL_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_newdecimal; }
|
const Type_handler *type_handler() const { return &type_handler_newdecimal; }
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
double val_real();
|
double val_real();
|
||||||
@ -3498,7 +3474,6 @@ public:
|
|||||||
}
|
}
|
||||||
my_decimal *val_decimal(my_decimal *);
|
my_decimal *val_decimal(my_decimal *);
|
||||||
int save_in_field(Field *field, bool no_conversions);
|
int save_in_field(Field *field, bool no_conversions);
|
||||||
enum Item_result result_type () const { return STRING_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_varchar; }
|
const Type_handler *type_handler() const { return &type_handler_varchar; }
|
||||||
bool basic_const_item() const { return 1; }
|
bool basic_const_item() const { return 1; }
|
||||||
bool eq(const Item *item, bool binary_cmp) const
|
bool eq(const Item *item, bool binary_cmp) const
|
||||||
@ -3770,7 +3745,6 @@ public:
|
|||||||
hex_string_init(thd, str, str_length);
|
hex_string_init(thd, str, str_length);
|
||||||
}
|
}
|
||||||
enum Type type() const { return VARBIN_ITEM; }
|
enum Type type() const { return VARBIN_ITEM; }
|
||||||
enum Item_result result_type () const { return STRING_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_varchar; }
|
const Type_handler *type_handler() const { return &type_handler_varchar; }
|
||||||
virtual Item *safe_charset_converter(THD *thd, CHARSET_INFO *tocs)
|
virtual Item *safe_charset_converter(THD *thd, CHARSET_INFO *tocs)
|
||||||
{
|
{
|
||||||
@ -3907,7 +3881,6 @@ public:
|
|||||||
bool const_item() const { return true; }
|
bool const_item() const { return true; }
|
||||||
enum Type type() const { return DATE_ITEM; }
|
enum Type type() const { return DATE_ITEM; }
|
||||||
bool eq(const Item *item, bool binary_cmp) const;
|
bool eq(const Item *item, bool binary_cmp) const;
|
||||||
enum Item_result result_type () const { return STRING_RESULT; }
|
|
||||||
|
|
||||||
bool check_partition_func_processor(void *int_arg) {return FALSE;}
|
bool check_partition_func_processor(void *int_arg) {return FALSE;}
|
||||||
|
|
||||||
@ -4305,7 +4278,6 @@ public:
|
|||||||
void save_org_in_field(Field *field, fast_field_copier optimizer_data);
|
void save_org_in_field(Field *field, fast_field_copier optimizer_data);
|
||||||
fast_field_copier setup_fast_field_copier(Field *field)
|
fast_field_copier setup_fast_field_copier(Field *field)
|
||||||
{ return (*ref)->setup_fast_field_copier(field); }
|
{ return (*ref)->setup_fast_field_copier(field); }
|
||||||
enum Item_result result_type () const { return (*ref)->result_type(); }
|
|
||||||
const Type_handler *type_handler() const { return (*ref)->type_handler(); }
|
const Type_handler *type_handler() const { return (*ref)->type_handler(); }
|
||||||
const Type_handler *real_type_handler() const
|
const Type_handler *real_type_handler() const
|
||||||
{ return (*ref)->real_type_handler(); }
|
{ return (*ref)->real_type_handler(); }
|
||||||
@ -4603,7 +4575,6 @@ public:
|
|||||||
}
|
}
|
||||||
int save_in_field(Field *to, bool no_conversions);
|
int save_in_field(Field *to, bool no_conversions);
|
||||||
const Type_handler *type_handler() const { return orig_item->type_handler(); }
|
const Type_handler *type_handler() const { return orig_item->type_handler(); }
|
||||||
enum Item_result result_type () const { return orig_item->result_type(); }
|
|
||||||
table_map used_tables() const { return orig_item->used_tables(); }
|
table_map used_tables() const { return orig_item->used_tables(); }
|
||||||
void update_used_tables()
|
void update_used_tables()
|
||||||
{
|
{
|
||||||
@ -5023,8 +4994,6 @@ public:
|
|||||||
|
|
||||||
const Type_handler *type_handler() const
|
const Type_handler *type_handler() const
|
||||||
{ return Type_handler_hybrid_field_type::type_handler(); }
|
{ return Type_handler_hybrid_field_type::type_handler(); }
|
||||||
enum Item_result result_type () const
|
|
||||||
{ return Type_handler_hybrid_field_type::result_type(); }
|
|
||||||
|
|
||||||
void make_field(THD *thd, Send_field *field) { item->make_field(thd, field); }
|
void make_field(THD *thd, Send_field *field) { item->make_field(thd, field); }
|
||||||
table_map used_tables() const { return (table_map) 1L; }
|
table_map used_tables() const { return (table_map) 1L; }
|
||||||
@ -5551,8 +5520,6 @@ public:
|
|||||||
|
|
||||||
const Type_handler *type_handler() const
|
const Type_handler *type_handler() const
|
||||||
{ return Type_handler_hybrid_field_type::type_handler(); }
|
{ return Type_handler_hybrid_field_type::type_handler(); }
|
||||||
enum Item_result result_type () const
|
|
||||||
{ return Type_handler_hybrid_field_type::result_type(); }
|
|
||||||
|
|
||||||
virtual void keep_array() {}
|
virtual void keep_array() {}
|
||||||
virtual void print(String *str, enum_query_type query_type);
|
virtual void print(String *str, enum_query_type query_type);
|
||||||
@ -5653,7 +5620,6 @@ public:
|
|||||||
longlong val_int();
|
longlong val_int();
|
||||||
String* val_str(String *str);
|
String* val_str(String *str);
|
||||||
my_decimal *val_decimal(my_decimal *);
|
my_decimal *val_decimal(my_decimal *);
|
||||||
enum Item_result result_type() const { return INT_RESULT; }
|
|
||||||
bool cache_value();
|
bool cache_value();
|
||||||
int save_in_field(Field *field, bool no_conversions);
|
int save_in_field(Field *field, bool no_conversions);
|
||||||
Item *convert_to_basic_const_item(THD *thd);
|
Item *convert_to_basic_const_item(THD *thd);
|
||||||
@ -5699,7 +5665,6 @@ public:
|
|||||||
longlong val_int();
|
longlong val_int();
|
||||||
String* val_str(String *str);
|
String* val_str(String *str);
|
||||||
my_decimal *val_decimal(my_decimal *);
|
my_decimal *val_decimal(my_decimal *);
|
||||||
enum Item_result result_type() const { return REAL_RESULT; }
|
|
||||||
bool cache_value();
|
bool cache_value();
|
||||||
Item *convert_to_basic_const_item(THD *thd);
|
Item *convert_to_basic_const_item(THD *thd);
|
||||||
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
|
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
|
||||||
@ -5718,7 +5683,6 @@ public:
|
|||||||
longlong val_int();
|
longlong val_int();
|
||||||
String* val_str(String *str);
|
String* val_str(String *str);
|
||||||
my_decimal *val_decimal(my_decimal *);
|
my_decimal *val_decimal(my_decimal *);
|
||||||
enum Item_result result_type() const { return DECIMAL_RESULT; }
|
|
||||||
bool cache_value();
|
bool cache_value();
|
||||||
Item *convert_to_basic_const_item(THD *thd);
|
Item *convert_to_basic_const_item(THD *thd);
|
||||||
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
|
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
|
||||||
@ -5745,7 +5709,6 @@ public:
|
|||||||
longlong val_int();
|
longlong val_int();
|
||||||
String* val_str(String *);
|
String* val_str(String *);
|
||||||
my_decimal *val_decimal(my_decimal *);
|
my_decimal *val_decimal(my_decimal *);
|
||||||
enum Item_result result_type() const { return STRING_RESULT; }
|
|
||||||
CHARSET_INFO *charset() const { return value->charset(); };
|
CHARSET_INFO *charset() const { return value->charset(); };
|
||||||
int save_in_field(Field *field, bool no_conversions);
|
int save_in_field(Field *field, bool no_conversions);
|
||||||
bool cache_value();
|
bool cache_value();
|
||||||
@ -5827,8 +5790,6 @@ public:
|
|||||||
return 0;
|
return 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum Item_result result_type() const { return ROW_RESULT; }
|
|
||||||
|
|
||||||
uint cols() const { return item_count; }
|
uint cols() const { return item_count; }
|
||||||
Item *element_index(uint i) { return values[i]; }
|
Item *element_index(uint i) { return values[i]; }
|
||||||
Item **addr(uint i) { return (Item **) (values + i); }
|
Item **addr(uint i) { return (Item **) (values + i); }
|
||||||
@ -5878,22 +5839,6 @@ public:
|
|||||||
const Type_handler *handler= Type_handler_hybrid_field_type::type_handler();
|
const Type_handler *handler= Type_handler_hybrid_field_type::type_handler();
|
||||||
return handler->type_handler_for_item_field();
|
return handler->type_handler_for_item_field();
|
||||||
}
|
}
|
||||||
enum Item_result result_type () const
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
In 10.1 Item_type_holder::result_type() returned
|
|
||||||
Field::result_merge_type(field_type()), which returned STRING_RESULT
|
|
||||||
for the BIT data type. In 10.2 it returns INT_RESULT, similar
|
|
||||||
to what Field_bit::result_type() does. This should not be
|
|
||||||
important because Item_type_holder is a limited purpose Item
|
|
||||||
and its result_type() should not be called from outside of
|
|
||||||
Item_type_holder. It's called only internally from decimal_int_part()
|
|
||||||
from join_types(), to calculate "decimals" of the result data type.
|
|
||||||
As soon as we get BIT as one of the joined types, the result field
|
|
||||||
type cannot be numeric: it's either BIT, or VARBINARY.
|
|
||||||
*/
|
|
||||||
return Type_handler_hybrid_field_type::result_type();
|
|
||||||
}
|
|
||||||
const Type_handler *real_type_handler() const
|
const Type_handler *real_type_handler() const
|
||||||
{
|
{
|
||||||
return Type_handler_hybrid_field_type::type_handler();
|
return Type_handler_hybrid_field_type::type_handler();
|
||||||
|
@ -4745,7 +4745,7 @@ Item_func_set_user_var::check(bool use_result_field)
|
|||||||
if (use_result_field && !result_field)
|
if (use_result_field && !result_field)
|
||||||
use_result_field= FALSE;
|
use_result_field= FALSE;
|
||||||
|
|
||||||
switch (Item_func_set_user_var::result_type()) {
|
switch (result_type()) {
|
||||||
case REAL_RESULT:
|
case REAL_RESULT:
|
||||||
{
|
{
|
||||||
save_result.vreal= use_result_field ? result_field->val_real() :
|
save_result.vreal= use_result_field ? result_field->val_real() :
|
||||||
@ -4838,7 +4838,7 @@ Item_func_set_user_var::update()
|
|||||||
bool res= 0;
|
bool res= 0;
|
||||||
DBUG_ENTER("Item_func_set_user_var::update");
|
DBUG_ENTER("Item_func_set_user_var::update");
|
||||||
|
|
||||||
switch (Item_func_set_user_var::result_type()) {
|
switch (result_type()) {
|
||||||
case REAL_RESULT:
|
case REAL_RESULT:
|
||||||
{
|
{
|
||||||
res= update_hash((void*) &save_result.vreal,sizeof(save_result.vreal),
|
res= update_hash((void*) &save_result.vreal,sizeof(save_result.vreal),
|
||||||
@ -5308,7 +5308,7 @@ void Item_func_get_user_var::fix_length_and_dec()
|
|||||||
max_length= m_var_entry->length;
|
max_length= m_var_entry->length;
|
||||||
collation.set(m_var_entry->charset(), DERIVATION_IMPLICIT);
|
collation.set(m_var_entry->charset(), DERIVATION_IMPLICIT);
|
||||||
set_handler_by_result_type(m_var_entry->type);
|
set_handler_by_result_type(m_var_entry->type);
|
||||||
switch (Item_func_get_user_var::result_type()) {
|
switch (result_type()) {
|
||||||
case REAL_RESULT:
|
case REAL_RESULT:
|
||||||
fix_char_length(DBL_DIG + 8);
|
fix_char_length(DBL_DIG + 8);
|
||||||
break;
|
break;
|
||||||
@ -5585,32 +5585,6 @@ bool Item_func_get_system_var::check_vcol_func_processor(void *arg)
|
|||||||
return mark_unsupported_function("@@", var->name.str, arg, VCOL_SESSION_FUNC);
|
return mark_unsupported_function("@@", var->name.str, arg, VCOL_SESSION_FUNC);
|
||||||
}
|
}
|
||||||
|
|
||||||
enum Item_result Item_func_get_system_var::result_type() const
|
|
||||||
{
|
|
||||||
switch (var->show_type())
|
|
||||||
{
|
|
||||||
case SHOW_BOOL:
|
|
||||||
case SHOW_MY_BOOL:
|
|
||||||
case SHOW_SINT:
|
|
||||||
case SHOW_SLONG:
|
|
||||||
case SHOW_SLONGLONG:
|
|
||||||
case SHOW_UINT:
|
|
||||||
case SHOW_ULONG:
|
|
||||||
case SHOW_ULONGLONG:
|
|
||||||
case SHOW_HA_ROWS:
|
|
||||||
return INT_RESULT;
|
|
||||||
case SHOW_CHAR:
|
|
||||||
case SHOW_CHAR_PTR:
|
|
||||||
case SHOW_LEX_STRING:
|
|
||||||
return STRING_RESULT;
|
|
||||||
case SHOW_DOUBLE:
|
|
||||||
return REAL_RESULT;
|
|
||||||
default:
|
|
||||||
my_error(ER_VAR_CANT_BE_READ, MYF(0), var->name.str);
|
|
||||||
return STRING_RESULT; // keep the compiler happy
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const Type_handler *Item_func_get_system_var::type_handler() const
|
const Type_handler *Item_func_get_system_var::type_handler() const
|
||||||
{
|
{
|
||||||
@ -6453,20 +6427,13 @@ Item_func_sp::make_field(THD *thd, Send_field *tmp_field)
|
|||||||
const Type_handler *Item_func_sp::type_handler() const
|
const Type_handler *Item_func_sp::type_handler() const
|
||||||
{
|
{
|
||||||
DBUG_ENTER("Item_func_sp::type_handler");
|
DBUG_ENTER("Item_func_sp::type_handler");
|
||||||
|
DBUG_PRINT("info", ("m_sp = %p", (void *) m_sp));
|
||||||
DBUG_ASSERT(sp_result_field);
|
DBUG_ASSERT(sp_result_field);
|
||||||
// This converts ENUM/SET to STRING
|
// This converts ENUM/SET to STRING
|
||||||
const Type_handler *handler= sp_result_field->type_handler();
|
const Type_handler *handler= sp_result_field->type_handler();
|
||||||
DBUG_RETURN(handler->type_handler_for_item_field());
|
DBUG_RETURN(handler->type_handler_for_item_field());
|
||||||
}
|
}
|
||||||
|
|
||||||
Item_result
|
|
||||||
Item_func_sp::result_type() const
|
|
||||||
{
|
|
||||||
DBUG_ENTER("Item_func_sp::result_type");
|
|
||||||
DBUG_PRINT("info", ("m_sp = %p", (void *) m_sp));
|
|
||||||
DBUG_ASSERT(sp_result_field);
|
|
||||||
DBUG_RETURN(sp_result_field->result_type());
|
|
||||||
}
|
|
||||||
|
|
||||||
longlong Item_func_found_rows::val_int()
|
longlong Item_func_found_rows::val_int()
|
||||||
{
|
{
|
||||||
|
@ -370,7 +370,6 @@ public:
|
|||||||
my_decimal *val_decimal(my_decimal *decimal_value);
|
my_decimal *val_decimal(my_decimal *decimal_value);
|
||||||
longlong val_int()
|
longlong val_int()
|
||||||
{ DBUG_ASSERT(fixed == 1); return (longlong) rint(val_real()); }
|
{ DBUG_ASSERT(fixed == 1); return (longlong) rint(val_real()); }
|
||||||
enum Item_result result_type () const { return REAL_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_double; }
|
const Type_handler *type_handler() const { return &type_handler_double; }
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{ decimals= NOT_FIXED_DEC; max_length= float_length(decimals); }
|
{ decimals= NOT_FIXED_DEC; max_length= float_length(decimals); }
|
||||||
@ -397,8 +396,6 @@ public:
|
|||||||
:Item_func(thd, item), Type_handler_hybrid_field_type(item) { }
|
:Item_func(thd, item), Type_handler_hybrid_field_type(item) { }
|
||||||
const Type_handler *type_handler() const
|
const Type_handler *type_handler() const
|
||||||
{ return Type_handler_hybrid_field_type::type_handler(); }
|
{ return Type_handler_hybrid_field_type::type_handler(); }
|
||||||
enum Item_result result_type () const
|
|
||||||
{ return Type_handler_hybrid_field_type::result_type(); }
|
|
||||||
Field::geometry_type get_geometry_type() const
|
Field::geometry_type get_geometry_type() const
|
||||||
{ return Type_geometry_attributes::get_geometry_type(); };
|
{ return Type_geometry_attributes::get_geometry_type(); };
|
||||||
};
|
};
|
||||||
@ -731,7 +728,6 @@ public:
|
|||||||
{ collation.set_numeric(); }
|
{ collation.set_numeric(); }
|
||||||
double val_real();
|
double val_real();
|
||||||
String *val_str(String*str);
|
String *val_str(String*str);
|
||||||
enum Item_result result_type () const { return INT_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_longlong; }
|
const Type_handler *type_handler() const { return &type_handler_longlong; }
|
||||||
void fix_length_and_dec() {}
|
void fix_length_and_dec() {}
|
||||||
};
|
};
|
||||||
@ -903,7 +899,6 @@ public:
|
|||||||
double val_real();
|
double val_real();
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
my_decimal *val_decimal(my_decimal*);
|
my_decimal *val_decimal(my_decimal*);
|
||||||
enum Item_result result_type () const { return DECIMAL_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_newdecimal; }
|
const Type_handler *type_handler() const { return &type_handler_newdecimal; }
|
||||||
void fix_length_and_dec_generic() {}
|
void fix_length_and_dec_generic() {}
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
@ -1539,7 +1534,6 @@ public:
|
|||||||
my_decimal *val_decimal(my_decimal *dec) { return args[0]->val_decimal(dec); }
|
my_decimal *val_decimal(my_decimal *dec) { return args[0]->val_decimal(dec); }
|
||||||
const char *func_name() const { return "rollup_const"; }
|
const char *func_name() const { return "rollup_const"; }
|
||||||
bool const_item() const { return 0; }
|
bool const_item() const { return 0; }
|
||||||
Item_result result_type() const { return args[0]->result_type(); }
|
|
||||||
const Type_handler *type_handler() const { return args[0]->type_handler(); }
|
const Type_handler *type_handler() const { return args[0]->type_handler(); }
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
@ -1913,7 +1907,6 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
void cleanup();
|
void cleanup();
|
||||||
Item_result result_type () const { return udf.result_type(); }
|
|
||||||
table_map not_null_tables() const { return 0; }
|
table_map not_null_tables() const { return 0; }
|
||||||
bool is_expensive() { return 1; }
|
bool is_expensive() { return 1; }
|
||||||
virtual void print(String *str, enum_query_type query_type);
|
virtual void print(String *str, enum_query_type query_type);
|
||||||
@ -1965,7 +1958,6 @@ public:
|
|||||||
longlong val_int();
|
longlong val_int();
|
||||||
double val_real() { return (double) Item_func_udf_int::val_int(); }
|
double val_real() { return (double) Item_func_udf_int::val_int(); }
|
||||||
String *val_str(String *str);
|
String *val_str(String *str);
|
||||||
enum Item_result result_type () const { return INT_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_longlong; }
|
const Type_handler *type_handler() const { return &type_handler_longlong; }
|
||||||
void fix_length_and_dec() { decimals= 0; max_length= 21; }
|
void fix_length_and_dec() { decimals= 0; max_length= 21; }
|
||||||
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
|
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
|
||||||
@ -1984,7 +1976,6 @@ public:
|
|||||||
double val_real();
|
double val_real();
|
||||||
my_decimal *val_decimal(my_decimal *);
|
my_decimal *val_decimal(my_decimal *);
|
||||||
String *val_str(String *str);
|
String *val_str(String *str);
|
||||||
enum Item_result result_type () const { return DECIMAL_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_newdecimal; }
|
const Type_handler *type_handler() const { return &type_handler_newdecimal; }
|
||||||
void fix_length_and_dec() { fix_num_length_and_dec(); }
|
void fix_length_and_dec() { fix_num_length_and_dec(); }
|
||||||
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
|
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
|
||||||
@ -2024,7 +2015,6 @@ public:
|
|||||||
string2my_decimal(E_DEC_FATAL_ERROR, res, dec_buf);
|
string2my_decimal(E_DEC_FATAL_ERROR, res, dec_buf);
|
||||||
return dec_buf;
|
return dec_buf;
|
||||||
}
|
}
|
||||||
enum Item_result result_type () const { return STRING_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return string_type_handler(); }
|
const Type_handler *type_handler() const { return string_type_handler(); }
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
|
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
|
||||||
@ -2077,7 +2067,6 @@ public:
|
|||||||
{ DBUG_ASSERT(fixed == 1); null_value=1; return 0; }
|
{ DBUG_ASSERT(fixed == 1); null_value=1; return 0; }
|
||||||
double val_real() { DBUG_ASSERT(fixed == 1); null_value= 1; return 0.0; }
|
double val_real() { DBUG_ASSERT(fixed == 1); null_value= 1; return 0.0; }
|
||||||
longlong val_int() { DBUG_ASSERT(fixed == 1); null_value=1; return 0; }
|
longlong val_int() { DBUG_ASSERT(fixed == 1); null_value=1; return 0; }
|
||||||
enum Item_result result_type () const { return STRING_RESULT; }
|
|
||||||
void fix_length_and_dec() { maybe_null=1; max_length=0; }
|
void fix_length_and_dec() { maybe_null=1; max_length=0; }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -2390,7 +2379,6 @@ public:
|
|||||||
void print(String *str, enum_query_type query_type);
|
void print(String *str, enum_query_type query_type);
|
||||||
bool const_item() const { return true; }
|
bool const_item() const { return true; }
|
||||||
table_map used_tables() const { return 0; }
|
table_map used_tables() const { return 0; }
|
||||||
enum Item_result result_type() const;
|
|
||||||
const Type_handler *type_handler() const;
|
const Type_handler *type_handler() const;
|
||||||
double val_real();
|
double val_real();
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
@ -2661,8 +2649,6 @@ public:
|
|||||||
}
|
}
|
||||||
void make_field(THD *thd, Send_field *tmp_field);
|
void make_field(THD *thd, Send_field *tmp_field);
|
||||||
|
|
||||||
Item_result result_type() const;
|
|
||||||
|
|
||||||
longlong val_int()
|
longlong val_int()
|
||||||
{
|
{
|
||||||
if (execute())
|
if (execute())
|
||||||
@ -2834,7 +2820,6 @@ public:
|
|||||||
String *val_str(String *);
|
String *val_str(String *);
|
||||||
my_decimal *val_decimal(my_decimal *);
|
my_decimal *val_decimal(my_decimal *);
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
enum Item_result result_type () const { return last_value->result_type(); }
|
|
||||||
const char *func_name() const { return "last_value"; }
|
const char *func_name() const { return "last_value"; }
|
||||||
table_map not_null_tables() const { return 0; }
|
table_map not_null_tables() const { return 0; }
|
||||||
const Type_handler *type_handler() const { return last_value->type_handler(); }
|
const Type_handler *type_handler() const { return last_value->type_handler(); }
|
||||||
|
@ -90,7 +90,6 @@ public:
|
|||||||
List<Item> &fields, uint flags);
|
List<Item> &fields, uint flags);
|
||||||
table_map used_tables() const { return used_tables_cache; };
|
table_map used_tables() const { return used_tables_cache; };
|
||||||
bool const_item() const { return const_item_cache; };
|
bool const_item() const { return const_item_cache; };
|
||||||
enum Item_result result_type() const { return ROW_RESULT; }
|
|
||||||
void update_used_tables()
|
void update_used_tables()
|
||||||
{
|
{
|
||||||
used_tables_and_const_cache_init();
|
used_tables_and_const_cache_init();
|
||||||
|
@ -64,7 +64,6 @@ public:
|
|||||||
longlong val_int();
|
longlong val_int();
|
||||||
double val_real();
|
double val_real();
|
||||||
my_decimal *val_decimal(my_decimal *);
|
my_decimal *val_decimal(my_decimal *);
|
||||||
enum Item_result result_type () const { return STRING_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return string_type_handler(); }
|
const Type_handler *type_handler() const { return string_type_handler(); }
|
||||||
void left_right_max_length();
|
void left_right_max_length();
|
||||||
bool fix_fields(THD *thd, Item **ref);
|
bool fix_fields(THD *thd, Item **ref);
|
||||||
|
@ -1172,11 +1172,6 @@ void Item_singlerow_subselect::store(uint i, Item *item)
|
|||||||
row[i]->cache_value();
|
row[i]->cache_value();
|
||||||
}
|
}
|
||||||
|
|
||||||
enum Item_result Item_singlerow_subselect::result_type() const
|
|
||||||
{
|
|
||||||
return engine->result_type();
|
|
||||||
}
|
|
||||||
|
|
||||||
const Type_handler *Item_singlerow_subselect::type_handler() const
|
const Type_handler *Item_singlerow_subselect::type_handler() const
|
||||||
{
|
{
|
||||||
return engine->type_handler();
|
return engine->type_handler();
|
||||||
|
@ -303,7 +303,6 @@ public:
|
|||||||
my_decimal *val_decimal(my_decimal *);
|
my_decimal *val_decimal(my_decimal *);
|
||||||
bool val_bool();
|
bool val_bool();
|
||||||
bool get_date(MYSQL_TIME *ltime, ulonglong fuzzydate);
|
bool get_date(MYSQL_TIME *ltime, ulonglong fuzzydate);
|
||||||
enum Item_result result_type() const;
|
|
||||||
const Type_handler *type_handler() const;
|
const Type_handler *type_handler() const;
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
|
|
||||||
@ -394,7 +393,6 @@ public:
|
|||||||
}
|
}
|
||||||
void no_rows_in_result();
|
void no_rows_in_result();
|
||||||
|
|
||||||
enum Item_result result_type() const { return INT_RESULT;}
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_longlong; }
|
const Type_handler *type_handler() const { return &type_handler_longlong; }
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
double val_real();
|
double val_real();
|
||||||
|
@ -1229,7 +1229,7 @@ Item_sum_sum::Item_sum_sum(THD *thd, Item_sum_sum *item)
|
|||||||
count(item->count)
|
count(item->count)
|
||||||
{
|
{
|
||||||
/* TODO: check if the following assignments are really needed */
|
/* TODO: check if the following assignments are really needed */
|
||||||
if (Item_sum_sum::result_type() == DECIMAL_RESULT)
|
if (result_type() == DECIMAL_RESULT)
|
||||||
{
|
{
|
||||||
my_decimal2decimal(item->dec_buffs, dec_buffs);
|
my_decimal2decimal(item->dec_buffs, dec_buffs);
|
||||||
my_decimal2decimal(item->dec_buffs + 1, dec_buffs + 1);
|
my_decimal2decimal(item->dec_buffs + 1, dec_buffs + 1);
|
||||||
@ -1249,7 +1249,7 @@ void Item_sum_sum::clear()
|
|||||||
DBUG_ENTER("Item_sum_sum::clear");
|
DBUG_ENTER("Item_sum_sum::clear");
|
||||||
null_value=1;
|
null_value=1;
|
||||||
count= 0;
|
count= 0;
|
||||||
if (Item_sum_sum::result_type() == DECIMAL_RESULT)
|
if (result_type() == DECIMAL_RESULT)
|
||||||
{
|
{
|
||||||
curr_dec_buff= 0;
|
curr_dec_buff= 0;
|
||||||
my_decimal_set_zero(dec_buffs);
|
my_decimal_set_zero(dec_buffs);
|
||||||
@ -1304,7 +1304,7 @@ void Item_sum_sum::add_helper(bool perform_removal)
|
|||||||
{
|
{
|
||||||
DBUG_ENTER("Item_sum_sum::add_helper");
|
DBUG_ENTER("Item_sum_sum::add_helper");
|
||||||
|
|
||||||
if (Item_sum_sum::result_type() == DECIMAL_RESULT)
|
if (result_type() == DECIMAL_RESULT)
|
||||||
{
|
{
|
||||||
my_decimal value;
|
my_decimal value;
|
||||||
const my_decimal *val= aggr->arg_val_decimal(&value);
|
const my_decimal *val= aggr->arg_val_decimal(&value);
|
||||||
@ -1361,7 +1361,7 @@ longlong Item_sum_sum::val_int()
|
|||||||
DBUG_ASSERT(fixed == 1);
|
DBUG_ASSERT(fixed == 1);
|
||||||
if (aggr)
|
if (aggr)
|
||||||
aggr->endup();
|
aggr->endup();
|
||||||
if (Item_sum_sum::result_type() == DECIMAL_RESULT)
|
if (result_type() == DECIMAL_RESULT)
|
||||||
{
|
{
|
||||||
longlong result;
|
longlong result;
|
||||||
my_decimal2int(E_DEC_FATAL_ERROR, dec_buffs + curr_dec_buff, unsigned_flag,
|
my_decimal2int(E_DEC_FATAL_ERROR, dec_buffs + curr_dec_buff, unsigned_flag,
|
||||||
@ -1377,7 +1377,7 @@ double Item_sum_sum::val_real()
|
|||||||
DBUG_ASSERT(fixed == 1);
|
DBUG_ASSERT(fixed == 1);
|
||||||
if (aggr)
|
if (aggr)
|
||||||
aggr->endup();
|
aggr->endup();
|
||||||
if (Item_sum_sum::result_type() == DECIMAL_RESULT)
|
if (result_type() == DECIMAL_RESULT)
|
||||||
my_decimal2double(E_DEC_FATAL_ERROR, dec_buffs + curr_dec_buff, &sum);
|
my_decimal2double(E_DEC_FATAL_ERROR, dec_buffs + curr_dec_buff, &sum);
|
||||||
return sum;
|
return sum;
|
||||||
}
|
}
|
||||||
@ -1387,7 +1387,7 @@ String *Item_sum_sum::val_str(String *str)
|
|||||||
{
|
{
|
||||||
if (aggr)
|
if (aggr)
|
||||||
aggr->endup();
|
aggr->endup();
|
||||||
if (Item_sum_sum::result_type() == DECIMAL_RESULT)
|
if (result_type() == DECIMAL_RESULT)
|
||||||
return val_string_from_decimal(str);
|
return val_string_from_decimal(str);
|
||||||
return val_string_from_real(str);
|
return val_string_from_real(str);
|
||||||
}
|
}
|
||||||
@ -1397,7 +1397,7 @@ my_decimal *Item_sum_sum::val_decimal(my_decimal *val)
|
|||||||
{
|
{
|
||||||
if (aggr)
|
if (aggr)
|
||||||
aggr->endup();
|
aggr->endup();
|
||||||
if (Item_sum_sum::result_type() == DECIMAL_RESULT)
|
if (result_type() == DECIMAL_RESULT)
|
||||||
return null_value ? NULL : (dec_buffs + curr_dec_buff);
|
return null_value ? NULL : (dec_buffs + curr_dec_buff);
|
||||||
return val_decimal_from_real(val);
|
return val_decimal_from_real(val);
|
||||||
}
|
}
|
||||||
@ -1642,7 +1642,7 @@ Field *Item_sum_avg::create_tmp_field(bool group, TABLE *table)
|
|||||||
and unpack on access.
|
and unpack on access.
|
||||||
*/
|
*/
|
||||||
Field *field= new (table->in_use->mem_root)
|
Field *field= new (table->in_use->mem_root)
|
||||||
Field_string(((Item_sum_avg::result_type() == DECIMAL_RESULT) ?
|
Field_string(((result_type() == DECIMAL_RESULT) ?
|
||||||
dec_bin_size : sizeof(double)) + sizeof(longlong),
|
dec_bin_size : sizeof(double)) + sizeof(longlong),
|
||||||
0, &name, &my_charset_bin);
|
0, &name, &my_charset_bin);
|
||||||
if (field)
|
if (field)
|
||||||
@ -1710,7 +1710,7 @@ my_decimal *Item_sum_avg::val_decimal(my_decimal *val)
|
|||||||
For non-DECIMAL result_type() the division will be done in
|
For non-DECIMAL result_type() the division will be done in
|
||||||
Item_sum_avg::val_real().
|
Item_sum_avg::val_real().
|
||||||
*/
|
*/
|
||||||
if (Item_sum_avg::result_type() != DECIMAL_RESULT)
|
if (result_type() != DECIMAL_RESULT)
|
||||||
return val_decimal_from_real(val);
|
return val_decimal_from_real(val);
|
||||||
|
|
||||||
sum_dec= dec_buffs + curr_dec_buff;
|
sum_dec= dec_buffs + curr_dec_buff;
|
||||||
@ -1724,7 +1724,7 @@ String *Item_sum_avg::val_str(String *str)
|
|||||||
{
|
{
|
||||||
if (aggr)
|
if (aggr)
|
||||||
aggr->endup();
|
aggr->endup();
|
||||||
if (Item_sum_avg::result_type() == DECIMAL_RESULT)
|
if (result_type() == DECIMAL_RESULT)
|
||||||
return val_string_from_decimal(str);
|
return val_string_from_decimal(str);
|
||||||
return val_string_from_real(str);
|
return val_string_from_real(str);
|
||||||
}
|
}
|
||||||
@ -2307,7 +2307,7 @@ void Item_sum_num::reset_field()
|
|||||||
|
|
||||||
void Item_sum_hybrid::reset_field()
|
void Item_sum_hybrid::reset_field()
|
||||||
{
|
{
|
||||||
switch(Item_sum_hybrid::result_type()) {
|
switch(result_type()) {
|
||||||
case STRING_RESULT:
|
case STRING_RESULT:
|
||||||
{
|
{
|
||||||
char buff[MAX_FIELD_WIDTH];
|
char buff[MAX_FIELD_WIDTH];
|
||||||
@ -2390,7 +2390,7 @@ void Item_sum_hybrid::reset_field()
|
|||||||
void Item_sum_sum::reset_field()
|
void Item_sum_sum::reset_field()
|
||||||
{
|
{
|
||||||
DBUG_ASSERT (aggr->Aggrtype() != Aggregator::DISTINCT_AGGREGATOR);
|
DBUG_ASSERT (aggr->Aggrtype() != Aggregator::DISTINCT_AGGREGATOR);
|
||||||
if (Item_sum_sum::result_type() == DECIMAL_RESULT)
|
if (result_type() == DECIMAL_RESULT)
|
||||||
{
|
{
|
||||||
my_decimal value, *arg_val= args[0]->val_decimal(&value);
|
my_decimal value, *arg_val= args[0]->val_decimal(&value);
|
||||||
if (!arg_val) // Null
|
if (!arg_val) // Null
|
||||||
@ -2426,7 +2426,7 @@ void Item_sum_avg::reset_field()
|
|||||||
{
|
{
|
||||||
uchar *res=result_field->ptr;
|
uchar *res=result_field->ptr;
|
||||||
DBUG_ASSERT (aggr->Aggrtype() != Aggregator::DISTINCT_AGGREGATOR);
|
DBUG_ASSERT (aggr->Aggrtype() != Aggregator::DISTINCT_AGGREGATOR);
|
||||||
if (Item_sum_avg::result_type() == DECIMAL_RESULT)
|
if (result_type() == DECIMAL_RESULT)
|
||||||
{
|
{
|
||||||
longlong tmp;
|
longlong tmp;
|
||||||
my_decimal value, *arg_dec= args[0]->val_decimal(&value);
|
my_decimal value, *arg_dec= args[0]->val_decimal(&value);
|
||||||
@ -2484,7 +2484,7 @@ void Item_sum_bit::update_field()
|
|||||||
void Item_sum_sum::update_field()
|
void Item_sum_sum::update_field()
|
||||||
{
|
{
|
||||||
DBUG_ASSERT (aggr->Aggrtype() != Aggregator::DISTINCT_AGGREGATOR);
|
DBUG_ASSERT (aggr->Aggrtype() != Aggregator::DISTINCT_AGGREGATOR);
|
||||||
if (Item_sum_sum::result_type() == DECIMAL_RESULT)
|
if (result_type() == DECIMAL_RESULT)
|
||||||
{
|
{
|
||||||
my_decimal value, *arg_val= args[0]->val_decimal(&value);
|
my_decimal value, *arg_val= args[0]->val_decimal(&value);
|
||||||
if (!args[0]->null_value)
|
if (!args[0]->null_value)
|
||||||
@ -2539,7 +2539,7 @@ void Item_sum_avg::update_field()
|
|||||||
|
|
||||||
DBUG_ASSERT (aggr->Aggrtype() != Aggregator::DISTINCT_AGGREGATOR);
|
DBUG_ASSERT (aggr->Aggrtype() != Aggregator::DISTINCT_AGGREGATOR);
|
||||||
|
|
||||||
if (Item_sum_avg::result_type() == DECIMAL_RESULT)
|
if (result_type() == DECIMAL_RESULT)
|
||||||
{
|
{
|
||||||
my_decimal value, *arg_val= args[0]->val_decimal(&value);
|
my_decimal value, *arg_val= args[0]->val_decimal(&value);
|
||||||
if (!args[0]->null_value)
|
if (!args[0]->null_value)
|
||||||
@ -2578,7 +2578,7 @@ void Item_sum_avg::update_field()
|
|||||||
Item *Item_sum_avg::result_item(THD *thd, Field *field)
|
Item *Item_sum_avg::result_item(THD *thd, Field *field)
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
Item_sum_avg::result_type() == DECIMAL_RESULT ?
|
result_type() == DECIMAL_RESULT ?
|
||||||
(Item_avg_field*) new (thd->mem_root) Item_avg_field_decimal(thd, this) :
|
(Item_avg_field*) new (thd->mem_root) Item_avg_field_decimal(thd, this) :
|
||||||
(Item_avg_field*) new (thd->mem_root) Item_avg_field_double(thd, this);
|
(Item_avg_field*) new (thd->mem_root) Item_avg_field_double(thd, this);
|
||||||
}
|
}
|
||||||
@ -2586,7 +2586,7 @@ Item *Item_sum_avg::result_item(THD *thd, Field *field)
|
|||||||
|
|
||||||
void Item_sum_hybrid::update_field()
|
void Item_sum_hybrid::update_field()
|
||||||
{
|
{
|
||||||
switch (Item_sum_hybrid::result_type()) {
|
switch (result_type()) {
|
||||||
case STRING_RESULT:
|
case STRING_RESULT:
|
||||||
min_max_update_str_field();
|
min_max_update_str_field();
|
||||||
break;
|
break;
|
||||||
|
@ -748,7 +748,6 @@ public:
|
|||||||
double val_real() { DBUG_ASSERT(fixed == 1); return (double) val_int(); }
|
double val_real() { DBUG_ASSERT(fixed == 1); return (double) val_int(); }
|
||||||
String *val_str(String*str);
|
String *val_str(String*str);
|
||||||
my_decimal *val_decimal(my_decimal *);
|
my_decimal *val_decimal(my_decimal *);
|
||||||
enum Item_result result_type () const { return INT_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_longlong; }
|
const Type_handler *type_handler() const { return &type_handler_longlong; }
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{ decimals=0; max_length=21; maybe_null=null_value=0; }
|
{ decimals=0; max_length=21; maybe_null=null_value=0; }
|
||||||
@ -783,8 +782,6 @@ public:
|
|||||||
my_decimal *val_decimal(my_decimal *);
|
my_decimal *val_decimal(my_decimal *);
|
||||||
const Type_handler *type_handler() const
|
const Type_handler *type_handler() const
|
||||||
{ return Type_handler_hybrid_field_type::type_handler(); }
|
{ return Type_handler_hybrid_field_type::type_handler(); }
|
||||||
enum Item_result result_type () const
|
|
||||||
{ return Type_handler_hybrid_field_type::result_type(); }
|
|
||||||
void fix_length_and_dec_double();
|
void fix_length_and_dec_double();
|
||||||
void fix_length_and_dec_decimal();
|
void fix_length_and_dec_decimal();
|
||||||
void reset_field();
|
void reset_field();
|
||||||
@ -976,7 +973,6 @@ public:
|
|||||||
{ return sample ? "var_samp(" : "variance("; }
|
{ return sample ? "var_samp(" : "variance("; }
|
||||||
Item *copy_or_same(THD* thd);
|
Item *copy_or_same(THD* thd);
|
||||||
Field *create_tmp_field(bool group, TABLE *table);
|
Field *create_tmp_field(bool group, TABLE *table);
|
||||||
enum Item_result result_type () const { return REAL_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_double; }
|
const Type_handler *type_handler() const { return &type_handler_double; }
|
||||||
void cleanup()
|
void cleanup()
|
||||||
{
|
{
|
||||||
@ -1048,8 +1044,6 @@ protected:
|
|||||||
}
|
}
|
||||||
const Type_handler *type_handler() const
|
const Type_handler *type_handler() const
|
||||||
{ return Type_handler_hybrid_field_type::type_handler(); }
|
{ return Type_handler_hybrid_field_type::type_handler(); }
|
||||||
enum Item_result result_type () const
|
|
||||||
{ return Type_handler_hybrid_field_type::result_type(); }
|
|
||||||
void update_field();
|
void update_field();
|
||||||
void min_max_update_str_field();
|
void min_max_update_str_field();
|
||||||
void min_max_update_real_field();
|
void min_max_update_real_field();
|
||||||
@ -1255,7 +1249,6 @@ public:
|
|||||||
Item_avg_field_double(THD *thd, Item_sum_avg *item)
|
Item_avg_field_double(THD *thd, Item_sum_avg *item)
|
||||||
:Item_avg_field(thd, item)
|
:Item_avg_field(thd, item)
|
||||||
{ }
|
{ }
|
||||||
enum Item_result result_type () const { return REAL_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_double; }
|
const Type_handler *type_handler() const { return &type_handler_double; }
|
||||||
longlong val_int() { return val_int_from_real(); }
|
longlong val_int() { return val_int_from_real(); }
|
||||||
my_decimal *val_decimal(my_decimal *dec) { return val_decimal_from_real(dec); }
|
my_decimal *val_decimal(my_decimal *dec) { return val_decimal_from_real(dec); }
|
||||||
@ -1276,7 +1269,6 @@ public:
|
|||||||
f_scale(item->f_scale),
|
f_scale(item->f_scale),
|
||||||
dec_bin_size(item->dec_bin_size)
|
dec_bin_size(item->dec_bin_size)
|
||||||
{ }
|
{ }
|
||||||
enum Item_result result_type () const { return DECIMAL_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_newdecimal; }
|
const Type_handler *type_handler() const { return &type_handler_newdecimal; }
|
||||||
double val_real() { return val_real_from_decimal(); }
|
double val_real() { return val_real_from_decimal(); }
|
||||||
longlong val_int() { return val_int_from_decimal(); }
|
longlong val_int() { return val_int_from_decimal(); }
|
||||||
@ -1303,7 +1295,6 @@ public:
|
|||||||
{ return val_decimal_from_real(dec_buf); }
|
{ return val_decimal_from_real(dec_buf); }
|
||||||
bool is_null() { update_null_value(); return null_value; }
|
bool is_null() { update_null_value(); return null_value; }
|
||||||
const Type_handler *type_handler() const { return &type_handler_double; }
|
const Type_handler *type_handler() const { return &type_handler_double; }
|
||||||
enum Item_result result_type () const { return REAL_RESULT; }
|
|
||||||
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
|
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
|
||||||
{ return get_item_copy<Item_variance_field>(thd, mem_root, this); }
|
{ return get_item_copy<Item_variance_field>(thd, mem_root, this); }
|
||||||
};
|
};
|
||||||
@ -1401,7 +1392,6 @@ class Item_sum_udf_float :public Item_udf_sum
|
|||||||
double val_real();
|
double val_real();
|
||||||
String *val_str(String*str);
|
String *val_str(String*str);
|
||||||
my_decimal *val_decimal(my_decimal *);
|
my_decimal *val_decimal(my_decimal *);
|
||||||
enum Item_result result_type () const { return REAL_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_double; }
|
const Type_handler *type_handler() const { return &type_handler_double; }
|
||||||
void fix_length_and_dec() { fix_num_length_and_dec(); }
|
void fix_length_and_dec() { fix_num_length_and_dec(); }
|
||||||
Item *copy_or_same(THD* thd);
|
Item *copy_or_same(THD* thd);
|
||||||
@ -1424,7 +1414,6 @@ public:
|
|||||||
{ DBUG_ASSERT(fixed == 1); return (double) Item_sum_udf_int::val_int(); }
|
{ DBUG_ASSERT(fixed == 1); return (double) Item_sum_udf_int::val_int(); }
|
||||||
String *val_str(String*str);
|
String *val_str(String*str);
|
||||||
my_decimal *val_decimal(my_decimal *);
|
my_decimal *val_decimal(my_decimal *);
|
||||||
enum Item_result result_type () const { return INT_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_longlong; }
|
const Type_handler *type_handler() const { return &type_handler_longlong; }
|
||||||
void fix_length_and_dec() { decimals=0; max_length=21; }
|
void fix_length_and_dec() { decimals=0; max_length=21; }
|
||||||
Item *copy_or_same(THD* thd);
|
Item *copy_or_same(THD* thd);
|
||||||
@ -1466,7 +1455,6 @@ public:
|
|||||||
return cs->cset->strtoll10(cs, res->ptr(), &end, &err_not_used);
|
return cs->cset->strtoll10(cs, res->ptr(), &end, &err_not_used);
|
||||||
}
|
}
|
||||||
my_decimal *val_decimal(my_decimal *dec);
|
my_decimal *val_decimal(my_decimal *dec);
|
||||||
enum Item_result result_type () const { return STRING_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return string_type_handler(); }
|
const Type_handler *type_handler() const { return string_type_handler(); }
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
Item *copy_or_same(THD* thd);
|
Item *copy_or_same(THD* thd);
|
||||||
@ -1488,7 +1476,6 @@ public:
|
|||||||
double val_real();
|
double val_real();
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
my_decimal *val_decimal(my_decimal *);
|
my_decimal *val_decimal(my_decimal *);
|
||||||
enum Item_result result_type () const { return DECIMAL_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_newdecimal; }
|
const Type_handler *type_handler() const { return &type_handler_newdecimal; }
|
||||||
void fix_length_and_dec() { fix_num_length_and_dec(); }
|
void fix_length_and_dec() { fix_num_length_and_dec(); }
|
||||||
Item *copy_or_same(THD* thd);
|
Item *copy_or_same(THD* thd);
|
||||||
@ -1564,7 +1551,6 @@ public:
|
|||||||
{ DBUG_ASSERT(fixed == 1); null_value=1; return 0; }
|
{ DBUG_ASSERT(fixed == 1); null_value=1; return 0; }
|
||||||
double val_real() { DBUG_ASSERT(fixed == 1); null_value=1; return 0.0; }
|
double val_real() { DBUG_ASSERT(fixed == 1); null_value=1; return 0.0; }
|
||||||
longlong val_int() { DBUG_ASSERT(fixed == 1); null_value=1; return 0; }
|
longlong val_int() { DBUG_ASSERT(fixed == 1); null_value=1; return 0; }
|
||||||
enum Item_result result_type () const { return STRING_RESULT; }
|
|
||||||
void fix_length_and_dec() { maybe_null=1; max_length=0; }
|
void fix_length_and_dec() { maybe_null=1; max_length=0; }
|
||||||
enum Sumfunctype sum_func () const { return UDF_SUM_FUNC; }
|
enum Sumfunctype sum_func () const { return UDF_SUM_FUNC; }
|
||||||
void clear() {}
|
void clear() {}
|
||||||
@ -1638,7 +1624,6 @@ public:
|
|||||||
|
|
||||||
enum Sumfunctype sum_func () const {return GROUP_CONCAT_FUNC;}
|
enum Sumfunctype sum_func () const {return GROUP_CONCAT_FUNC;}
|
||||||
const char *func_name() const { return "group_concat("; }
|
const char *func_name() const { return "group_concat("; }
|
||||||
virtual Item_result result_type () const { return STRING_RESULT; }
|
|
||||||
const Type_handler *type_handler() const
|
const Type_handler *type_handler() const
|
||||||
{
|
{
|
||||||
if (too_big_for_varchar())
|
if (too_big_for_varchar())
|
||||||
|
@ -155,7 +155,6 @@ public:
|
|||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
const char *func_name() const { return "month"; }
|
const char *func_name() const { return "month"; }
|
||||||
enum Item_result result_type () const { return INT_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_longlong; }
|
const Type_handler *type_handler() const { return &type_handler_longlong; }
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
@ -405,7 +404,6 @@ public:
|
|||||||
{
|
{
|
||||||
return (odbc_type ? "dayofweek" : "weekday");
|
return (odbc_type ? "dayofweek" : "weekday");
|
||||||
}
|
}
|
||||||
enum Item_result result_type () const { return INT_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_longlong; }
|
const Type_handler *type_handler() const { return &type_handler_longlong; }
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
@ -430,7 +428,6 @@ class Item_func_dayname :public Item_func_weekday
|
|||||||
Item_func_dayname(THD *thd, Item *a): Item_func_weekday(thd, a, 0) {}
|
Item_func_dayname(THD *thd, Item *a): Item_func_weekday(thd, a, 0) {}
|
||||||
const char *func_name() const { return "dayname"; }
|
const char *func_name() const { return "dayname"; }
|
||||||
String *val_str(String *str);
|
String *val_str(String *str);
|
||||||
enum Item_result result_type () const { return STRING_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_varchar; }
|
const Type_handler *type_handler() const { return &type_handler_varchar; }
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
bool check_partition_func_processor(void *int_arg) {return TRUE;}
|
bool check_partition_func_processor(void *int_arg) {return TRUE;}
|
||||||
@ -527,7 +524,6 @@ public:
|
|||||||
Item_temporal_func(THD *thd, Item *a): Item_func(thd, a) {}
|
Item_temporal_func(THD *thd, Item *a): Item_func(thd, a) {}
|
||||||
Item_temporal_func(THD *thd, Item *a, Item *b): Item_func(thd, a, b) {}
|
Item_temporal_func(THD *thd, Item *a, Item *b): Item_func(thd, a, b) {}
|
||||||
Item_temporal_func(THD *thd, Item *a, Item *b, Item *c): Item_func(thd, a, b, c) {}
|
Item_temporal_func(THD *thd, Item *a, Item *b, Item *c): Item_func(thd, a, b, c) {}
|
||||||
enum Item_result result_type () const { return STRING_RESULT; }
|
|
||||||
String *val_str(String *str);
|
String *val_str(String *str);
|
||||||
longlong val_int() { return val_int_from_date(); }
|
longlong val_int() { return val_int_from_date(); }
|
||||||
double val_real() { return val_real_from_date(); }
|
double val_real() { return val_real_from_date(); }
|
||||||
|
@ -250,7 +250,7 @@ bool Item_sum_hybrid_simple::fix_fields(THD *thd, Item **ref)
|
|||||||
set_handler_by_result_type(item2->result_type(),
|
set_handler_by_result_type(item2->result_type(),
|
||||||
max_length, collation.collation);
|
max_length, collation.collation);
|
||||||
|
|
||||||
switch (Item_sum_hybrid_simple::result_type()) {
|
switch (result_type()) {
|
||||||
case INT_RESULT:
|
case INT_RESULT:
|
||||||
case DECIMAL_RESULT:
|
case DECIMAL_RESULT:
|
||||||
case STRING_RESULT:
|
case STRING_RESULT:
|
||||||
@ -352,7 +352,7 @@ Field *Item_sum_hybrid_simple::create_tmp_field(bool group, TABLE *table)
|
|||||||
|
|
||||||
void Item_sum_hybrid_simple::reset_field()
|
void Item_sum_hybrid_simple::reset_field()
|
||||||
{
|
{
|
||||||
switch(Item_sum_hybrid_simple::result_type()) {
|
switch(result_type()) {
|
||||||
case STRING_RESULT:
|
case STRING_RESULT:
|
||||||
{
|
{
|
||||||
char buff[MAX_FIELD_WIDTH];
|
char buff[MAX_FIELD_WIDTH];
|
||||||
|
@ -303,8 +303,6 @@ class Item_sum_hybrid_simple : public Item_sum,
|
|||||||
my_decimal *val_decimal(my_decimal *);
|
my_decimal *val_decimal(my_decimal *);
|
||||||
void reset_field();
|
void reset_field();
|
||||||
String *val_str(String *);
|
String *val_str(String *);
|
||||||
enum Item_result result_type() const
|
|
||||||
{ return Type_handler_hybrid_field_type::result_type(); }
|
|
||||||
const Type_handler *type_handler() const
|
const Type_handler *type_handler() const
|
||||||
{ return Type_handler_hybrid_field_type::type_handler(); }
|
{ return Type_handler_hybrid_field_type::type_handler(); }
|
||||||
void update_field();
|
void update_field();
|
||||||
@ -509,7 +507,6 @@ class Item_sum_percent_rank: public Item_sum_window_with_row_count
|
|||||||
row_number= 0;
|
row_number= 0;
|
||||||
}
|
}
|
||||||
bool add();
|
bool add();
|
||||||
enum Item_result result_type () const { return REAL_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_double; }
|
const Type_handler *type_handler() const { return &type_handler_double; }
|
||||||
|
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
@ -595,7 +592,6 @@ class Item_sum_cume_dist: public Item_sum_window_with_row_count
|
|||||||
}
|
}
|
||||||
|
|
||||||
void update_field() {}
|
void update_field() {}
|
||||||
enum Item_result result_type () const { return REAL_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_double; }
|
const Type_handler *type_handler() const { return &type_handler_double; }
|
||||||
|
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
@ -672,7 +668,6 @@ class Item_sum_ntile : public Item_sum_window_with_row_count
|
|||||||
|
|
||||||
void update_field() {}
|
void update_field() {}
|
||||||
|
|
||||||
enum Item_result result_type () const { return INT_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_longlong; }
|
const Type_handler *type_handler() const { return &type_handler_longlong; }
|
||||||
|
|
||||||
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
|
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
|
||||||
|
@ -71,7 +71,6 @@ public:
|
|||||||
{
|
{
|
||||||
decimals=dec; max_length=float_length(dec);
|
decimals=dec; max_length=float_length(dec);
|
||||||
}
|
}
|
||||||
enum Item_result result_type () const { return REAL_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_double; }
|
const Type_handler *type_handler() const { return &type_handler_double; }
|
||||||
void set(double nr) { value=nr; }
|
void set(double nr) { value=nr; }
|
||||||
void set(longlong nr) { value=(double) nr; }
|
void set(longlong nr) { value=(double) nr; }
|
||||||
@ -98,7 +97,6 @@ class Item_proc_int :public Item_proc
|
|||||||
public:
|
public:
|
||||||
Item_proc_int(THD *thd, const char *name_par): Item_proc(thd, name_par)
|
Item_proc_int(THD *thd, const char *name_par): Item_proc(thd, name_par)
|
||||||
{ max_length=11; }
|
{ max_length=11; }
|
||||||
enum Item_result result_type () const { return INT_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_longlong; }
|
const Type_handler *type_handler() const { return &type_handler_longlong; }
|
||||||
void set(double nr) { value=(longlong) nr; }
|
void set(double nr) { value=(longlong) nr; }
|
||||||
void set(longlong nr) { value=nr; }
|
void set(longlong nr) { value=nr; }
|
||||||
@ -117,7 +115,6 @@ class Item_proc_string :public Item_proc
|
|||||||
public:
|
public:
|
||||||
Item_proc_string(THD *thd, const char *name_par, uint length):
|
Item_proc_string(THD *thd, const char *name_par, uint length):
|
||||||
Item_proc(thd, name_par) { this->max_length=length; }
|
Item_proc(thd, name_par) { this->max_length=length; }
|
||||||
enum Item_result result_type () const { return STRING_RESULT; }
|
|
||||||
const Type_handler *type_handler() const { return &type_handler_varchar; }
|
const Type_handler *type_handler() const { return &type_handler_varchar; }
|
||||||
void set(double nr) { str_value.set_real(nr, 2, default_charset()); }
|
void set(double nr) { str_value.set_real(nr, 2, default_charset()); }
|
||||||
void set(longlong nr) { str_value.set(nr, default_charset()); }
|
void set(longlong nr) { str_value.set(nr, default_charset()); }
|
||||||
|
@ -2267,7 +2267,6 @@ public:
|
|||||||
{
|
{
|
||||||
return m_type_handler->real_field_type();
|
return m_type_handler->real_field_type();
|
||||||
}
|
}
|
||||||
Item_result result_type() const { return m_type_handler->result_type(); }
|
|
||||||
Item_result cmp_type() const { return m_type_handler->cmp_type(); }
|
Item_result cmp_type() const { return m_type_handler->cmp_type(); }
|
||||||
enum_mysql_timestamp_type mysql_timestamp_type() const
|
enum_mysql_timestamp_type mysql_timestamp_type() const
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user