Skip to content
Permalink
Browse files
cleanup: extend Item_cache::get_cache() to accept f_type
Do not assume that it's always item->field_type() - this is not the case
in temporal comparisons (e.g. when comparing DATETIME column with a TIME
literal).
  • Loading branch information
vuvova committed Mar 14, 2018
1 parent 24d6cd7 commit 622115e
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 13 deletions.
@@ -9543,12 +9543,6 @@ int stored_field_cmp_to_item(THD *thd, Field *field, Item *item)
return 0;
}

Item_cache* Item_cache::get_cache(THD *thd, const Item *item)
{
return get_cache(thd, item, item->cmp_type());
}


/**
Get a cache item of given type.
@@ -9559,12 +9553,12 @@ Item_cache* Item_cache::get_cache(THD *thd, const Item *item)
*/

Item_cache* Item_cache::get_cache(THD *thd, const Item *item,
const Item_result type)
const Item_result type, const enum_field_types f_type)
{
MEM_ROOT *mem_root= thd->mem_root;
switch (type) {
case INT_RESULT:
return new (mem_root) Item_cache_int(thd, item->field_type());
return new (mem_root) Item_cache_int(thd, f_type);
case REAL_RESULT:
return new (mem_root) Item_cache_real(thd);
case DECIMAL_RESULT:
@@ -9574,7 +9568,7 @@ Item_cache* Item_cache::get_cache(THD *thd, const Item *item,
case ROW_RESULT:
return new (mem_root) Item_cache_row(thd);
case TIME_RESULT:
return new (mem_root) Item_cache_temporal(thd, item->field_type());
return new (mem_root) Item_cache_temporal(thd, f_type);
}
return 0; // Impossible
}
@@ -5551,8 +5551,17 @@ class Item_cache: public Item_basic_constant,
enum Item_result cmp_type () const
{ return Type_handler_hybrid_field_type::cmp_type(); }

static Item_cache* get_cache(THD *thd, const Item *item);
static Item_cache* get_cache(THD *thd, const Item* item, const Item_result type);
static Item_cache* get_cache(THD *thd, const Item* item,
const Item_result type, const enum_field_types f_type);
static Item_cache* get_cache(THD *thd, const Item* item,
const Item_result type)
{
return get_cache(thd, item, type, item->field_type());
}
static Item_cache* get_cache(THD *thd, const Item *item)
{
return get_cache(thd, item, item->cmp_type());
}
virtual void keep_array() {}
virtual void print(String *str, enum_query_type query_type);
bool eq_def(const Field *field)
@@ -90,8 +90,7 @@ class Item_row: public Item,
Item_result cmp_type() const { return ROW_RESULT; }
enum_field_types field_type() const
{
DBUG_ASSERT(0);
return MYSQL_TYPE_DOUBLE;
return MYSQL_TYPE_NULL;
}
void update_used_tables()
{

0 comments on commit 622115e

Please sign in to comment.