Commit c43a0e0a authored by Sergei Golubchik's avatar Sergei Golubchik

bugfix: Item_cache_temporal::convert_to_basic_const_item assumed DATETIME

this is a 10.3 version of 1c6f6dc8
parent 76013311
...@@ -11819,7 +11819,7 @@ EXPLAIN ...@@ -11819,7 +11819,7 @@ EXPLAIN
"access_type": "ALL", "access_type": "ALL",
"rows": 3, "rows": 3,
"filtered": 100, "filtered": 100,
"attached_condition": "t1.i = TIMESTAMP'2007-05-28 00:00:00'" "attached_condition": "t1.i = DATE'2007-05-28'"
} }
} }
} }
......
...@@ -10168,17 +10168,32 @@ Item *Item_cache_temporal::convert_to_basic_const_item(THD *thd) ...@@ -10168,17 +10168,32 @@ Item *Item_cache_temporal::convert_to_basic_const_item(THD *thd)
Item *new_item; Item *new_item;
DBUG_ASSERT(value_cached || example != 0); DBUG_ASSERT(value_cached || example != 0);
if (null_value) if (null_value)
new_item= (Item*) new (thd->mem_root) Item_null(thd); return new (thd->mem_root) Item_null(thd);
else else
{ return make_literal(thd);
return new_item;
}
Item *Item_cache_datetime::make_literal(THD *thd)
{
MYSQL_TIME ltime; MYSQL_TIME ltime;
unpack_time(val_datetime_packed(), &ltime, MYSQL_TIMESTAMP_DATETIME); unpack_time(val_datetime_packed(), &ltime, MYSQL_TIMESTAMP_DATETIME);
new_item= (Item*) new (thd->mem_root) Item_datetime_literal(thd, &ltime, return new (thd->mem_root) Item_datetime_literal(thd, &ltime, decimals);
decimals); }
}
return new_item; Item *Item_cache_date::make_literal(THD *thd)
{
MYSQL_TIME ltime;
unpack_time(val_datetime_packed(), &ltime, MYSQL_TIMESTAMP_DATE);
return new (thd->mem_root) Item_date_literal(thd, &ltime);
} }
Item *Item_cache_time::make_literal(THD *thd)
{
MYSQL_TIME ltime;
unpack_time(val_time_packed(), &ltime, MYSQL_TIMESTAMP_TIME);
return new (thd->mem_root) Item_time_literal(thd, &ltime, decimals);
}
bool Item_cache_real::cache_value() bool Item_cache_real::cache_value()
{ {
......
...@@ -6169,6 +6169,7 @@ class Item_cache_temporal: public Item_cache_int ...@@ -6169,6 +6169,7 @@ class Item_cache_temporal: public Item_cache_int
*/ */
Item *clone_item(THD *thd); Item *clone_item(THD *thd);
Item *convert_to_basic_const_item(THD *thd); Item *convert_to_basic_const_item(THD *thd);
virtual Item *make_literal(THD *) =0;
}; };
...@@ -6180,6 +6181,7 @@ class Item_cache_time: public Item_cache_temporal ...@@ -6180,6 +6181,7 @@ class Item_cache_time: public Item_cache_temporal
bool cache_value(); bool cache_value();
Item *get_copy(THD *thd) Item *get_copy(THD *thd)
{ return get_item_copy<Item_cache_time>(thd, this); } { return get_item_copy<Item_cache_time>(thd, this); }
Item *make_literal(THD *);
}; };
...@@ -6190,6 +6192,7 @@ class Item_cache_datetime: public Item_cache_temporal ...@@ -6190,6 +6192,7 @@ class Item_cache_datetime: public Item_cache_temporal
:Item_cache_temporal(thd, &type_handler_datetime2) { } :Item_cache_temporal(thd, &type_handler_datetime2) { }
Item *get_copy(THD *thd) Item *get_copy(THD *thd)
{ return get_item_copy<Item_cache_datetime>(thd, this); } { return get_item_copy<Item_cache_datetime>(thd, this); }
Item *make_literal(THD *);
}; };
...@@ -6200,6 +6203,7 @@ class Item_cache_date: public Item_cache_temporal ...@@ -6200,6 +6203,7 @@ class Item_cache_date: public Item_cache_temporal
:Item_cache_temporal(thd, &type_handler_newdate) { } :Item_cache_temporal(thd, &type_handler_newdate) { }
Item *get_copy(THD *thd) Item *get_copy(THD *thd)
{ return get_item_copy<Item_cache_date>(thd, this); } { return get_item_copy<Item_cache_date>(thd, this); }
Item *make_literal(THD *);
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment