summaryrefslogtreecommitdiff
path: root/mysql-test/t/explain_json.test
blob: 8631d85a323a3a827a56ae6bf1c89a620bbe6e80 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#
# EXPLAIN FORMAT=JSON tests. These are tests developed for MariaDB.
#
--disable_warnings
drop table if exists t0,t1;
--enable_warnings

create table t0(a int);
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);

explain format=json select * from t0;

explain format=json select * from t0 where 1>2;

explain format=json select * from t0 where a<3;

--echo # Try a basic join
create table t1 (a int, b int, filler char(32), key(a));
insert into t1 
select 
  a.a + b.a* 10 + c.a * 100, 
  a.a + b.a* 10 + c.a * 100,
  'filler'
from t0 a, t0 b, t0 c;

explain format=json select * from t0,t1 where t1.a=t0.a;

--echo # Try range and index_merge
create table t2 (a1 int, a2 int, b1 int, b2 int, key(a1,a2), key(b1,b2)); 
insert into t2 select a,a,a,a from t1;

explain format=json select * from t2 where a1<5;

explain format=json select * from t2 where a1=1 or b1=2;
explain format=json select * from t2 where a1=1 or (b1=2 and b2=3);

--echo # Try ref access on two key components

explain format=json select * from t0,t2 where t2.b1=t0.a and t2.b2=4;

drop table t1,t2;

--echo #
--echo # Try a UNION
--echo #
explain format=json select * from t0 A union     select * from t0 B;
explain format=json select * from t0 A union all select * from t0 B;

--echo #
--echo # Subqueries
--echo #
create table t1 (a int, b int);
insert into t1 select a,a from t0;
explain format=json select a, a > (select max(b) from t1 where t1.b=t0.a) from t0;

explain format=json 
select * from t0 where 
  a > (select max(b) from t1 where t1.b=t0.a) or a < 3 ;

drop table t1;

--echo #
--echo # Join buffering
--echo #
create table t1 (a int, b int);
insert into t1 select tbl1.a+10*tbl2.a, tbl1.a+10*tbl2.a from t0 tbl1, t0 tbl2;

explain format=json
select * from t1 tbl1, t1 tbl2 where tbl1.a=tbl2.a and tbl1.b < 3 and tbl2.b < 5;

drop table t1;

--echo #
--echo # Single-table UPDATE/DELETE
--echo #
explain format=json delete from t0;
explain format=json delete from t0 where 1 > 2;

explain format=json delete from t0 where a < 3;

explain format=json update t0 set a=3 where a in (2,3,4);

--echo #
--echo # A derived table
--echo #
create table t1 (a int, b int);
insert into t1 select a,a from t0;
explain format=json
select * from (select a, count(*) as cnt from t1 group by a) as tbl
where cnt>0;

explain format=json
select * from (select a, count(*) as cnt from t1 group by a) as tbl1, t1 as
tbl2 where cnt=tbl2.a;

drop table t0;