Commit 43a43b82 authored by Sergey Petrunya's avatar Sergey Petrunya

Merge

parents f9b3cc11 908fa69d
...@@ -2047,6 +2047,71 @@ f1 f2 f3 f4 ...@@ -2047,6 +2047,71 @@ f1 f2 f3 f4
DROP TABLE t1; DROP TABLE t1;
DROP VIEW v3; 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 # MDEV-5606: range optimizer: "x < y" is sargable, while "y > x" is not
# #
create table t1(a int); create table t1(a int);
......
...@@ -2049,6 +2049,71 @@ f1 f2 f3 f4 ...@@ -2049,6 +2049,71 @@ f1 f2 f3 f4
DROP TABLE t1; DROP TABLE t1;
DROP VIEW v3; 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 # MDEV-5606: range optimizer: "x < y" is sargable, while "y > x" is not
# #
create table t1(a int); create table t1(a int);
......
...@@ -5191,6 +5191,37 @@ WHERE t2.pk <> 2; ...@@ -5191,6 +5191,37 @@ WHERE t2.pk <> 2;
pk i pk i pk i pk i pk i pk i
DROP TABLE t1,t2,t_empty; DROP TABLE t1,t2,t_empty;
End of 5.1 tests 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 # BUG#776274: substitution of a single row table
# #
...@@ -5297,6 +5328,14 @@ f1 ...@@ -5297,6 +5328,14 @@ f1
DROP TABLE t1; DROP TABLE t1;
DROP VIEW view_t1; DROP VIEW view_t1;
# End of test BUG#63020 # 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; SET optimizer_switch=@save_optimizer_switch;
# #
# LP bug#994275 Assertion `real->type() == Item::FIELD_ITEM' failed # LP bug#994275 Assertion `real->type() == Item::FIELD_ITEM' failed
......
...@@ -5202,6 +5202,37 @@ WHERE t2.pk <> 2; ...@@ -5202,6 +5202,37 @@ WHERE t2.pk <> 2;
pk i pk i pk i pk i pk i pk i
DROP TABLE t1,t2,t_empty; DROP TABLE t1,t2,t_empty;
End of 5.1 tests 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 # BUG#776274: substitution of a single row table
# #
...@@ -5308,6 +5339,14 @@ f1 ...@@ -5308,6 +5339,14 @@ f1
DROP TABLE t1; DROP TABLE t1;
DROP VIEW view_t1; DROP VIEW view_t1;
# End of test BUG#63020 # 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; SET optimizer_switch=@save_optimizer_switch;
# #
# LP bug#994275 Assertion `real->type() == Item::FIELD_ITEM' failed # LP bug#994275 Assertion `real->type() == Item::FIELD_ITEM' failed
......
...@@ -5191,6 +5191,37 @@ WHERE t2.pk <> 2; ...@@ -5191,6 +5191,37 @@ WHERE t2.pk <> 2;
pk i pk i pk i pk i pk i pk i
DROP TABLE t1,t2,t_empty; DROP TABLE t1,t2,t_empty;
End of 5.1 tests 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 # BUG#776274: substitution of a single row table
# #
...@@ -5297,6 +5328,14 @@ f1 ...@@ -5297,6 +5328,14 @@ f1
DROP TABLE t1; DROP TABLE t1;
DROP VIEW view_t1; DROP VIEW view_t1;
# End of test BUG#63020 # 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; SET optimizer_switch=@save_optimizer_switch;
# #
# LP bug#994275 Assertion `real->type() == Item::FIELD_ITEM' failed # LP bug#994275 Assertion `real->type() == Item::FIELD_ITEM' failed
......
...@@ -1639,6 +1639,53 @@ SELECT * FROM v3; ...@@ -1639,6 +1639,53 @@ SELECT * FROM v3;
DROP TABLE t1; DROP TABLE t1;
DROP VIEW v3; 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 #
--echo # MDEV-5606: range optimizer: "x < y" is sargable, while "y > x" is not --echo # MDEV-5606: range optimizer: "x < y" is sargable, while "y > x" is not
--echo # --echo #
......
...@@ -4363,6 +4363,30 @@ DROP TABLE t1,t2,t_empty; ...@@ -4363,6 +4363,30 @@ DROP TABLE t1,t2,t_empty;
--echo End of 5.1 tests --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 #
--echo # BUG#776274: substitution of a single row table --echo # BUG#776274: substitution of a single row table
--echo # --echo #
...@@ -4446,6 +4470,14 @@ DROP TABLE t1; ...@@ -4446,6 +4470,14 @@ DROP TABLE t1;
DROP VIEW view_t1; DROP VIEW view_t1;
--echo # End of test BUG#63020 --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; SET optimizer_switch=@save_optimizer_switch;
--echo # --echo #
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment