Commit 1285ecd4 authored by Evgeny Potemkin's avatar Evgeny Potemkin

Bug#49489: Uninitialized cache led to a wrong result.

Arg_comparator uses Item_cache objects to store constants being compared when
they're need a type conversion. Because this cache wasn't initialized properly
Arg_comparator might produce wrong comparison result.

The Arg_comparator::cache_converted_constant function now initializes cache
prior to usage.

mysql-test/r/select.result:
  Added a test case for he bug#49489.
mysql-test/t/select.test:
  Added a test case for he bug#49489.
sql/item_cmpfunc.cc:
  Bug#49489: Uninitialized cache led to a wrong result.
  The Arg_comparator::cache_converted_constant function now initializes cache
  prior to usage.
parent 3a733bb4
...@@ -4609,4 +4609,14 @@ HAVING v <= 't' ...@@ -4609,4 +4609,14 @@ HAVING v <= 't'
ORDER BY pk; ORDER BY pk;
v v
DROP TABLE t1; DROP TABLE t1;
#
# Bug#49489 Uninitialized cache led to a wrong result.
#
CREATE TABLE t1(c1 DOUBLE(5,4));
INSERT INTO t1 VALUES (9.1234);
SELECT * FROM t1 WHERE c1 < 9.12345;
c1
9.1234
DROP TABLE t1;
# End of test for bug#49489.
End of 5.1 tests End of 5.1 tests
...@@ -3964,4 +3964,13 @@ ORDER BY pk; ...@@ -3964,4 +3964,13 @@ ORDER BY pk;
DROP TABLE t1; DROP TABLE t1;
--echo #
--echo # Bug#49489 Uninitialized cache led to a wrong result.
--echo #
CREATE TABLE t1(c1 DOUBLE(5,4));
INSERT INTO t1 VALUES (9.1234);
SELECT * FROM t1 WHERE c1 < 9.12345;
DROP TABLE t1;
--echo # End of test for bug#49489.
--echo End of 5.1 tests --echo End of 5.1 tests
...@@ -1023,7 +1023,7 @@ Item** Arg_comparator::cache_converted_constant(THD *thd, Item **value, ...@@ -1023,7 +1023,7 @@ Item** Arg_comparator::cache_converted_constant(THD *thd, Item **value,
(*value)->const_item() && type != (*value)->result_type()) (*value)->const_item() && type != (*value)->result_type())
{ {
Item_cache *cache= Item_cache::get_cache(*value, type); Item_cache *cache= Item_cache::get_cache(*value, type);
cache->store(*value); cache->setup(*value);
*cache_item= cache; *cache_item= cache;
return cache_item; return cache_item;
} }
......
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