mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge
This commit is contained in:
@ -2047,6 +2047,71 @@ f1 f2 f3 f4
|
||||
DROP TABLE t1;
|
||||
DROP VIEW v3;
|
||||
#
|
||||
# BUG#13731380: RANGE OPTIMIZER CALLS RECORDS_IN_RANGE() FOR OPEN RANGE
|
||||
#
|
||||
CREATE TABLE t1 (pk INT PRIMARY KEY);
|
||||
INSERT INTO t1 VALUES (1),(3),(5);
|
||||
SELECT * FROM t1 WHERE pk <> 3 OR pk < 4;
|
||||
pk
|
||||
1
|
||||
3
|
||||
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);
|
||||
|
@ -2049,6 +2049,71 @@ f1 f2 f3 f4
|
||||
DROP TABLE t1;
|
||||
DROP VIEW v3;
|
||||
#
|
||||
# BUG#13731380: RANGE OPTIMIZER CALLS RECORDS_IN_RANGE() FOR OPEN RANGE
|
||||
#
|
||||
CREATE TABLE t1 (pk INT PRIMARY KEY);
|
||||
INSERT INTO t1 VALUES (1),(3),(5);
|
||||
SELECT * FROM t1 WHERE pk <> 3 OR pk < 4;
|
||||
pk
|
||||
1
|
||||
3
|
||||
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);
|
||||
|
@ -5191,6 +5191,37 @@ WHERE t2.pk <> 2;
|
||||
pk i pk i pk i
|
||||
DROP TABLE t1,t2,t_empty;
|
||||
End of 5.1 tests
|
||||
#
|
||||
# Bug#45227: Lost HAVING clause led to a wrong result.
|
||||
#
|
||||
CREATE TABLE `CC` (
|
||||
`int_nokey` int(11) NOT NULL,
|
||||
`int_key` int(11) NOT NULL,
|
||||
`varchar_key` varchar(1) NOT NULL,
|
||||
`varchar_nokey` varchar(1) NOT NULL,
|
||||
KEY `int_key` (`int_key`),
|
||||
KEY `varchar_key` (`varchar_key`)
|
||||
);
|
||||
INSERT INTO `CC` VALUES
|
||||
(0,8,'q','q'),(5,8,'m','m'),(7,3,'j','j'),(1,2,'z','z'),(8,2,'a','a'),(2,6,'',''),(1,8,'e'
|
||||
,'e'),(8,9,'t','t'),(5,2,'q','q'),(4,6,'b','b'),(5,5,'w','w'),(3,2,'m','m'),(0,4,'x','x'),
|
||||
(8,9,'',''),(0,6,'w','w'),(4,5,'x','x'),(0,0,'e','e'),(0,0,'e','e'),(2,8,'p','p'),(0,0,'x'
|
||||
,'x');
|
||||
EXPLAIN SELECT `varchar_nokey` G1 FROM CC WHERE `int_nokey` AND `int_key` <= 4
|
||||
HAVING G1 ORDER BY `varchar_key` LIMIT 6 ;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE CC range int_key int_key 4 NULL 10 Using index condition; Using where; Using filesort
|
||||
SELECT `varchar_nokey` G1 FROM CC WHERE `int_nokey` AND `int_key` <= 4
|
||||
HAVING G1 ORDER BY `varchar_key` LIMIT 6 ;
|
||||
G1
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect DOUBLE value: 'z'
|
||||
Warning 1292 Truncated incorrect DOUBLE value: 'a'
|
||||
Warning 1292 Truncated incorrect DOUBLE value: 'q'
|
||||
Warning 1292 Truncated incorrect DOUBLE value: 'm'
|
||||
Warning 1292 Truncated incorrect DOUBLE value: 'j'
|
||||
DROP TABLE CC;
|
||||
# End of test#45227
|
||||
#
|
||||
# BUG#776274: substitution of a single row table
|
||||
#
|
||||
@ -5297,6 +5328,14 @@ f1
|
||||
DROP TABLE t1;
|
||||
DROP VIEW view_t1;
|
||||
# End of test BUG#63020
|
||||
#
|
||||
# Bug #13571700 TINYBLOB NOT NULL, CRASH IN PROTOCOL::NET_STORE_DATA
|
||||
#
|
||||
CREATE TABLE t1 (a TINYBLOB NOT NULL);
|
||||
SELECT a, COUNT(*) FROM t1 WHERE 0;
|
||||
a COUNT(*)
|
||||
NULL 0
|
||||
DROP TABLE t1;
|
||||
SET optimizer_switch=@save_optimizer_switch;
|
||||
#
|
||||
# LP bug#994275 Assertion `real->type() == Item::FIELD_ITEM' failed
|
||||
|
@ -5202,6 +5202,37 @@ WHERE t2.pk <> 2;
|
||||
pk i pk i pk i
|
||||
DROP TABLE t1,t2,t_empty;
|
||||
End of 5.1 tests
|
||||
#
|
||||
# Bug#45227: Lost HAVING clause led to a wrong result.
|
||||
#
|
||||
CREATE TABLE `CC` (
|
||||
`int_nokey` int(11) NOT NULL,
|
||||
`int_key` int(11) NOT NULL,
|
||||
`varchar_key` varchar(1) NOT NULL,
|
||||
`varchar_nokey` varchar(1) NOT NULL,
|
||||
KEY `int_key` (`int_key`),
|
||||
KEY `varchar_key` (`varchar_key`)
|
||||
);
|
||||
INSERT INTO `CC` VALUES
|
||||
(0,8,'q','q'),(5,8,'m','m'),(7,3,'j','j'),(1,2,'z','z'),(8,2,'a','a'),(2,6,'',''),(1,8,'e'
|
||||
,'e'),(8,9,'t','t'),(5,2,'q','q'),(4,6,'b','b'),(5,5,'w','w'),(3,2,'m','m'),(0,4,'x','x'),
|
||||
(8,9,'',''),(0,6,'w','w'),(4,5,'x','x'),(0,0,'e','e'),(0,0,'e','e'),(2,8,'p','p'),(0,0,'x'
|
||||
,'x');
|
||||
EXPLAIN SELECT `varchar_nokey` G1 FROM CC WHERE `int_nokey` AND `int_key` <= 4
|
||||
HAVING G1 ORDER BY `varchar_key` LIMIT 6 ;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE CC range int_key int_key 4 NULL 10 Using index condition; Using where; Rowid-ordered scan; Using filesort
|
||||
SELECT `varchar_nokey` G1 FROM CC WHERE `int_nokey` AND `int_key` <= 4
|
||||
HAVING G1 ORDER BY `varchar_key` LIMIT 6 ;
|
||||
G1
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect DOUBLE value: 'j'
|
||||
Warning 1292 Truncated incorrect DOUBLE value: 'z'
|
||||
Warning 1292 Truncated incorrect DOUBLE value: 'a'
|
||||
Warning 1292 Truncated incorrect DOUBLE value: 'q'
|
||||
Warning 1292 Truncated incorrect DOUBLE value: 'm'
|
||||
DROP TABLE CC;
|
||||
# End of test#45227
|
||||
#
|
||||
# BUG#776274: substitution of a single row table
|
||||
#
|
||||
@ -5308,6 +5339,14 @@ f1
|
||||
DROP TABLE t1;
|
||||
DROP VIEW view_t1;
|
||||
# End of test BUG#63020
|
||||
#
|
||||
# Bug #13571700 TINYBLOB NOT NULL, CRASH IN PROTOCOL::NET_STORE_DATA
|
||||
#
|
||||
CREATE TABLE t1 (a TINYBLOB NOT NULL);
|
||||
SELECT a, COUNT(*) FROM t1 WHERE 0;
|
||||
a COUNT(*)
|
||||
NULL 0
|
||||
DROP TABLE t1;
|
||||
SET optimizer_switch=@save_optimizer_switch;
|
||||
#
|
||||
# LP bug#994275 Assertion `real->type() == Item::FIELD_ITEM' failed
|
||||
|
@ -5191,6 +5191,37 @@ WHERE t2.pk <> 2;
|
||||
pk i pk i pk i
|
||||
DROP TABLE t1,t2,t_empty;
|
||||
End of 5.1 tests
|
||||
#
|
||||
# Bug#45227: Lost HAVING clause led to a wrong result.
|
||||
#
|
||||
CREATE TABLE `CC` (
|
||||
`int_nokey` int(11) NOT NULL,
|
||||
`int_key` int(11) NOT NULL,
|
||||
`varchar_key` varchar(1) NOT NULL,
|
||||
`varchar_nokey` varchar(1) NOT NULL,
|
||||
KEY `int_key` (`int_key`),
|
||||
KEY `varchar_key` (`varchar_key`)
|
||||
);
|
||||
INSERT INTO `CC` VALUES
|
||||
(0,8,'q','q'),(5,8,'m','m'),(7,3,'j','j'),(1,2,'z','z'),(8,2,'a','a'),(2,6,'',''),(1,8,'e'
|
||||
,'e'),(8,9,'t','t'),(5,2,'q','q'),(4,6,'b','b'),(5,5,'w','w'),(3,2,'m','m'),(0,4,'x','x'),
|
||||
(8,9,'',''),(0,6,'w','w'),(4,5,'x','x'),(0,0,'e','e'),(0,0,'e','e'),(2,8,'p','p'),(0,0,'x'
|
||||
,'x');
|
||||
EXPLAIN SELECT `varchar_nokey` G1 FROM CC WHERE `int_nokey` AND `int_key` <= 4
|
||||
HAVING G1 ORDER BY `varchar_key` LIMIT 6 ;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE CC range int_key int_key 4 NULL 10 Using index condition; Using where; Using filesort
|
||||
SELECT `varchar_nokey` G1 FROM CC WHERE `int_nokey` AND `int_key` <= 4
|
||||
HAVING G1 ORDER BY `varchar_key` LIMIT 6 ;
|
||||
G1
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect DOUBLE value: 'z'
|
||||
Warning 1292 Truncated incorrect DOUBLE value: 'a'
|
||||
Warning 1292 Truncated incorrect DOUBLE value: 'q'
|
||||
Warning 1292 Truncated incorrect DOUBLE value: 'm'
|
||||
Warning 1292 Truncated incorrect DOUBLE value: 'j'
|
||||
DROP TABLE CC;
|
||||
# End of test#45227
|
||||
#
|
||||
# BUG#776274: substitution of a single row table
|
||||
#
|
||||
@ -5297,6 +5328,14 @@ f1
|
||||
DROP TABLE t1;
|
||||
DROP VIEW view_t1;
|
||||
# End of test BUG#63020
|
||||
#
|
||||
# Bug #13571700 TINYBLOB NOT NULL, CRASH IN PROTOCOL::NET_STORE_DATA
|
||||
#
|
||||
CREATE TABLE t1 (a TINYBLOB NOT NULL);
|
||||
SELECT a, COUNT(*) FROM t1 WHERE 0;
|
||||
a COUNT(*)
|
||||
NULL 0
|
||||
DROP TABLE t1;
|
||||
SET optimizer_switch=@save_optimizer_switch;
|
||||
#
|
||||
# LP bug#994275 Assertion `real->type() == Item::FIELD_ITEM' failed
|
||||
|
@ -1639,6 +1639,53 @@ SELECT * FROM v3;
|
||||
DROP TABLE t1;
|
||||
DROP VIEW v3;
|
||||
|
||||
--echo #
|
||||
--echo # BUG#13731380: RANGE OPTIMIZER CALLS RECORDS_IN_RANGE() FOR OPEN RANGE
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (pk INT PRIMARY KEY);
|
||||
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 #
|
||||
|
@ -4363,6 +4363,30 @@ DROP TABLE t1,t2,t_empty;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
||||
--echo #
|
||||
--echo # Bug#45227: Lost HAVING clause led to a wrong result.
|
||||
--echo #
|
||||
CREATE TABLE `CC` (
|
||||
`int_nokey` int(11) NOT NULL,
|
||||
`int_key` int(11) NOT NULL,
|
||||
`varchar_key` varchar(1) NOT NULL,
|
||||
`varchar_nokey` varchar(1) NOT NULL,
|
||||
KEY `int_key` (`int_key`),
|
||||
KEY `varchar_key` (`varchar_key`)
|
||||
);
|
||||
INSERT INTO `CC` VALUES
|
||||
(0,8,'q','q'),(5,8,'m','m'),(7,3,'j','j'),(1,2,'z','z'),(8,2,'a','a'),(2,6,'',''),(1,8,'e'
|
||||
,'e'),(8,9,'t','t'),(5,2,'q','q'),(4,6,'b','b'),(5,5,'w','w'),(3,2,'m','m'),(0,4,'x','x'),
|
||||
(8,9,'',''),(0,6,'w','w'),(4,5,'x','x'),(0,0,'e','e'),(0,0,'e','e'),(2,8,'p','p'),(0,0,'x'
|
||||
,'x');
|
||||
EXPLAIN SELECT `varchar_nokey` G1 FROM CC WHERE `int_nokey` AND `int_key` <= 4
|
||||
HAVING G1 ORDER BY `varchar_key` LIMIT 6 ;
|
||||
|
||||
SELECT `varchar_nokey` G1 FROM CC WHERE `int_nokey` AND `int_key` <= 4
|
||||
HAVING G1 ORDER BY `varchar_key` LIMIT 6 ;
|
||||
|
||||
DROP TABLE CC;
|
||||
--echo # End of test#45227
|
||||
--echo #
|
||||
--echo # BUG#776274: substitution of a single row table
|
||||
--echo #
|
||||
@ -4446,6 +4470,14 @@ DROP TABLE t1;
|
||||
DROP VIEW view_t1;
|
||||
--echo # End of test BUG#63020
|
||||
|
||||
--echo #
|
||||
--echo # Bug #13571700 TINYBLOB NOT NULL, CRASH IN PROTOCOL::NET_STORE_DATA
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (a TINYBLOB NOT NULL);
|
||||
SELECT a, COUNT(*) FROM t1 WHERE 0;
|
||||
DROP TABLE t1;
|
||||
|
||||
SET optimizer_switch=@save_optimizer_switch;
|
||||
|
||||
--echo #
|
||||
|
Reference in New Issue
Block a user