Commit 740fc2ae authored by Igor Babaev's avatar Igor Babaev

Fixed mdev-15765 BETWEEN not working in certain cases

The implementations of the convert_to_basic_const_item() virtual
function for the Item_cache classes should call cache_value() when
value_cached == NULL.
parent 45e6d0ae
......@@ -9030,3 +9030,18 @@ EXPLAIN
}
}
DROP TABLE t1,t2;
#
# MDEV-15765: pushing condition with temporal constants
# into constant tables
#
select * from (select date('2018-01-01') as d
union all
select date('2018-01-01') as d) as t
where t.d between date ('2017-01-01') and date ('2019-01-01');
d
2018-01-01
2018-01-01
select * from (select date('2018-01-01') as d) as t
where t.d between date ('2017-01-01') and date ('2019-01-01');
d
2018-01-01
......@@ -1633,3 +1633,16 @@ EVAL EXPLAIN $query;
EVAL EXPLAIN FORMAT=JSON $query;
DROP TABLE t1,t2;
--echo #
--echo # MDEV-15765: pushing condition with temporal constants
--echo # into constant tables
--echo #
select * from (select date('2018-01-01') as d
union all
select date('2018-01-01') as d) as t
where t.d between date ('2017-01-01') and date ('2019-01-01');
select * from (select date('2018-01-01') as d) as t
where t.d between date ('2017-01-01') and date ('2019-01-01');
......@@ -9687,6 +9687,8 @@ Item *Item_cache_int::convert_to_basic_const_item(THD *thd)
{
Item *new_item;
DBUG_ASSERT(value_cached || example != 0);
if (!value_cached)
cache_value();
new_item= null_value ?
(Item*) new (thd->mem_root) Item_null(thd) :
(Item*) new (thd->mem_root) Item_int(thd, val_int(), max_length);
......@@ -9862,6 +9864,8 @@ Item *Item_cache_temporal::convert_to_basic_const_item(THD *thd)
{
Item *new_item;
DBUG_ASSERT(value_cached || example != 0);
if (!value_cached)
cache_value();
if (null_value)
new_item= (Item*) new (thd->mem_root) Item_null(thd);
else
......@@ -9936,6 +9940,8 @@ Item *Item_cache_real::convert_to_basic_const_item(THD *thd)
{
Item *new_item;
DBUG_ASSERT(value_cached || example != 0);
if (!value_cached)
cache_value();
new_item= null_value ?
(Item*) new (thd->mem_root) Item_null(thd) :
(Item*) new (thd->mem_root) Item_float(thd, val_real(),
......@@ -9999,6 +10005,8 @@ Item *Item_cache_decimal::convert_to_basic_const_item(THD *thd)
{
Item *new_item;
DBUG_ASSERT(value_cached || example != 0);
if (!value_cached)
cache_value();
if (null_value)
new_item= (Item*) new (thd->mem_root) Item_null(thd);
else
......@@ -10094,6 +10102,8 @@ Item *Item_cache_str::convert_to_basic_const_item(THD *thd)
{
Item *new_item;
DBUG_ASSERT(value_cached || example != 0);
if (!value_cached)
cache_value();
if (null_value)
new_item= (Item*) new (thd->mem_root) Item_null(thd);
else
......
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