1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

BUG#13803810: TOO FEW ROWS RETURNED FOR RANGE ACCESS IN VARCHAR INDEX USING DATETIME VALUE

- Backport the testcase from mysql-5.6
This commit is contained in:
Sergey Petrunya
2014-03-07 13:00:20 +01:00
parent 7af71b74a9
commit f20cab1a83
3 changed files with 146 additions and 0 deletions

View File

@ -2058,6 +2058,60 @@ pk
5
DROP TABLE t1;
#
# BUG#13803810: TOO FEW ROWS RETURNED FOR RANGE ACCESS IN
# VARCHAR INDEX USING DATETIME VALUE
CREATE TABLE t1 (a DATETIME);
INSERT INTO t1 VALUES ('2001-01-01 00:00:00');
INSERT INTO t1 VALUES ('2001-01-01 11:22:33');
CREATE TABLE t2 (b VARCHAR(64), KEY (b));
INSERT INTO t2 VALUES ('2001-01-01');
INSERT INTO t2 VALUES ('2001.01.01');
INSERT INTO t2 VALUES ('2001#01#01');
INSERT INTO t2 VALUES ('2001-01-01 00:00:00');
INSERT INTO t2 VALUES ('2001-01-01 11:22:33');
# range/ref access cannot be used for this query
EXPLAIN SELECT * FROM t2 WHERE b=CAST('2001-01-01' AS DATE);
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 index b b 67 NULL 5 Using where; Using index
SELECT * FROM t2 WHERE b=CAST('2001-01-01' AS DATE);
b
2001#01#01
2001-01-01
2001-01-01 00:00:00
2001.01.01
# range/ref access cannot be used for any of the queries below.
# See BUG#13814468 about 'Range checked for each record'
EXPLAIN SELECT * FROM t1, t2 WHERE a=b ORDER BY BINARY a, BINARY b;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort
1 SIMPLE t2 ALL b NULL NULL NULL 5 Range checked for each record (index map: 0x1)
SELECT * FROM t1, t2 WHERE a=b ORDER BY BINARY a, BINARY b;
a b
2001-01-01 00:00:00 2001#01#01
2001-01-01 00:00:00 2001-01-01
2001-01-01 00:00:00 2001-01-01 00:00:00
2001-01-01 00:00:00 2001.01.01
2001-01-01 11:22:33 2001-01-01 11:22:33
EXPLAIN SELECT * FROM t1, t2 WHERE b=a ORDER BY BINARY a, BINARY b;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort
1 SIMPLE t2 ALL b NULL NULL NULL 5 Range checked for each record (index map: 0x1)
SELECT * FROM t1, t2 WHERE b=a ORDER BY BINARY a, BINARY b;
a b
2001-01-01 00:00:00 2001#01#01
2001-01-01 00:00:00 2001-01-01
2001-01-01 00:00:00 2001-01-01 00:00:00
2001-01-01 00:00:00 2001.01.01
2001-01-01 11:22:33 2001-01-01 11:22:33
DROP TABLE t1,t2;
#
# MDEV-5606: range optimizer: "x < y" is sargable, while "y > x" is not
#
create table t1(a int);