summaryrefslogtreecommitdiff
path: root/mysql-test/t/bigint.test
diff options
context:
space:
mode:
authorGleb Shchepa <gshchepa@mysql.com>2010-02-25 23:13:11 +0400
committerGleb Shchepa <gshchepa@mysql.com>2010-02-25 23:13:11 +0400
commit936ed6ca86633a91976fd6fcd931683ec007f440 (patch)
tree8e7396a75464c957337d1786a24d322fe38555a0 /mysql-test/t/bigint.test
parent1935327e74abd298eaa7ddd8f51540ff81b4830c (diff)
downloadmariadb-git-936ed6ca86633a91976fd6fcd931683ec007f440.tar.gz
Bug #45360: wrong results
Propagation of a large unsigned numeric constant in the WHERE expression led to wrong result. For example, "WHERE a = CAST(0xFFFFFFFFFFFFFFFF AS USIGNED) AND FOO(a)", where a is an UNSIGNED BIGINT, and FOO() accepts strings, was transformed to "... AND FOO('-1')". That has been fixed. Also EXPLAIN EXTENDED printed incorrect numeric constants in transformed WHERE expressions like above. That has been fixed too. mysql-test/r/bigint.result: Added test case for bug #45360. mysql-test/t/bigint.test: Added test case for bug #45360. sql/item.cc: Bug #45360: wrong results As far as Item_int_with_ref (and underlaying Item_int) class accepts both signed and unsigned 64bit values, Item_int::val_str and Item_int::print methods have been modified to take into account unsigned_flag.
Diffstat (limited to 'mysql-test/t/bigint.test')
-rw-r--r--mysql-test/t/bigint.test35
1 files changed, 35 insertions, 0 deletions
diff --git a/mysql-test/t/bigint.test b/mysql-test/t/bigint.test
index 5a589816dcd..e19bba971f9 100644
--- a/mysql-test/t/bigint.test
+++ b/mysql-test/t/bigint.test
@@ -327,3 +327,38 @@ drop table t1;
create table t1 select -9223372036854775809 bi;
describe t1;
drop table t1;
+
+--echo #
+--echo # Bug #45360: wrong results
+--echo #
+
+CREATE TABLE t1 (id INT AUTO_INCREMENT PRIMARY KEY,
+ a BIGINT(20) UNSIGNED,
+ b VARCHAR(20));
+
+INSERT INTO t1 (a) VALUES
+ (0),
+ (CAST(0x7FFFFFFFFFFFFFFF AS UNSIGNED)),
+ (CAST(0x8000000000000000 AS UNSIGNED)),
+ (CAST(0xFFFFFFFFFFFFFFFF AS UNSIGNED));
+
+UPDATE t1 SET b = a;
+
+let $n = `SELECT MAX(id) FROM t1`;
+while($n) {
+ let $x = `SELECT a FROM t1 WHERE id = $n`;
+ dec $n;
+ let $hex = `SELECT HEX($x)`;
+ echo # $hex;
+
+ --disable_result_log
+ eval EXPLAIN EXTENDED SELECT 1 FROM t1 WHERE a = $x AND TRIM(a) = b;
+ --enable_result_log
+ SHOW WARNINGS;
+}
+
+DROP TABLE t1;
+
+--echo # End of 5.1 tests
+
+