449 lines
9.9 KiB
Plaintext
449 lines
9.9 KiB
Plaintext
#
|
|
# Regression tests for bugs in subquery evaluation that need
|
|
# a specific optimizer strategy selection
|
|
#
|
|
--echo # Bug#26436185 Assertion 'buf_is_inside_another(data_in_mysql_buf, ...)
|
|
|
|
CREATE TABLE t1 (
|
|
pk int NOT NULL,
|
|
col_int_key int DEFAULT NULL,
|
|
col_int int DEFAULT NULL,
|
|
col_varchar varchar(1) DEFAULT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY col_int_key (col_int_key)
|
|
);
|
|
|
|
INSERT INTO t1 VALUES (10,7,5,'l'), (12,7,4,'o');
|
|
|
|
CREATE TABLE t2 (
|
|
col_date_key date DEFAULT NULL,
|
|
col_datetime_key datetime DEFAULT NULL,
|
|
col_int_key int(11) DEFAULT NULL,
|
|
col_varchar_key varchar(1) DEFAULT NULL,
|
|
col_varchar varchar(1) DEFAULT NULL,
|
|
col_time time DEFAULT NULL,
|
|
pk int NOT NULL,
|
|
col_date date DEFAULT NULL,
|
|
col_time_key time DEFAULT NULL,
|
|
col_datetime datetime DEFAULT NULL,
|
|
col_int int DEFAULT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY col_date_key (col_date_key),
|
|
KEY col_datetime_key (col_datetime_key),
|
|
KEY col_int_key (col_int_key),
|
|
KEY col_varchar_key (col_varchar_key),
|
|
KEY col_time_key (col_time_key)
|
|
);
|
|
|
|
INSERT INTO t2(col_int_key,col_varchar_key,col_varchar,pk,col_int) VALUES
|
|
(8,'a','w',1,5),
|
|
(9,'y','f',7,0),
|
|
(9,'z','i',11,9),
|
|
(9,'r','s',12,3),
|
|
(7,'n','i',13,6),
|
|
(9,'j','v',17,9),
|
|
(240,'u','k',20,6);
|
|
|
|
CREATE TABLE t3 (
|
|
col_int int DEFAULT NULL,
|
|
col_int_key int(11) DEFAULT NULL,
|
|
pk int NOT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY col_int_key (col_int_key)
|
|
);
|
|
|
|
INSERT INTO t3 VALUES (8,4,1);
|
|
|
|
ANALYZE TABLE t1, t2, t3;
|
|
|
|
let $query=
|
|
SELECT table2.col_int_key AS field1
|
|
FROM (SELECT sq1_t1.*
|
|
FROM t1 AS sq1_t1 RIGHT OUTER JOIN t2 AS sq1_t2
|
|
ON sq1_t2.col_varchar_key = sq1_t1.col_varchar
|
|
) AS table1
|
|
LEFT JOIN t1 AS table2
|
|
RIGHT JOIN t2 AS table3
|
|
ON table3.pk = table2.col_int_key
|
|
ON table3.col_int_key = table2.col_int
|
|
WHERE table3.col_int_key >= ALL
|
|
(SELECT sq2_t1.col_int AS sq2_field1
|
|
FROM t2 AS sq2_t1 STRAIGHT_JOIN t3 AS sq2_t2
|
|
ON sq2_t2.col_int = sq2_t1.pk AND
|
|
sq2_t1.col_varchar IN
|
|
(SELECT sq21_t1.col_varchar AS sq21_field1
|
|
FROM t2 AS sq21_t1 STRAIGHT_JOIN t1 AS sq21_t2
|
|
ON sq21_t2.col_int_key = sq21_t1.pk
|
|
WHERE sq21_t1.pk = 7
|
|
)
|
|
WHERE sq2_t2.col_int_key >= table2.col_int AND
|
|
sq2_t1.col_int_key <= table2.col_int_key
|
|
);
|
|
|
|
eval EXPLAIN $query;
|
|
eval $query;
|
|
|
|
DROP TABLE t1, t2, t3;
|
|
|
|
--echo #
|
|
--echo # Bug#24713879 ASSERTION `MAYBE_NULL' FAILED. HANDLE_FATAL_SIGNAL IN TEM_FUNC_CONCAT::VAL_STR
|
|
--echo #
|
|
|
|
CREATE TABLE t1(k VARCHAR(10) PRIMARY KEY);
|
|
CREATE TABLE t2(k VARCHAR(10) PRIMARY KEY);
|
|
|
|
SET SQL_MODE='';
|
|
|
|
let $query=
|
|
SELECT (SELECT 'X' FROM t2
|
|
WHERE t2.k = CONCAT(t1.k, 'X')) = 'XXX'
|
|
FROM t1
|
|
WHERE k ='X';
|
|
|
|
eval EXPLAIN $query;
|
|
eval $query;
|
|
|
|
let $query=
|
|
SELECT (SELECT 'X' FROM t2
|
|
WHERE t2.k = CONCAT(t1.k, 'X')) = 'XXX',
|
|
SUM(k)
|
|
FROM t1;
|
|
|
|
eval EXPLAIN $query;
|
|
eval $query;
|
|
|
|
let $query=
|
|
SELECT SUM(k), k
|
|
FROM t1
|
|
HAVING (SELECT 'X' FROM t2
|
|
WHERE t2.k = CONCAT(t1.k, 'X')) = 'XXX';
|
|
|
|
eval EXPLAIN $query;
|
|
eval $query;
|
|
|
|
let $query=
|
|
SELECT (SELECT 'X' FROM t2
|
|
WHERE t2.k = CONCAT(t1.k, 'X')
|
|
AND SUM(t1.k)) = 'XXX'
|
|
FROM t1;
|
|
|
|
eval EXPLAIN $query;
|
|
eval $query;
|
|
|
|
SET SQL_MODE=ONLY_FULL_GROUP_BY;
|
|
|
|
let $query=
|
|
SELECT (SELECT 'X' FROM t2
|
|
WHERE t2.k = CONCAT(t1.k, 'X')) = 'XXX'
|
|
FROM t1
|
|
WHERE k ='X';
|
|
|
|
eval EXPLAIN $query;
|
|
eval $query;
|
|
|
|
let $query=
|
|
SELECT (SELECT 'X' FROM t2
|
|
WHERE t2.k = CONCAT(t1.k, 'X')) = 'XXX',
|
|
SUM(k)
|
|
FROM t1;
|
|
|
|
--error ER_MIX_OF_GROUP_FUNC_AND_FIELDS
|
|
eval EXPLAIN $query;
|
|
|
|
let $query=
|
|
SELECT SUM(k), k
|
|
FROM t1
|
|
HAVING (SELECT 'X' FROM t2
|
|
WHERE t2.k = CONCAT(t1.k, 'X')) = 'XXX';
|
|
|
|
--error ER_MIX_OF_GROUP_FUNC_AND_FIELDS
|
|
eval EXPLAIN $query;
|
|
|
|
let $query=
|
|
SELECT (SELECT 'X' FROM t2
|
|
WHERE t2.k = CONCAT(t1.k, 'X')
|
|
AND SUM(t1.k)) = 'XXX'
|
|
FROM t1;
|
|
|
|
--error ER_MIX_OF_GROUP_FUNC_AND_FIELDS
|
|
eval EXPLAIN $query;
|
|
|
|
SET SQL_MODE=STRICT_TRANS_TABLES;
|
|
|
|
let $query=
|
|
SELECT (SELECT 'X' FROM t2
|
|
WHERE t2.k = CONCAT(t1.k, 'X')) = 'XXX'
|
|
FROM t1
|
|
WHERE k ='X';
|
|
|
|
eval EXPLAIN $query;
|
|
eval $query;
|
|
|
|
let $query=
|
|
SELECT (SELECT 'X' FROM t2
|
|
WHERE t2.k = CONCAT(t1.k, 'X')) = 'XXX',
|
|
SUM(k)
|
|
FROM t1;
|
|
|
|
eval EXPLAIN $query;
|
|
eval $query;
|
|
|
|
let $query=
|
|
SELECT SUM(k), k
|
|
FROM t1
|
|
HAVING (SELECT 'X' FROM t2
|
|
WHERE t2.k = CONCAT(t1.k, 'X')) = 'XXX';
|
|
|
|
eval EXPLAIN $query;
|
|
eval $query;
|
|
|
|
let $query=
|
|
SELECT (SELECT 'X' FROM t2
|
|
WHERE t2.k = CONCAT(t1.k, 'X')
|
|
AND SUM(t1.k)) = 'XXX'
|
|
FROM t1;
|
|
|
|
eval EXPLAIN $query;
|
|
eval $query;
|
|
|
|
SET SQL_MODE=DEFAULT;
|
|
|
|
let $query=
|
|
SELECT (SELECT 'X' FROM t2
|
|
WHERE t2.k = CONCAT(t1.k, 'X')) = 'XXX'
|
|
FROM t1
|
|
WHERE k ='X';
|
|
|
|
eval EXPLAIN $query;
|
|
eval $query;
|
|
|
|
let $query=
|
|
SELECT (SELECT 'X' FROM t2
|
|
WHERE t2.k = CONCAT(t1.k, 'X')) = 'XXX',
|
|
SUM(k)
|
|
FROM t1;
|
|
|
|
--error ER_MIX_OF_GROUP_FUNC_AND_FIELDS
|
|
eval EXPLAIN $query;
|
|
|
|
let $query=
|
|
SELECT SUM(k), k
|
|
FROM t1
|
|
HAVING (SELECT 'X' FROM t2
|
|
WHERE t2.k = CONCAT(t1.k, 'X')) = 'XXX';
|
|
|
|
--error ER_MIX_OF_GROUP_FUNC_AND_FIELDS
|
|
eval EXPLAIN $query;
|
|
|
|
let $query=
|
|
SELECT (SELECT 'X' FROM t2
|
|
WHERE t2.k = CONCAT(t1.k, 'X')
|
|
AND SUM(t1.k)) = 'XXX'
|
|
FROM t1;
|
|
|
|
--error ER_MIX_OF_GROUP_FUNC_AND_FIELDS
|
|
eval EXPLAIN $query;
|
|
|
|
DROP TABLE t1,t2;
|
|
|
|
--echo #
|
|
--echo # Bug#27665085 ASSERTION FAILED: JOIN == 0.
|
|
--echo #
|
|
|
|
SET sql_mode='';
|
|
CREATE TABLE a(d INT,e BIGINT, KEY(e));
|
|
INSERT a VALUES (0,0);
|
|
CREATE TABLE b(f TIME);
|
|
INSERT b VALUES (null),(null),(null);
|
|
CREATE TABLE c(g DATETIME(6) NOT NULL);
|
|
INSERT c(g) VALUES (now()+interval 1 day);
|
|
INSERT c(g) VALUES (now()-interval 1 day);
|
|
|
|
--error ER_SUBQUERY_NO_1_ROW
|
|
SELECT 1 FROM a WHERE (SELECT f FROM b WHERE (SELECT 1 FROM c)) <=> e GROUP BY d;
|
|
|
|
SET sql_mode=default;
|
|
DROP TABLES a, b, c;
|
|
|
|
--echo #
|
|
--echo # Bug#27182010 SUBQUERY INCORRECTLY SHOWS DUPLICATE VALUES ON SUBQUERIES
|
|
--echo #
|
|
|
|
CREATE TABLE p (Id INT,PRIMARY KEY (Id));
|
|
INSERT INTO p VALUES (1);
|
|
|
|
--echo # Test UNIQUE KEY with NULL values
|
|
CREATE TABLE s (Id INT, u INT, UNIQUE KEY o(Id, u) );
|
|
INSERT INTO s VALUES (1, NULL),(1, NULL);
|
|
|
|
ANALYZE TABLE p, s;
|
|
|
|
let query1= SELECT p.Id FROM (p) WHERE p.Id IN (
|
|
SELECT s.Id FROM s WHERE Id=1 AND u IS NULL)ORDER BY Id DESC;
|
|
let query2= SELECT p.Id FROM (p) WHERE p.Id IN (
|
|
SELECT s.Id FROM s WHERE Id=1 AND u IS NOT NULL) ORDER BY Id DESC;
|
|
|
|
eval EXPLAIN $query1;
|
|
eval EXPLAIN $query2;
|
|
|
|
eval $query1;
|
|
eval $query2;
|
|
|
|
--echo # UNIQUE KEY without NULL values
|
|
CREATE TABLE s1 (Id INT, u INT, UNIQUE KEY o(Id, u) );
|
|
INSERT INTO s1 VALUES (1, 2),(1, 3);
|
|
ANALYZE TABLE s1;
|
|
|
|
let query3= SELECT p.Id FROM (p) WHERE p.Id IN (
|
|
SELECT s1.Id FROM s1 WHERE Id=1 AND u IS NOT NULL) ORDER BY Id DESC;
|
|
let query4= SELECT p.Id FROM (p) WHERE p.Id IN (
|
|
SELECT s1.Id FROM s1 WHERE Id=1 AND u != 1) ORDER BY Id DESC;
|
|
|
|
eval EXPLAIN $query3;
|
|
eval EXPLAIN $query4;
|
|
|
|
eval $query3;
|
|
eval $query4;
|
|
|
|
--echo # NON UNIQUE KEY Scenario
|
|
CREATE TABLE s2 (Id INT, u INT, KEY o(Id, u) );
|
|
INSERT INTO s2 VALUES (1, NULL),(1, NULL);
|
|
|
|
let query5= SELECT p.Id FROM (p) WHERE p.Id IN (
|
|
SELECT s.Id FROM s2 s WHERE Id=1 AND u IS NULL) ORDER BY Id DESC;
|
|
|
|
--echo #UNIQUE KEY with NON NULL FIELDS
|
|
CREATE TABLE s3 (Id INT NOT NULL, u INT NOT NULL, UNIQUE KEY o(Id, u));
|
|
INSERT INTO s3 VALUES (1, 2),(1, 3);
|
|
|
|
let query6= SELECT p.Id FROM (p) WHERE p.Id IN (
|
|
SELECT s.Id FROM s3 s WHERE Id=1 AND u IS NOT NULL)
|
|
ORDER BY Id DESC;
|
|
|
|
eval EXPLAIN $query5;
|
|
eval EXPLAIN $query6;
|
|
|
|
eval $query5;
|
|
eval $query6;
|
|
|
|
DROP TABLE p, s, s1, s2, s3;
|
|
--echo #
|
|
--echo # Bug#28239008: WL#9571: SIG11 IN ITEM_FIELD::RESULT_TYPE() AT SQL/ITEM.H
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (f1 varchar(1) DEFAULT NULL);
|
|
|
|
INSERT INTO t1 VALUES ('5');
|
|
|
|
CREATE TABLE t2 (f1 varchar(1) DEFAULT NULL);
|
|
|
|
INSERT INTO t2 VALUES ('Y');
|
|
|
|
PREPARE prep_stmt FROM "SELECT t2.f1 FROM (t2 LEFT JOIN t1
|
|
ON (1 = ANY (SELECT f1 FROM t1 WHERE 1 IS NULL)))" ;
|
|
|
|
EXECUTE prep_stmt ;
|
|
|
|
DROP TABLE t1,t2;
|
|
|
|
CREATE TABLE t1 (f1 varchar(1) DEFAULT NULL);
|
|
INSERT INTO t1 VALUES ('Z') ;
|
|
CREATE TABLE t2 (f1 varchar(1) DEFAULT NULL);
|
|
INSERT INTO t2 VALUES ('Z') ;
|
|
|
|
PREPARE prep_stmt FROM "
|
|
SELECT t2.f1 FROM t2 LEFT OUTER JOIN
|
|
(SELECT * FROM t2 WHERE ('y',1)
|
|
IN (SELECT alias1.f1 , 0 FROM t1 AS alias1 LEFT JOIN t2 ON 0)) AS alias ON 0";
|
|
|
|
EXECUTE prep_stmt ;
|
|
|
|
PREPARE prep_stmt FROM "
|
|
SELECT t2.f1 FROM (t2 LEFT OUTER JOIN (SELECT * FROM t2 WHERE ('y',1)
|
|
IN (SELECT alias1.f1 , 0 FROM
|
|
(t1 INNER JOIN (t1 AS alias1 LEFT JOIN t2 ON 0) ON 0))) AS alias ON 0)";
|
|
|
|
EXECUTE prep_stmt ;
|
|
|
|
DROP TABLE t1,t2;
|
|
|
|
--echo #
|
|
--echo # Bug#28805105: Sig11 in calc_length_and_keyparts
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (cv VARCHAR(1) DEFAULT NULL);
|
|
|
|
INSERT INTO t1 VALUES ('h'), ('Q'), ('I'), ('q'), ('W');
|
|
|
|
ANALYZE TABLE t1;
|
|
|
|
let $query=
|
|
SELECT cv
|
|
FROM t1
|
|
WHERE EXISTS (SELECT alias1.cv AS field1
|
|
FROM t1 AS alias1 RIGHT JOIN t1 AS alias2
|
|
ON alias1.cv = alias2.cv
|
|
);
|
|
|
|
eval EXPLAIN $query;
|
|
eval $query;
|
|
|
|
DROP TABLE t1;
|
|
|
|
--echo # Bug#28970261: Sig6 in decorrelate_equality()
|
|
|
|
CREATE TABLE t1 (col_varchar_key varchar(1) DEFAULT NULL);
|
|
|
|
let $query=
|
|
SELECT *
|
|
FROM t1
|
|
WHERE col_varchar_key IN
|
|
(SELECT col_varchar_key
|
|
FROM t1
|
|
WHERE col_varchar_key =
|
|
(SELECT col_varchar_key
|
|
FROM t1
|
|
WHERE col_varchar_key > @var1
|
|
)
|
|
);
|
|
eval EXPLAIN $query;
|
|
eval $query;
|
|
|
|
let $query=
|
|
SELECT *
|
|
FROM t1
|
|
WHERE col_varchar_key IN
|
|
(SELECT col_varchar_key
|
|
FROM t1
|
|
WHERE col_varchar_key =
|
|
(SELECT col_varchar_key
|
|
FROM t1
|
|
WHERE col_varchar_key = RAND()
|
|
)
|
|
);
|
|
eval EXPLAIN $query;
|
|
eval $query;
|
|
|
|
DROP TABLE t1;
|
|
|
|
--echo #
|
|
--echo # Bug#29356132:OPTIMIZED-AWAY SUBQUERY IN PREPARED STATEMENT CAUSES ASSERT FAILURE IN EXECUTION
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (f1 varchar(1));
|
|
|
|
INSERT INTO t1 VALUES ('5');
|
|
|
|
CREATE TABLE t2 (f1 varchar(1));
|
|
|
|
INSERT INTO t2 VALUES ('Y');
|
|
|
|
PREPARE prep_stmt FROM "SELECT t2.f1 FROM (t2 LEFT JOIN t1
|
|
ON 1 IN (SELECT f1 FROM t1 WHERE FALSE))" ;
|
|
|
|
EXECUTE prep_stmt ;
|
|
|
|
DROP TABLE t1,t2;
|
|
|
|
--source suite/xengine/include/check_xengine_log_error.inc
|