mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 10:14:19 +01: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:
parent
7af71b74a9
commit
f20cab1a83
3 changed files with 146 additions and 0 deletions
|
@ -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);
|
||||
|
|
|
@ -2060,6 +2060,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);
|
||||
|
|
|
@ -1648,6 +1648,44 @@ INSERT INTO t1 VALUES (1),(3),(5);
|
|||
SELECT * FROM t1 WHERE pk <> 3 OR pk < 4;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # BUG#13803810: TOO FEW ROWS RETURNED FOR RANGE ACCESS IN
|
||||
--echo # VARCHAR INDEX USING DATETIME VALUE
|
||||
--echo
|
||||
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');
|
||||
|
||||
|
||||
--echo
|
||||
--echo # range/ref access cannot be used for this query
|
||||
--echo
|
||||
EXPLAIN SELECT * FROM t2 WHERE b=CAST('2001-01-01' AS DATE);
|
||||
SELECT * FROM t2 WHERE b=CAST('2001-01-01' AS DATE);
|
||||
|
||||
let $query_ab=SELECT * FROM t1, t2 WHERE a=b ORDER BY BINARY a, BINARY b;
|
||||
let $query_ba=SELECT * FROM t1, t2 WHERE b=a ORDER BY BINARY a, BINARY b;
|
||||
|
||||
--echo
|
||||
--echo # range/ref access cannot be used for any of the queries below.
|
||||
--echo # See BUG#13814468 about 'Range checked for each record'
|
||||
--echo
|
||||
eval EXPLAIN $query_ab;
|
||||
eval $query_ab;
|
||||
--echo
|
||||
eval EXPLAIN $query_ba;
|
||||
eval $query_ba;
|
||||
|
||||
--echo
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-5606: range optimizer: "x < y" is sargable, while "y > x" is not
|
||||
--echo #
|
||||
|
|
Loading…
Add table
Reference in a new issue