mirror of
https://github.com/MariaDB/server.git
synced 2025-11-21 06:21:35 +03:00
119 lines
2.9 KiB
Plaintext
119 lines
2.9 KiB
Plaintext
#
|
|
# Hash semi-join regression tests
|
|
# (WL#1110: Subquery optimization: materialization)
|
|
#
|
|
|
|
|
|
# force the use of materialization
|
|
set @@optimizer_switch='semijoin=off';
|
|
|
|
--source t/subselect_sj_mat.test
|
|
|
|
set @@optimizer_switch=default;
|
|
#
|
|
# Test that the contents of the temp table of a materialized subquery is
|
|
# cleaned up between PS re-executions.
|
|
#
|
|
|
|
create table t0 (a int);
|
|
insert into t0 values (0),(1),(2);
|
|
create table t1 (a int);
|
|
insert into t1 values (0),(1),(2);
|
|
explain select a, a in (select a from t1) from t0;
|
|
select a, a in (select a from t1) from t0;
|
|
prepare s from 'select a, a in (select a from t1) from t0';
|
|
execute s;
|
|
update t1 set a=123;
|
|
execute s;
|
|
drop table t0, t1;
|
|
|
|
|
|
--echo #
|
|
--echo # LPBUG#609121: RQG: wrong result on aggregate + NOT IN + HAVING and
|
|
--echo # partial_match_table_scan=on
|
|
--echo #
|
|
|
|
create table t1 (c1 int);
|
|
create table t2 (c2 int);
|
|
insert into t1 values (1);
|
|
insert into t2 values (2);
|
|
|
|
set @@optimizer_switch='semijoin=off';
|
|
|
|
EXPLAIN
|
|
SELECT SUM(c1) c1_sum FROM t1 WHERE c1 IN (SELECT c2 FROM t2);
|
|
SELECT SUM(c1) c1_sum FROM t1 WHERE c1 IN (SELECT c2 FROM t2);
|
|
EXPLAIN
|
|
SELECT SUM(c1) c1_sum FROM t1 WHERE c1 IN (SELECT c2 FROM t2) HAVING c1_sum;
|
|
SELECT SUM(c1) c1_sum FROM t1 WHERE c1 IN (SELECT c2 FROM t2) HAVING c1_sum;
|
|
|
|
drop table t1, t2;
|
|
|
|
--echo #
|
|
--echo # BUG#52344 - Subquery materialization:
|
|
--echo # Assertion if subquery in on-clause of outer join
|
|
--echo #
|
|
|
|
set @@optimizer_switch='semijoin=off';
|
|
|
|
CREATE TABLE t1 (i INTEGER);
|
|
INSERT INTO t1 VALUES (10);
|
|
|
|
CREATE TABLE t2 (j INTEGER);
|
|
INSERT INTO t2 VALUES (5);
|
|
|
|
CREATE TABLE t3 (k INTEGER);
|
|
|
|
EXPLAIN
|
|
SELECT i FROM t1 LEFT JOIN t2 ON (j) IN (SELECT k FROM t3);
|
|
SELECT i FROM t1 LEFT JOIN t2 ON (j) IN (SELECT k FROM t3);
|
|
|
|
EXPLAIN
|
|
SELECT i FROM t1 LEFT JOIN t2 ON (j) IN (SELECT max(k) FROM t3);
|
|
SELECT i FROM t1 LEFT JOIN t2 ON (j) IN (SELECT max(k) FROM t3);
|
|
|
|
DROP TABLE t1, t2, t3;
|
|
|
|
--echo #
|
|
--echo # LPBUG#609121: RQG: wrong result on aggregate + NOT IN + HAVING and
|
|
--echo # partial_match_table_scan=on
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (c1 int);
|
|
INSERT INTO t1 VALUES (1),(2);
|
|
|
|
CREATE TABLE t2 (c2 int);
|
|
INSERT INTO t2 VALUES (10);
|
|
|
|
PREPARE st1 FROM "
|
|
SELECT *
|
|
FROM t2 LEFT JOIN (SELECT * FROM t2) t3 ON (8, 4) IN (SELECT c1, c1 FROM t1)";
|
|
|
|
EXECUTE st1;
|
|
EXECUTE st1;
|
|
|
|
DROP TABLE t1, t2;
|
|
|
|
--echo #
|
|
--echo # Testcase backport: BUG#46548 IN-subqueries return 0 rows with materialization=on
|
|
--echo #
|
|
CREATE TABLE t1 (
|
|
pk int,
|
|
a varchar(1),
|
|
b varchar(4),
|
|
c varchar(4),
|
|
d varchar(4),
|
|
PRIMARY KEY (pk)
|
|
);
|
|
INSERT INTO t1 VALUES (1,'o','ffff','ffff','ffoo'),(2,'f','ffff','ffff','ffff');
|
|
|
|
CREATE TABLE t2 LIKE t1;
|
|
INSERT INTO t2 VALUES (1,'i','iiii','iiii','iiii'),(2,'f','ffff','ffff','ffff');
|
|
|
|
SET @@optimizer_switch='default,semijoin=on,materialization=on';
|
|
EXPLAIN SELECT pk FROM t1 WHERE (a) IN (SELECT a FROM t2 WHERE pk > 0);
|
|
SELECT pk FROM t1 WHERE (a) IN (SELECT a FROM t2 WHERE pk > 0);
|
|
SELECT pk FROM t1 WHERE (b,c,d) IN (SELECT b,c,d FROM t2 WHERE pk > 0);
|
|
DROP TABLE t1, t2;
|
|
|