MDEV-12719 Determine Item::result_type() from Item::type_handler()

This commit is contained in:
Alexander Barkov 2017-05-07 19:29:23 +04:00
parent 02ada41744
commit da63db1e3b
15 changed files with 28 additions and 168 deletions

View file

@ -9840,7 +9840,7 @@ Item_type_holder::Item_type_holder(THD *thd, Item *item)
DBUG_ASSERT(item->fixed);
maybe_null= item->maybe_null;
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();
}
@ -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
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;
else
decimals= MY_MAX(decimals, item->decimals);
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);
int item_int_part= item->decimal_int_part();
@ -9908,7 +9908,7 @@ bool Item_type_holder::join_types(THD *thd, Item *item)
unsigned_flag);
}
switch (Item_type_holder::result_type())
switch (result_type())
{
case STRING_RESULT:
{

View file

@ -746,7 +746,7 @@ public:
return type_handler();
}
/* 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();
}
@ -2230,8 +2230,6 @@ public:
inline enum Type type() const;
const Type_handler *type_handler() const
{ 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(); }
Item* element_index(uint i) { return this_item()->element_index(i); }
Item** addr(uint i) { return this_item()->addr(i); }
@ -2389,7 +2387,6 @@ public:
Item **this_item_addr(THD *thd, Item **);
inline enum Type type() const;
inline Item_result result_type() const;
const Type_handler *type_handler() const { return this_item()->type_handler(); }
public:
@ -2414,12 +2411,6 @@ inline enum Item::Type Item_case_expr::type() const
return this_item()->type();
}
inline Item_result Item_case_expr::result_type() const
{
return this_item()->result_type();
}
/*
NAME_CONST(given_name, const_value).
This 'function' has all properties of the supplied const_value (which is
@ -2457,11 +2448,6 @@ public:
return value_item->type_handler();
}
Item_result result_type() const
{
return value_item->result_type();
}
bool const_item() const
{
return TRUE;
@ -2683,10 +2669,6 @@ public:
const Type_handler *handler= field->type_handler();
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
{
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); }
const Type_handler *type_handler() const { return &type_handler_row; }
Item_result result_type() const{ return ROW_RESULT ; }
uint cols() const { return arg_count; }
bool element_index_by_name(uint *idx, const LEX_CSTRING &name) const;
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_safe_in_field(Field *field);
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; }
bool basic_const_item() const { return 1; }
Item *clone_item(THD *thd);
@ -3089,8 +3069,6 @@ public:
const Type_handler *type_handler() const
{ 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,
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);
enum Type type() const { return INT_ITEM; }
enum Item_result result_type () const { return INT_RESULT; }
const Type_handler *type_handler() const
{
// 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);
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; }
longlong val_int();
double val_real();
@ -3498,7 +3474,6 @@ public:
}
my_decimal *val_decimal(my_decimal *);
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; }
bool basic_const_item() const { return 1; }
bool eq(const Item *item, bool binary_cmp) const
@ -3770,7 +3745,6 @@ public:
hex_string_init(thd, str, str_length);
}
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; }
virtual Item *safe_charset_converter(THD *thd, CHARSET_INFO *tocs)
{
@ -3907,7 +3881,6 @@ public:
bool const_item() const { return true; }
enum Type type() const { return DATE_ITEM; }
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;}
@ -4305,7 +4278,6 @@ public:
void save_org_in_field(Field *field, fast_field_copier optimizer_data);
fast_field_copier setup_fast_field_copier(Field *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 *real_type_handler() const
{ return (*ref)->real_type_handler(); }
@ -4603,7 +4575,6 @@ public:
}
int save_in_field(Field *to, bool no_conversions);
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(); }
void update_used_tables()
{
@ -5023,8 +4994,6 @@ public:
const Type_handler *type_handler() const
{ 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); }
table_map used_tables() const { return (table_map) 1L; }
@ -5551,8 +5520,6 @@ public:
const Type_handler *type_handler() const
{ 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 print(String *str, enum_query_type query_type);
@ -5653,7 +5620,6 @@ public:
longlong val_int();
String* val_str(String *str);
my_decimal *val_decimal(my_decimal *);
enum Item_result result_type() const { return INT_RESULT; }
bool cache_value();
int save_in_field(Field *field, bool no_conversions);
Item *convert_to_basic_const_item(THD *thd);
@ -5699,7 +5665,6 @@ public:
longlong val_int();
String* val_str(String *str);
my_decimal *val_decimal(my_decimal *);
enum Item_result result_type() const { return REAL_RESULT; }
bool cache_value();
Item *convert_to_basic_const_item(THD *thd);
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
@ -5718,7 +5683,6 @@ public:
longlong val_int();
String* val_str(String *str);
my_decimal *val_decimal(my_decimal *);
enum Item_result result_type() const { return DECIMAL_RESULT; }
bool cache_value();
Item *convert_to_basic_const_item(THD *thd);
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
@ -5745,7 +5709,6 @@ public:
longlong val_int();
String* val_str(String *);
my_decimal *val_decimal(my_decimal *);
enum Item_result result_type() const { return STRING_RESULT; }
CHARSET_INFO *charset() const { return value->charset(); };
int save_in_field(Field *field, bool no_conversions);
bool cache_value();
@ -5827,8 +5790,6 @@ public:
return 0;
};
enum Item_result result_type() const { return ROW_RESULT; }
uint cols() const { return item_count; }
Item *element_index(uint i) { return 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();
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
{
return Type_handler_hybrid_field_type::type_handler();

View file

@ -4745,7 +4745,7 @@ Item_func_set_user_var::check(bool use_result_field)
if (use_result_field && !result_field)
use_result_field= FALSE;
switch (Item_func_set_user_var::result_type()) {
switch (result_type()) {
case REAL_RESULT:
{
save_result.vreal= use_result_field ? result_field->val_real() :
@ -4838,7 +4838,7 @@ Item_func_set_user_var::update()
bool res= 0;
DBUG_ENTER("Item_func_set_user_var::update");
switch (Item_func_set_user_var::result_type()) {
switch (result_type()) {
case REAL_RESULT:
{
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;
collation.set(m_var_entry->charset(), DERIVATION_IMPLICIT);
set_handler_by_result_type(m_var_entry->type);
switch (Item_func_get_user_var::result_type()) {
switch (result_type()) {
case REAL_RESULT:
fix_char_length(DBL_DIG + 8);
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);
}
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
{
@ -6453,20 +6427,13 @@ Item_func_sp::make_field(THD *thd, Send_field *tmp_field)
const Type_handler *Item_func_sp::type_handler() const
{
DBUG_ENTER("Item_func_sp::type_handler");
DBUG_PRINT("info", ("m_sp = %p", (void *) m_sp));
DBUG_ASSERT(sp_result_field);
// This converts ENUM/SET to STRING
const Type_handler *handler= sp_result_field->type_handler();
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()
{

View file

@ -370,7 +370,6 @@ public:
my_decimal *val_decimal(my_decimal *decimal_value);
longlong val_int()
{ 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; }
void fix_length_and_dec()
{ decimals= NOT_FIXED_DEC; max_length= float_length(decimals); }
@ -397,8 +396,6 @@ public:
:Item_func(thd, item), Type_handler_hybrid_field_type(item) { }
const Type_handler *type_handler() const
{ 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
{ return Type_geometry_attributes::get_geometry_type(); };
};
@ -731,7 +728,6 @@ public:
{ collation.set_numeric(); }
double val_real();
String *val_str(String*str);
enum Item_result result_type () const { return INT_RESULT; }
const Type_handler *type_handler() const { return &type_handler_longlong; }
void fix_length_and_dec() {}
};
@ -903,7 +899,6 @@ public:
double val_real();
longlong val_int();
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; }
void fix_length_and_dec_generic() {}
void fix_length_and_dec()
@ -1539,7 +1534,6 @@ public:
my_decimal *val_decimal(my_decimal *dec) { return args[0]->val_decimal(dec); }
const char *func_name() const { return "rollup_const"; }
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(); }
void fix_length_and_dec()
{
@ -1913,7 +1907,6 @@ public:
}
}
void cleanup();
Item_result result_type () const { return udf.result_type(); }
table_map not_null_tables() const { return 0; }
bool is_expensive() { return 1; }
virtual void print(String *str, enum_query_type query_type);
@ -1965,7 +1958,6 @@ public:
longlong val_int();
double val_real() { return (double) Item_func_udf_int::val_int(); }
String *val_str(String *str);
enum Item_result result_type () const { return INT_RESULT; }
const Type_handler *type_handler() const { return &type_handler_longlong; }
void fix_length_and_dec() { decimals= 0; max_length= 21; }
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
@ -1984,7 +1976,6 @@ public:
double val_real();
my_decimal *val_decimal(my_decimal *);
String *val_str(String *str);
enum Item_result result_type () const { return DECIMAL_RESULT; }
const Type_handler *type_handler() const { return &type_handler_newdecimal; }
void fix_length_and_dec() { fix_num_length_and_dec(); }
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
@ -2024,7 +2015,6 @@ public:
string2my_decimal(E_DEC_FATAL_ERROR, res, dec_buf);
return dec_buf;
}
enum Item_result result_type () const { return STRING_RESULT; }
const Type_handler *type_handler() const { return string_type_handler(); }
void fix_length_and_dec();
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
@ -2077,7 +2067,6 @@ public:
{ DBUG_ASSERT(fixed == 1); null_value=1; return 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; }
enum Item_result result_type () const { return STRING_RESULT; }
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);
bool const_item() const { return true; }
table_map used_tables() const { return 0; }
enum Item_result result_type() const;
const Type_handler *type_handler() const;
double val_real();
longlong val_int();
@ -2661,8 +2649,6 @@ public:
}
void make_field(THD *thd, Send_field *tmp_field);
Item_result result_type() const;
longlong val_int()
{
if (execute())
@ -2834,7 +2820,6 @@ public:
String *val_str(String *);
my_decimal *val_decimal(my_decimal *);
void fix_length_and_dec();
enum Item_result result_type () const { return last_value->result_type(); }
const char *func_name() const { return "last_value"; }
table_map not_null_tables() const { return 0; }
const Type_handler *type_handler() const { return last_value->type_handler(); }

View file

@ -90,7 +90,6 @@ public:
List<Item> &fields, uint flags);
table_map used_tables() const { return used_tables_cache; };
bool const_item() const { return const_item_cache; };
enum Item_result result_type() const { return ROW_RESULT; }
void update_used_tables()
{
used_tables_and_const_cache_init();

View file

@ -64,7 +64,6 @@ public:
longlong val_int();
double val_real();
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(); }
void left_right_max_length();
bool fix_fields(THD *thd, Item **ref);

View file

@ -1172,11 +1172,6 @@ void Item_singlerow_subselect::store(uint i, Item *item)
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
{
return engine->type_handler();

View file

@ -303,7 +303,6 @@ public:
my_decimal *val_decimal(my_decimal *);
bool val_bool();
bool get_date(MYSQL_TIME *ltime, ulonglong fuzzydate);
enum Item_result result_type() const;
const Type_handler *type_handler() const;
void fix_length_and_dec();
@ -394,7 +393,6 @@ public:
}
void no_rows_in_result();
enum Item_result result_type() const { return INT_RESULT;}
const Type_handler *type_handler() const { return &type_handler_longlong; }
longlong val_int();
double val_real();

View file

@ -1229,7 +1229,7 @@ Item_sum_sum::Item_sum_sum(THD *thd, Item_sum_sum *item)
count(item->count)
{
/* 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 + 1, dec_buffs + 1);
@ -1249,7 +1249,7 @@ void Item_sum_sum::clear()
DBUG_ENTER("Item_sum_sum::clear");
null_value=1;
count= 0;
if (Item_sum_sum::result_type() == DECIMAL_RESULT)
if (result_type() == DECIMAL_RESULT)
{
curr_dec_buff= 0;
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");
if (Item_sum_sum::result_type() == DECIMAL_RESULT)
if (result_type() == DECIMAL_RESULT)
{
my_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);
if (aggr)
aggr->endup();
if (Item_sum_sum::result_type() == DECIMAL_RESULT)
if (result_type() == DECIMAL_RESULT)
{
longlong result;
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);
if (aggr)
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);
return sum;
}
@ -1387,7 +1387,7 @@ String *Item_sum_sum::val_str(String *str)
{
if (aggr)
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_real(str);
}
@ -1397,7 +1397,7 @@ my_decimal *Item_sum_sum::val_decimal(my_decimal *val)
{
if (aggr)
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 val_decimal_from_real(val);
}
@ -1642,7 +1642,7 @@ Field *Item_sum_avg::create_tmp_field(bool group, TABLE *table)
and unpack on access.
*/
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),
0, &name, &my_charset_bin);
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
Item_sum_avg::val_real().
*/
if (Item_sum_avg::result_type() != DECIMAL_RESULT)
if (result_type() != DECIMAL_RESULT)
return val_decimal_from_real(val);
sum_dec= dec_buffs + curr_dec_buff;
@ -1724,7 +1724,7 @@ String *Item_sum_avg::val_str(String *str)
{
if (aggr)
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_real(str);
}
@ -2307,7 +2307,7 @@ void Item_sum_num::reset_field()
void Item_sum_hybrid::reset_field()
{
switch(Item_sum_hybrid::result_type()) {
switch(result_type()) {
case STRING_RESULT:
{
char buff[MAX_FIELD_WIDTH];
@ -2390,7 +2390,7 @@ void Item_sum_hybrid::reset_field()
void Item_sum_sum::reset_field()
{
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);
if (!arg_val) // Null
@ -2426,7 +2426,7 @@ void Item_sum_avg::reset_field()
{
uchar *res=result_field->ptr;
DBUG_ASSERT (aggr->Aggrtype() != Aggregator::DISTINCT_AGGREGATOR);
if (Item_sum_avg::result_type() == DECIMAL_RESULT)
if (result_type() == DECIMAL_RESULT)
{
longlong tmp;
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()
{
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);
if (!args[0]->null_value)
@ -2539,7 +2539,7 @@ void Item_sum_avg::update_field()
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);
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)
{
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_double(thd, this);
}
@ -2586,7 +2586,7 @@ Item *Item_sum_avg::result_item(THD *thd, Field *field)
void Item_sum_hybrid::update_field()
{
switch (Item_sum_hybrid::result_type()) {
switch (result_type()) {
case STRING_RESULT:
min_max_update_str_field();
break;

View file

@ -748,7 +748,6 @@ public:
double val_real() { DBUG_ASSERT(fixed == 1); return (double) val_int(); }
String *val_str(String*str);
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; }
void fix_length_and_dec()
{ decimals=0; max_length=21; maybe_null=null_value=0; }
@ -783,8 +782,6 @@ public:
my_decimal *val_decimal(my_decimal *);
const Type_handler *type_handler() const
{ 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_decimal();
void reset_field();
@ -976,7 +973,6 @@ public:
{ return sample ? "var_samp(" : "variance("; }
Item *copy_or_same(THD* thd);
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; }
void cleanup()
{
@ -1048,8 +1044,6 @@ protected:
}
const Type_handler *type_handler() const
{ 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 min_max_update_str_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(thd, item)
{ }
enum Item_result result_type () const { return REAL_RESULT; }
const Type_handler *type_handler() const { return &type_handler_double; }
longlong val_int() { return val_int_from_real(); }
my_decimal *val_decimal(my_decimal *dec) { return val_decimal_from_real(dec); }
@ -1276,7 +1269,6 @@ public:
f_scale(item->f_scale),
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; }
double val_real() { return val_real_from_decimal(); }
longlong val_int() { return val_int_from_decimal(); }
@ -1303,7 +1295,6 @@ public:
{ return val_decimal_from_real(dec_buf); }
bool is_null() { update_null_value(); return null_value; }
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)
{ 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();
String *val_str(String*str);
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; }
void fix_length_and_dec() { fix_num_length_and_dec(); }
Item *copy_or_same(THD* thd);
@ -1424,7 +1414,6 @@ public:
{ DBUG_ASSERT(fixed == 1); return (double) Item_sum_udf_int::val_int(); }
String *val_str(String*str);
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; }
void fix_length_and_dec() { decimals=0; max_length=21; }
Item *copy_or_same(THD* thd);
@ -1466,7 +1455,6 @@ public:
return cs->cset->strtoll10(cs, res->ptr(), &end, &err_not_used);
}
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(); }
void fix_length_and_dec();
Item *copy_or_same(THD* thd);
@ -1488,7 +1476,6 @@ public:
double val_real();
longlong val_int();
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; }
void fix_length_and_dec() { fix_num_length_and_dec(); }
Item *copy_or_same(THD* thd);
@ -1564,7 +1551,6 @@ public:
{ DBUG_ASSERT(fixed == 1); null_value=1; return 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; }
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; }
void clear() {}
@ -1638,7 +1624,6 @@ public:
enum Sumfunctype sum_func () const {return GROUP_CONCAT_FUNC;}
const char *func_name() const { return "group_concat("; }
virtual Item_result result_type () const { return STRING_RESULT; }
const Type_handler *type_handler() const
{
if (too_big_for_varchar())

View file

@ -155,7 +155,6 @@ public:
return str;
}
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; }
void fix_length_and_dec()
{
@ -405,7 +404,6 @@ public:
{
return (odbc_type ? "dayofweek" : "weekday");
}
enum Item_result result_type () const { return INT_RESULT; }
const Type_handler *type_handler() const { return &type_handler_longlong; }
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) {}
const char *func_name() const { return "dayname"; }
String *val_str(String *str);
enum Item_result result_type () const { return STRING_RESULT; }
const Type_handler *type_handler() const { return &type_handler_varchar; }
void fix_length_and_dec();
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 *b): Item_func(thd, a, b) {}
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);
longlong val_int() { return val_int_from_date(); }
double val_real() { return val_real_from_date(); }

View file

@ -250,7 +250,7 @@ bool Item_sum_hybrid_simple::fix_fields(THD *thd, Item **ref)
set_handler_by_result_type(item2->result_type(),
max_length, collation.collation);
switch (Item_sum_hybrid_simple::result_type()) {
switch (result_type()) {
case INT_RESULT:
case DECIMAL_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()
{
switch(Item_sum_hybrid_simple::result_type()) {
switch(result_type()) {
case STRING_RESULT:
{
char buff[MAX_FIELD_WIDTH];

View file

@ -303,8 +303,6 @@ class Item_sum_hybrid_simple : public Item_sum,
my_decimal *val_decimal(my_decimal *);
void reset_field();
String *val_str(String *);
enum Item_result result_type() const
{ return Type_handler_hybrid_field_type::result_type(); }
const Type_handler *type_handler() const
{ return Type_handler_hybrid_field_type::type_handler(); }
void update_field();
@ -509,7 +507,6 @@ class Item_sum_percent_rank: public Item_sum_window_with_row_count
row_number= 0;
}
bool add();
enum Item_result result_type () const { return REAL_RESULT; }
const Type_handler *type_handler() const { return &type_handler_double; }
void fix_length_and_dec()
@ -595,7 +592,6 @@ class Item_sum_cume_dist: public Item_sum_window_with_row_count
}
void update_field() {}
enum Item_result result_type () const { return REAL_RESULT; }
const Type_handler *type_handler() const { return &type_handler_double; }
void fix_length_and_dec()
@ -672,7 +668,6 @@ class Item_sum_ntile : public Item_sum_window_with_row_count
void update_field() {}
enum Item_result result_type () const { return INT_RESULT; }
const Type_handler *type_handler() const { return &type_handler_longlong; }
Item *get_copy(THD *thd, MEM_ROOT *mem_root)

View file

@ -71,7 +71,6 @@ public:
{
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; }
void set(double nr) { value=nr; }
void set(longlong nr) { value=(double) nr; }
@ -98,7 +97,6 @@ class Item_proc_int :public Item_proc
public:
Item_proc_int(THD *thd, const char *name_par): Item_proc(thd, name_par)
{ max_length=11; }
enum Item_result result_type () const { return INT_RESULT; }
const Type_handler *type_handler() const { return &type_handler_longlong; }
void set(double nr) { value=(longlong) nr; }
void set(longlong nr) { value=nr; }
@ -117,7 +115,6 @@ class Item_proc_string :public Item_proc
public:
Item_proc_string(THD *thd, const char *name_par, uint 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; }
void set(double nr) { str_value.set_real(nr, 2, default_charset()); }
void set(longlong nr) { str_value.set(nr, default_charset()); }

View file

@ -2267,7 +2267,6 @@ public:
{
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(); }
enum_mysql_timestamp_type mysql_timestamp_type() const
{