2
# Nested Loops semi-join subquery evaluation tests
5
drop table if exists t0, t1, t2, t10, t11, t12;
9
# 1. Subqueries that are converted into semi-joins
11
create table t0 (a int);
12
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
14
create table t1(a int, b int);
15
insert into t1 values (0,0),(1,1),(2,2);
16
create table t2 as select * from t1;
18
create table t11(a int, b int);
20
create table t10 (pk int, a int, primary key(pk));
21
insert into t10 select a,a from t0;
22
create table t12 like t10;
23
insert into t12 select * from t10;
26
--echo Flattened because of dependency, t10=func(t1)
27
explain select * from t1 where a in (select pk from t10);
28
select * from t1 where a in (select pk from t10);
30
--echo A confluent case of dependency
31
explain select * from t1 where a in (select a from t10 where pk=12);
32
select * from t1 where a in (select a from t10 where pk=12);
34
--echo An empty table inside
35
explain select * from t1 where a in (select a from t11);
36
select * from t1 where a in (select a from t11);
38
explain select * from t1 where a in (select pk from t10) and b in (select pk from t10);
39
select * from t1 where a in (select pk from t10) and b in (select pk from t10);
41
--echo flattening a nested subquery
42
explain select * from t1 where a in (select pk from t10 where t10.a in (select pk from t12));
43
select * from t1 where a in (select pk from t10 where t10.a in (select pk from t12));
45
--echo flattening subquery w/ several tables
46
explain extended select * from t1 where a in (select t10.pk from t10, t12 where t12.pk=t10.a);
48
--echo subqueries within outer joins go into ON expr.
49
# TODO: psergey: check if case conversions like those are ok (it broke on windows)
50
--replace_result a A b B
52
select * from t1 left join (t2 A, t2 B) on ( A.a= t1.a and B.a in (select pk from t10));
54
# TODO: psergey: check if case conversions like those are ok (it broke on windows)
55
--echo t2 should be wrapped into OJ-nest, so we have "t1 LJ (t2 J t10)"
56
--replace_result a A b B
58
select * from t1 left join t2 on (t2.a= t1.a and t2.a in (select pk from t10));
60
--echo we shouldn't flatten if we're going to get a join of > MAX_TABLES.
62
t1 s00, t1 s01, t1 s02, t1 s03, t1 s04,t1 s05,t1 s06,t1 s07,t1 s08,t1 s09,
63
t1 s10, t1 s11, t1 s12, t1 s13, t1 s14,t1 s15,t1 s16,t1 s17,t1 s18,t1 s19,
64
t1 s20, t1 s21, t1 s22, t1 s23, t1 s24,t1 s25,t1 s26,t1 s27,t1 s28,t1 s29,
65
t1 s30, t1 s31, t1 s32, t1 s33, t1 s34,t1 s35,t1 s36,t1 s37,t1 s38,t1 s39,
66
t1 s40, t1 s41, t1 s42, t1 s43, t1 s44,t1 s45,t1 s46,t1 s47,t1 s48,t1 s49
70
t1 m00, t1 m01, t1 m02, t1 m03, t1 m04,t1 m05,t1 m06,t1 m07,t1 m08,t1 m09,
71
t1 m10, t1 m11, t1 m12, t1 m13, t1 m14,t1 m15,t1 m16,t1 m17,t1 m18,t1 m19
75
t1 left join t2 on (t2.a= t1.a and t2.a in (select pk from t10))
83
t1 left join t2 on (t2.a= t1.a and t2.a in (select pk from t10))
89
insert into t1 select (A.a + 10 * B.a),1 from t0 A, t0 B;
90
explain extended select * from t1 where a in (select pk from t10 where pk<3);
93
drop table t10, t11, t12;