You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
160 lines
7.7 KiB
160 lines
7.7 KiB
[
|
|
{
|
|
"name": "TestPKIsHandleRangeScan",
|
|
"cases": [
|
|
"select b from t where a > 1",
|
|
"select b from t where a > 1 and a < 3",
|
|
"select b from t where a > 1 and b < 6",
|
|
"select a from t where a * 3 + 1 > 9 and a < 5",
|
|
// Test TiDBSelection Implementation.
|
|
"select a from t group by a having sum(b) > 4"
|
|
]
|
|
},
|
|
{
|
|
"name": "TestSort",
|
|
"cases": [
|
|
"select a from t order by a",
|
|
"select b from t order by b",
|
|
"select b from t order by a+b",
|
|
"select b from t order by b, a+b, a"
|
|
]
|
|
},
|
|
{
|
|
"name": "TestAggregation",
|
|
"cases": [
|
|
"select sum(a) from t",
|
|
"select max(a), min(b) from t",
|
|
"select b, avg(a) from t group by b order by b",
|
|
"select b, sum(a) from t group by b order by b",
|
|
"select b, avg(a) from t group by b having sum(a) > 1 order by b",
|
|
"select max(a+b) from t",
|
|
"select sum(a) from t group by a, a+b order by a",
|
|
"select b, sum(a) from t group by b having b > 1 order by b",
|
|
"select c, sum(a) from (select a+b as c, a from t) t1 group by c having c > 1 order by c",
|
|
"select max(a.a) from t a left join t b on a.a = b.a",
|
|
"select avg(a.b) from t a left join t b on a.a = b.a",
|
|
"select t1.a, max(t1.b) from t as t1 left join (select * from t) as t2 on t1.a = t2.a and t1.b = 3 group by t1.a order by a",
|
|
"select t1.a, sum(distinct t1.b) from t as t1 left join (select * from t) as t2 on t1.b = t2.b group by t1.a order by a",
|
|
"select t2.a, max(t2.b) from t as t1 right join (select * from t) as t2 on t1.a = t2.a group by t2.a order by a",
|
|
"select t3.a, max(t3.b) from (select t1.a, t1.b from t as t1 left join t as t2 on t1.b = t2.b) t3 group by t3.a order by a",
|
|
"select max(a) from t",
|
|
"select sum(case when a > 0 and a <= 1000 then b else 0 end) from t",
|
|
"select sum(case when a > 0 then (case when a <= 1000 then b end) else 0 end) from t",
|
|
"select sum(case when a <= 0 or a > 1000 then 0.0 else b end) from t",
|
|
"select count(case when a > 0 and a <= 1000 then b end) from t",
|
|
"select count(case when a <= 0 or a > 1000 then null else b end) from t",
|
|
"select count(distinct case when a > 0 and a <= 1000 then b end) from t",
|
|
"select approx_count_distinct(case when a > 0 and a <= 1000 then b end) from t",
|
|
"select count(b), sum(b), avg(b), b, max(b), min(b), bit_and(b), bit_or(b), bit_xor(b) from t group by a having sum(b) >= 0 and count(b) >= 0 order by b",
|
|
"select approx_percentile(a, 50) from t order by b"
|
|
]
|
|
},
|
|
{
|
|
"name": "TestPushdownDistinctEnable",
|
|
"cases": [
|
|
"select /*+ HASH_AGG() */ avg(distinct a) from t;", // InjectProjBelowAgg
|
|
"select /*+ HASH_AGG() */ a, count(distinct a) from t;", // firstrow(a) cannot be removed.
|
|
"select /*+ HASH_AGG() */ avg(b), c, avg(b), count(distinct A, B), count(distinct A), count(distinct c), sum(b) from t group by c;",
|
|
"select /*+ STREAM_AGG() */ count(distinct c) from t group by c;", // should push down after stream agg implemented
|
|
"select /*+ STREAM_AGG() */ count(distinct c) from t;", // should push down after stream agg implemented
|
|
"select /*+ HASH_AGG() */ count(distinct c) from t;",
|
|
"select count(distinct c) from t group by c;",
|
|
"select count(distinct c) from t;"
|
|
]
|
|
},
|
|
{
|
|
"name": "TestPushdownDistinctDisable",
|
|
"cases": [
|
|
// do not pushdown even AGG_TO_COP is specified.
|
|
"select /*+ HASH_AGG(), AGG_TO_COP() */ avg(distinct a) from t;",
|
|
"select /*+ HASH_AGG(), AGG_TO_COP() */ a, count(distinct a) from t;",
|
|
"select /*+ HASH_AGG(), AGG_TO_COP() */ avg(b), c, avg(b), count(distinct A, B), count(distinct A), count(distinct c), sum(b) from t group by c;",
|
|
"select /*+ STREAM_AGG(), AGG_TO_COP() */ count(distinct c) from t group by c;",
|
|
"select /*+ STREAM_AGG(), AGG_TO_COP() */ count(distinct c) from t;",
|
|
"select /*+ HASH_AGG(), AGG_TO_COP() */ count(distinct c) from t;",
|
|
"select /*+ AGG_TO_COP() */ count(distinct c) from t group by c;"
|
|
]
|
|
},
|
|
{
|
|
"name": "TestSimplePlans",
|
|
"cases": [
|
|
"select a from t limit 2",
|
|
"select a from t limit 1 offset 2",
|
|
"select b from t order by b limit 3",
|
|
"select a from t order by a limit 1 offset 2",
|
|
"select * from ((select a as aa from t t1) union all (select b as aa from t t2)) as t3 order by aa",
|
|
"select a, b, lag(a,1) over (order by b) from t order by b",
|
|
"select * from (select a+1 as c, a+b as d from t) as t1 order by c+d limit 10",
|
|
"select t1.a, t1.b from t as t1 left join t as t2 on t1.a = t2.a and t1.b = 3 order by a"
|
|
]
|
|
},
|
|
{
|
|
"name": "TestIndexScan",
|
|
"cases": [
|
|
"select b from t",
|
|
"select a from t order by b",
|
|
"select c from t",
|
|
"select a from t order by c",
|
|
"select a, b from t where b > 5 order by b",
|
|
"select a, b, c from t where c = 3 and b > 1 order by b",
|
|
"select a, b from t where c > 1 and b > 1 order by c"
|
|
]
|
|
},
|
|
{
|
|
"name": "TestJoin",
|
|
"cases": [
|
|
"select t1.a, t1.b from t1, t2 where t1.a = t2.a and t1.a > 2",
|
|
"select t1.a, t1.b from t1, t2 where t1.a > t2.a and t2.b > 200",
|
|
"select t1.a, t1.b from t1 left join t2 on t1.a = t2.a where t1.a > 2 and t2.b > 200",
|
|
"select t2.a, t2.b from t1 right join t2 on t1.a = t2.a where t1.a > 2 and t2.b > 200",
|
|
"select t1.a, t1.b from t1, t2 where t1.a = t2.a order by t1.a",
|
|
"select * from t1 join t2 on t1.a = t2.a"
|
|
]
|
|
},
|
|
{
|
|
"name": "TestApply",
|
|
"cases": [
|
|
"select a = (select a from t2 where t1.b = t2.b order by a limit 1) from t1",
|
|
"select sum(a), (select t1.a from t1 where t1.a = t2.a limit 1), (select t1.b from t1 where t1.b = t2.b limit 1) from t2",
|
|
"select a from t1 where exists(select 1 from t2 where t1.a = t2.a)"
|
|
]
|
|
},
|
|
{
|
|
"name": "TestMemTableScan",
|
|
"cases": [
|
|
"select * from information_schema.processlist"
|
|
]
|
|
},
|
|
{
|
|
"name": "TestTopN",
|
|
"cases": [
|
|
"select a from (select a from t where b > 2 order by a limit 3 offset 1) as t1 order by a limit 2 offset 1",
|
|
"select * from (select * from t order by a limit 3) as t1 order by a limit 5",
|
|
"select b from (select b from t order by b limit 10 offset 10) as t1 order by b limit 10 offset 5",
|
|
"select b from (select b from t order by b limit 10 offset 2) as t1 order by b limit 3 offset 5",
|
|
"select a from (select a from t order by a limit 3 offset 5) as t1 order by a limit 3 offset 5",
|
|
"select a from (select a from t where b > 2 order by a, b limit 3 offset 1) as t1 order by a limit 2 offset 1",
|
|
"select * from (select * from t order by a limit 3) as t1 order by a, b limit 5"
|
|
]
|
|
},
|
|
{
|
|
"name": "TestCascadePlannerHashedPartTable",
|
|
"cases": [
|
|
"select * from pt1"
|
|
]
|
|
},
|
|
{
|
|
"name": "TestInlineProjection",
|
|
"cases": [
|
|
"select /*+ HASH_JOIN(t1) */ t1.b, t2.b from t1, t2 where t1.a = t2.a;", // TODO: need column pruning again.
|
|
"select /*+ HASH_JOIN(t1) */ t1.b, t2.b from t1 inner join t2 on t1.a = t2.a;",
|
|
"select /*+ HASH_JOIN(t1) */ t1.b, t2.b from t1 left outer join t2 on t1.a = t2.a;",
|
|
"select /*+ HASH_JOIN(t1) */ t1.b, t2.b from t1 right outer join t2 on t1.a = t2.a;",
|
|
"select 1 from (select /*+ HASH_JOIN(t1) */ t1.a in (select t2.a from t2) from t1) x;", // TODO: should use hash join
|
|
"select 1 from (select /*+ HASH_JOIN(t1) */ t1.a not in (select t2.a from t2) from t1) x;", // TODO: should use hash join
|
|
"select /*+ INL_JOIN(t1) */ t1.b, t2.b from t1 inner join t2 on t1.a = t2.a;",
|
|
"select /*+ INL_HASH_JOIN(t1) */ t1.b, t2.b from t1 inner join t2 on t1.a = t2.a;",
|
|
"select /*+ INL_MERGE_JOIN(t1) */ t1.b, t2.b from t1 inner join t2 on t1.a = t2.a;"
|
|
]
|
|
}
|
|
]
|
|
|