--echo # --echo # Start of 5.5 tests --echo # --echo # --echo # MDEV-15955 Assertion `field_types == 0 || field_types[field_pos] == MYSQL_TYPE_LONGLONG' failed in Protocol_text::store_longlong --echo # CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1),(2); SELECT @a := 1 FROM t1 ORDER BY STRCMP(STDDEV_SAMP(a), 'bar'); SELECT COALESCE(1) FROM t1 ORDER BY STRCMP(STDDEV_SAMP(a), 'bar'); SELECT COALESCE(@a:=1) FROM t1 ORDER BY STRCMP(STDDEV_SAMP(a), 'bar'); SELECT COALESCE(@a) FROM t1 ORDER BY STRCMP(STDDEV_SAMP(a), 'bar'); DROP TABLE t1; --echo # --echo # MDEV-21065 UNIQUE constraint causes a query with string comparison to omit a row in the result set --echo # CREATE TABLE t1 (c0 INT UNIQUE); INSERT INTO t1 VALUES (NULL), (NULL), (NULL), (NULL), (1), (0); SELECT * FROM t1 WHERE c0 < '\n2'; DROP TABLE t1; SELECT CAST('\n2' AS INT); --echo # --echo # End of 5.5 tests --echo # --echo # --echo # Start of 10.1 tests --echo # --echo # --echo # MDEV-8741 Equal field propagation leaves some remainders after simplifying WHERE zerofill_column=2010 AND zerofill_column>=2010 --echo # CREATE TABLE t1 (a INT ZEROFILL); INSERT INTO t1 VALUES (2010),(2020); EXPLAIN EXTENDED SELECT * FROM t1 WHERE a=2010 AND a>=2010; DROP TABLE t1; --echo # --echo # MDEV-8369 Unexpected impossible WHERE for a condition on a ZEROFILL field --echo # CREATE TABLE t1 (a INT ZEROFILL); INSERT INTO t1 VALUES (128),(129); SELECT * FROM t1 WHERE a=128; SELECT * FROM t1 WHERE hex(a)='80'; SELECT * FROM t1 WHERE a=128 AND hex(a)='80'; EXPLAIN EXTENDED SELECT * FROM t1 WHERE a=128 AND hex(a)='80'; DROP TABLE t1; --echo # --echo # End of 10.1 tests --echo # --echo # --echo # Start of 10.2 tests --echo # --echo # --echo # MDEV-9393 Split Copy_field::get_copy_func() into virtual methods in Field --echo # # DECIMAL -> INT CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (10.1),(10.9); SELECT * FROM t1; DROP TABLE t1; CREATE TABLE t1 (a INT); CREATE TABLE t2 (a DECIMAL(10,2)); INSERT INTO t2 VALUES (10.1),(10.9); INSERT INTO t1 SELECT a FROM t2; SELECT * FROM t1; DROP TABLE t1,t2; CREATE TABLE t1 (a DECIMAL(10,2)); INSERT INTO t1 VALUES (10.1),(10.9); ALTER TABLE t1 MODIFY a INT; SELECT * FROM t1; DROP TABLE t1; # TIME -> INT CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (TIME'00:00:10.1'),(TIME'00:00:10.9'); SELECT * FROM t1; DROP TABLE t1; CREATE TABLE t1 (a INT); CREATE TABLE t2 (a TIME(1)); INSERT INTO t2 VALUES (10.1),(10.9); INSERT INTO t1 SELECT a FROM t2; SELECT * FROM t1; DROP TABLE t1,t2; CREATE TABLE t1 (a TIME(1)); INSERT INTO t1 VALUES (10.1),(10.9); ALTER TABLE t1 MODIFY a INT; SELECT * FROM t1; DROP TABLE t1; --echo # --echo # MDEV-9334 ALTER from DECIMAL to BIGINT UNSIGNED returns a wrong result --echo # CREATE TABLE t1 (a DECIMAL(30,0)); INSERT INTO t1 VALUES (CAST(0xFFFFFFFFFFFFFFFF AS UNSIGNED)); SELECT * FROM t1; ALTER TABLE t1 MODIFY a BIGINT UNSIGNED; SELECT * FROM t1; DROP TABLE t1; --echo # --echo # End of 10.2 tests --echo # --echo # --echo # Start of 10.3 tests --echo # --echo # --echo # MDEV-15926 MEDIUMINT returns wrong I_S attributes --echo # CREATE TABLE t1 (a MEDIUMINT, b MEDIUMINT UNSIGNED); SELECT COLUMN_NAME, NUMERIC_PRECISION FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1' ORDER BY COLUMN_NAME; DROP TABLE t1; --echo # --echo # MDEV-15946 MEDIUMINT(N<8) creates a wrong data type on conversion to string --echo # CREATE TABLE t1 ( uint8 TINYINT(2) UNSIGNED, sint8 TINYINT(2), uint16 SMALLINT(2) UNSIGNED, sint16 SMALLINT(2), uint24 MEDIUMINT(2) UNSIGNED, sint24 MEDIUMINT(2), uint32 INT(2) UNSIGNED, sint32 INT(2), uint64 BIGINT(2) UNSIGNED, sint64 BIGINT(2) ); CREATE TABLE t2 AS SELECT CONCAT(uint8),CONCAT(sint8), CONCAT(uint16),CONCAT(sint16), CONCAT(uint24),CONCAT(sint24), CONCAT(uint32),CONCAT(sint32), CONCAT(uint64),CONCAT(sint64) FROM t1; SHOW CREATE TABLE t2; DROP TABLE t2; CREATE TABLE t2 AS SELECT CONCAT(COALESCE(uint8)),CONCAT(COALESCE(sint8)), CONCAT(COALESCE(uint16)),CONCAT(COALESCE(sint16)), CONCAT(COALESCE(uint24)),CONCAT(COALESCE(sint24)), CONCAT(COALESCE(uint32)),CONCAT(COALESCE(sint32)), CONCAT(COALESCE(uint64)),CONCAT(COALESCE(sint64)) FROM t1; SHOW CREATE TABLE t2; DROP TABLE t2; DROP TABLE t1; CREATE FUNCTION uint8() RETURNS TINYINT(2) UNSIGNED RETURN 1; CREATE FUNCTION sint8() RETURNS TINYINT(2) RETURN 1; CREATE FUNCTION uint16() RETURNS SMALLINT(2) UNSIGNED RETURN 1; CREATE FUNCTION sint16() RETURNS SMALLINT(2) RETURN 1; CREATE FUNCTION uint24() RETURNS MEDIUMINT(2) UNSIGNED RETURN 1; CREATE FUNCTION sint24() RETURNS MEDIUMINT(2) RETURN 1; CREATE FUNCTION uint32() RETURNS INT(2) UNSIGNED RETURN 1; CREATE FUNCTION sint32() RETURNS INT(2) RETURN 1; CREATE FUNCTION uint64() RETURNS BIGINT(2) UNSIGNED RETURN 1; CREATE FUNCTION sint64() RETURNS BIGINT(2) RETURN 1; CREATE TABLE t1 AS SELECT CONCAT(uint8()), CONCAT(sint8()), CONCAT(uint16()),CONCAT(sint16()), CONCAT(uint24()),CONCAT(sint24()), CONCAT(uint32()),CONCAT(sint32()), CONCAT(uint64()),CONCAT(sint64()); SHOW CREATE TABLE t1; DROP TABLE t1; CREATE TABLE t1 AS SELECT CONCAT(COALESCE(uint8())),CONCAT(COALESCE(sint8())), CONCAT(COALESCE(uint16())),CONCAT(COALESCE(sint16())), CONCAT(COALESCE(uint24())),CONCAT(COALESCE(sint24())), CONCAT(COALESCE(uint32())),CONCAT(COALESCE(sint32())), CONCAT(COALESCE(uint64())),CONCAT(COALESCE(sint64())); SHOW CREATE TABLE t1; DROP TABLE t1; DROP FUNCTION uint8; DROP FUNCTION sint8; DROP FUNCTION uint16; DROP FUNCTION sint16; DROP FUNCTION uint24; DROP FUNCTION sint24; DROP FUNCTION uint32; DROP FUNCTION sint32; DROP FUNCTION uint64; DROP FUNCTION sint64; --echo # --echo # MDEV-20285 Wrong result on INSERT..SELECT when converting from SIGNED to UNSIGNED --echo # CREATE TABLE t1 (a TINYINT UNSIGNED); CREATE TABLE t2 (a TINYINT); INSERT INTO t1 VALUES (255); INSERT IGNORE INTO t2 SELECT a FROM t1; 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 # --echo # --echo # Start of 10.4 tests --echo # --echo # --echo # MDEV-11362 True condition elimination does not work for DECIMAL and temporal dynamic SQL parameters --echo # CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1),(2),(3); EXPLAIN EXTENDED SELECT * FROM t1 WHERE 1+a<=>1+a; EXECUTE IMMEDIATE 'EXPLAIN EXTENDED SELECT * FROM t1 WHERE ?+a<=>?+a' USING 1,1; EXECUTE IMMEDIATE 'EXPLAIN EXTENDED SELECT * FROM t1 WHERE ?+a<=>1+a' USING 1; EXECUTE IMMEDIATE 'EXPLAIN EXTENDED SELECT * FROM t1 WHERE 1+a<=>?+a' USING 1; DROP TABLE t1; --echo # --echo # MDEV-15759 Expect "Impossible WHERE" for indexed_int_column=out_of_range_int_constant --echo # CREATE TABLE t1 (a TINYINT, KEY(a)); INSERT INTO t1 VALUES (1),(2),(3),(4),(5); EXPLAIN SELECT * FROM t1 WHERE a=200; EXPLAIN SELECT * FROM t1 WHERE a<=>200; DROP TABLE t1; --echo # --echo # MDEV-8554 Expect "Impossible WHERE" for never true values like a!=a, aa --echo # CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1),(2),(3); EXPLAIN SELECT * FROM t1 WHERE a!=a; SELECT COUNT(*) FROM t1 WHERE a!=a; EXPLAIN SELECT * FROM t1 WHERE a>a; SELECT COUNT(*) FROM t1 WHERE a>a; EXPLAIN SELECT COUNT(*) FROM t1 WHERE aa; SELECT COUNT(*) FROM t1 WHERE a>a; EXPLAIN SELECT COUNT(*) FROM t1 WHERE aa-1; SELECT COUNT(*) FROM t1 WHERE a>a-1; EXPLAIN SELECT COUNT(*) FROM t1 WHERE a> NULL WITH ROLLUP; DROP TABLE t1; --echo # --echo # End of 10.5 tests --echo #