diff options
Diffstat (limited to 'mysql-test/main/type_int.test')
-rw-r--r-- | mysql-test/main/type_int.test | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/mysql-test/main/type_int.test b/mysql-test/main/type_int.test index c2edb0a9756..7ffbe94cc0d 100644 --- a/mysql-test/main/type_int.test +++ b/mysql-test/main/type_int.test @@ -221,6 +221,108 @@ SELECT * FROM t2; DROP TABLE t1, t2; --echo # +--echo # MDEV-21445 Strange/inconsistent behavior of IN condition when mixing numbers and strings +--echo # + +CREATE TABLE t1 ( + id bigint(20) unsigned NOT NULL, + PRIMARY KEY (id) +); +INSERT INTO t1 VALUES(1234),(97716021308405775),(97716021308405770),(97716021308405780); + +# OK +SELECT * FROM t1 WHERE id IN(97716021308405775); +SELECT * FROM t1 WHERE id IN('97716021308405775'); +SELECT * FROM t1 WHERE id IN('1234',97716021308405775); +SELECT * FROM t1 WHERE id IN('1234','97716021308405775'); +SELECT * FROM t1 WHERE id = 1234 OR id = '97716021308405775'; + +# The following was not OK +SELECT * FROM t1 WHERE id IN(1234,'97716021308405775'); +SELECT * FROM t1 WHERE id IN('97716021308405775',1234); + +DROP TABLE t1; + + +CREATE TABLE t1 (id bigint(20) unsigned NOT NULL PRIMARY KEY); +INSERT INTO t1 VALUES(1234),(97716021308405775),(97716021308405770),(97716021308405780); +SELECT + id, + CASE id + WHEN '97716021308405770' THEN '70' + WHEN '97716021308405775' THEN '75' + WHEN '97716021308405780' THEN '80' + END AS c1 +FROM t1; + +SELECT + id, + CASE + WHEN id='97716021308405770' THEN '70' + WHEN id='97716021308405775' THEN '75' + WHEN id='97716021308405780' THEN '80' + END AS c1 +FROM t1; + +SELECT id, id BETWEEN '97716021308405775' AND '97716021308405775' AS c1 FROM t1; +SELECT id, id BETWEEN '97716021308405775' AND 97716021308405775 AS c1 FROM t1; +SELECT id, id BETWEEN 97716021308405775 AND '97716021308405775' AS c1 FROM t1; + +DROP TABLE t1; + +SELECT '97716021308405770'=97716021308405770; +SELECT 97716021308405770='97716021308405770'; + +SELECT '9e+16'=90000000000000000; +SELECT 90000000000000000='9e+16'; + +SELECT '9e+30'>90000000000000000; +SELECT 90000000000000000<'9e+30'; + +SELECT '9e+80'>90000000000000000; +SELECT 90000000000000000<'9e+80'; + +SELECT '9.9999999999999999e+80'>90000000000000000; +SELECT 90000000000000000<'9.9999999999999999e+80'; + +SELECT '1e+81'>90000000000000000; +SELECT 90000000000000000<'1e+81'; + +SELECT '9e+100'>90000000000000000; +SELECT 90000000000000000<'9e+100'; + +SELECT CAST(0xFFFFFFFFFFFFFFFF AS UNSIGNED)=18446744073709551615; +SELECT 18446744073709551615=CAST(0xFFFFFFFFFFFFFFFF AS UNSIGNED); + +SELECT CAST(0x7FFFFFFFFFFFFFFF AS UNSIGNED)=9223372036854775807; +SELECT 9223372036854775807=CAST(0x7FFFFFFFFFFFFFFF AS UNSIGNED); + + +--echo # +--echo # MDEV-25492 BETWEEN clause returns incorrect results on quoted 64-bit ints +--echo # + +CREATE TABLE betweentest +( + id int(11) unsigned NOT NULL AUTO_INCREMENT, + range1 bigint(20) DEFAULT NULL, + range2 bigint(20) DEFAULT NULL, + PRIMARY KEY (id) +); + +INSERT INTO betweentest VALUES + (1,2739499741191602369,2739499741191602369), + (2,2739499741191602192,2739499741191602192), + (3,2739138623713574912,2739138623730352127); + +SELECT * FROM betweentest WHERE '2739499741191602192' BETWEEN range1 AND range2; + +SELECT * FROM betweentest WHERE 2739499741191602192 BETWEEN range1 AND range2; + +DROP TABLE betweentest; + + +--echo # --echo # End of 10.3 tests --echo # |