#At file:///work/bzrroot/49489-bug-5.1-bugteam/ based on revid:luis.soares@stripped
3252 Evgeny Potemkin 2009-12-09
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.
modified:
mysql-test/r/select.result
mysql-test/t/select.test
sql/item_cmpfunc.cc
=== modified file 'mysql-test/r/select.result'
--- a/mysql-test/r/select.result 2009-11-13 11:22:39 +0000
+++ b/mysql-test/r/select.result 2009-12-09 15:43:45 +0000
@@ -4609,4 +4609,14 @@ HAVING v <= 't'
ORDER BY pk;
v
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
=== modified file 'mysql-test/t/select.test'
--- a/mysql-test/t/select.test 2009-11-13 11:22:39 +0000
+++ b/mysql-test/t/select.test 2009-12-09 15:43:45 +0000
@@ -3964,4 +3964,13 @@ ORDER BY pk;
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
=== modified file 'sql/item_cmpfunc.cc'
--- a/sql/item_cmpfunc.cc 2009-12-02 13:49:21 +0000
+++ b/sql/item_cmpfunc.cc 2009-12-09 15:43:45 +0000
@@ -1023,7 +1023,7 @@ Item** Arg_comparator::cache_converted_c
(*value)->const_item() && type != (*value)->result_type())
{
Item_cache *cache= Item_cache::get_cache(*value, type);
- cache->store(*value);
+ cache->setup(*value);
*cache_item= cache;
return cache_item;
}
Attachment: [text/bzr-bundle] bzr/epotemkin@mysql.com-20091209154345-b1wkv3tflgwu6znn.bundle