mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
71fe190172
The fix for bug 31887 was incomplete : it assumes that all the field types returned by the IS_NUM macro are descendants of Item_num and tries to zero-fill the values before doing constant substitution with such fields when they are compared to constant string values. The only exception to this is Field_timestamp : it's in the IS_NUM macro, but is not a descendant of Field_num. Fixed by excluding timestamp fields (Field_timestamp) when zero-filling when converting the constant to compare with to a string. Note that this will not exclude the timestamp columns from const propagation. mysql-test/r/compare.result: Bug #39353: test case mysql-test/t/compare.test: Bug #39353: test case sql/item.cc: Bug #39353: don't zero-fill timestamp fields when const propagating to a string : they'll be converted to a string in a date/time format and not as an integer.
88 lines
2.1 KiB
Text
88 lines
2.1 KiB
Text
#
|
|
# Bug when using comparions of strings and integers.
|
|
#
|
|
|
|
--disable_warnings
|
|
drop table if exists t1;
|
|
--enable_warnings
|
|
|
|
CREATE TABLE t1 (id CHAR(12) not null, PRIMARY KEY (id));
|
|
insert into t1 values ('000000000001'),('000000000002');
|
|
explain select * from t1 where id=000000000001;
|
|
select * from t1 where id=000000000001;
|
|
delete from t1 where id=000000000002;
|
|
select * from t1;
|
|
drop table t1;
|
|
|
|
#
|
|
# Check the following:
|
|
# "a" == "a "
|
|
# "a\0" < "a"
|
|
# "a\0" < "a "
|
|
|
|
SELECT 'a' = 'a ';
|
|
SELECT 'a\0' < 'a';
|
|
SELECT 'a\0' < 'a ';
|
|
SELECT 'a\t' < 'a';
|
|
SELECT 'a\t' < 'a ';
|
|
|
|
CREATE TABLE t1 (a char(10) not null);
|
|
INSERT INTO t1 VALUES ('a'),('a\0'),('a\t'),('a ');
|
|
SELECT hex(a),STRCMP(a,'a'), STRCMP(a,'a ') FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
# Bug #8134: Comparison against CHAR(31) at end of string
|
|
SELECT CHAR(31) = '', '' = CHAR(31);
|
|
# Extra test
|
|
SELECT CHAR(30) = '', '' = CHAR(30);
|
|
|
|
# End of 4.1 tests
|
|
|
|
#
|
|
#Bug #21159: Optimizer: wrong result after AND with different data types
|
|
#
|
|
create table t1 (a tinyint(1),b binary(1));
|
|
insert into t1 values (0x01,0x01);
|
|
select * from t1 where a=b;
|
|
select * from t1 where a=b and b=0x01;
|
|
drop table if exists t1;
|
|
|
|
#
|
|
# Bug #31887: DML Select statement not returning same results when executed
|
|
# in version 5
|
|
#
|
|
|
|
CREATE TABLE t1 (b int(2) zerofill, c int(2) zerofill);
|
|
INSERT INTO t1 (b,c) VALUES (1,2), (1,1), (2,2);
|
|
|
|
SELECT CONCAT(b,c), CONCAT(b,c) = '0101' FROM t1;
|
|
|
|
EXPLAIN EXTENDED SELECT b,c FROM t1 WHERE b = 1 AND CONCAT(b,c) = '0101';
|
|
SELECT b,c FROM t1 WHERE b = 1 AND CONCAT(b,c) = '0101';
|
|
|
|
CREATE TABLE t2 (a int);
|
|
INSERT INTO t2 VALUES (1),(2);
|
|
|
|
SELECT a,
|
|
(SELECT COUNT(*) FROM t1
|
|
WHERE b = t2.a AND CONCAT(b,c) = CONCAT('0',t2.a,'01')) x
|
|
FROM t2 ORDER BY a;
|
|
|
|
EXPLAIN EXTENDED
|
|
SELECT a,
|
|
(SELECT COUNT(*) FROM t1
|
|
WHERE b = t2.a AND CONCAT(b,c) = CONCAT('0',t2.a,'01')) x
|
|
FROM t2 ORDER BY a;
|
|
|
|
DROP TABLE t1,t2;
|
|
|
|
#
|
|
# Bug #39353: Multiple conditions on timestamp column crashes server
|
|
#
|
|
|
|
CREATE TABLE t1 (a TIMESTAMP);
|
|
INSERT INTO t1 VALUES (NOW()),(NOW()),(NOW());
|
|
SELECT * FROM t1 WHERE a > '2008-01-01' AND a = '0000-00-00';
|
|
DROP TABLE t1;
|
|
|
|
--echo End of 5.0 tests
|