139 lines
3.7 KiB
SQL
139 lines
3.7 KiB
SQL
####################
|
|
# Part 1
|
|
#
|
|
# Expect to rewrite
|
|
####################
|
|
|
|
## case 1 ##
|
|
|
|
## expect to rewrite to peel of the top-level stmt
|
|
select * from (select * from t1 order by c2) a limit 1;
|
|
select * from t1 order by c2 limit 1;
|
|
|
|
## case 2 ##
|
|
|
|
## with limit + offset
|
|
select * from (select * from t1 order by c2) a limit 1, 10;
|
|
select * from t1 order by c2 limit 1, 10;
|
|
|
|
## case 3 ##
|
|
|
|
## with desc
|
|
select * from (select * from t1 order by c2 desc) a limit 1, 10;
|
|
select * from t1 order by c2 limit 1, 10;
|
|
|
|
|
|
## case 4 ##
|
|
|
|
## with no-column predicate
|
|
# TODO shengle, core in pre calc expr, mysqltest not core, may unitest problem
|
|
#
|
|
# select * from (select * from t1 order by c2 desc) a where 1=1 limit 1, 10;
|
|
select * from t1 order by c2 limit 1, 10;
|
|
|
|
## case 5 ##
|
|
|
|
## with no-column predicate
|
|
# TODO shengle, core in pre calc expr, mysqltest not core, may unitest problem
|
|
#
|
|
# select * from (select * from t1 order by c2 desc) a where (1=1) and (0=0) limit 1, 10;
|
|
select * from t1 order by c2 limit 1, 10;
|
|
|
|
## case 6 ##
|
|
|
|
## with no-column predicate
|
|
select * from (select * from t1 order by c2 desc) a where 1 limit 1, 10;
|
|
select * from t1 order by c2 limit 1, 10;
|
|
|
|
|
|
## case 7 ##
|
|
|
|
## muiltiple-level
|
|
select * from (select * from (select * from (select * from (select * from (select * from (select * from t1 order by c2) a) b) c) d) e) f limit 1;
|
|
|
|
## case 8 ##
|
|
|
|
## muiltiple-level, with some alias table names in select list
|
|
select * from (select * from (select d.* from (select c.* from (select * from (select * from (select * from t1 order by c2) a) b) c) d) e) f limit 1;
|
|
|
|
|
|
###########################
|
|
# Part 1
|
|
#
|
|
# Expect NOT to rewrite
|
|
###########################
|
|
|
|
## case 1 ##
|
|
|
|
# with top-level order-by, no rewrite
|
|
select * from (select * from t1) a order by a.c2 limit 1, 10;
|
|
select * from t1 order by c2 limit 1, 10;
|
|
|
|
## case 2 ##
|
|
|
|
# with top-level group-by, no rewrite
|
|
select count(*) from (select * from t1) a group by a.c2 limit 1, 10;
|
|
|
|
## case 3 ##
|
|
|
|
# non-star select, no rewrite
|
|
select a.c1 from (select * from t1) a group by a.c2 limit 1, 10;
|
|
|
|
## case 4 ##
|
|
|
|
# no top-level limit, no rewrite
|
|
select a.c2 from (select * from t1) a;
|
|
|
|
## case 5 ##
|
|
|
|
# more than 1 table, no rewrite
|
|
select * from (select * from t1) a, t1 where a.c2 = t1.c2 limit 10;
|
|
|
|
## case 6 ##
|
|
|
|
# column-related predicates, no rewrite
|
|
select * from (select * from t1) a where a.c2 = 1 limit 1;
|
|
|
|
## case 7 ##
|
|
|
|
# with distinct, no rewrite
|
|
select distinct a.c1 from (select * from t1) a limit 1;
|
|
|
|
## case 8 ##
|
|
|
|
# not top-level, no rewrite
|
|
select b.c2 from (select * from (select * from t1) a limit 10) b;
|
|
|
|
## case 9 ##
|
|
|
|
# subquery in set, no rewrite
|
|
(select * from (select * from t1) a limit 10) union all (select * from (select * from t1) b limit 10);
|
|
|
|
## case 10 ##
|
|
|
|
# subquery in condition, no rewrite
|
|
select * from (select * from t1 order by c2) a where exists (select * from t1) limit 10;
|
|
|
|
#has other functions, so no write
|
|
select now(), b.* from (select c2 from t1 group by c2) as b;
|
|
|
|
select * from tl0 union distinct select * from tr0;
|
|
select * from tl0 union distinct select * from tr1;
|
|
select * from tl0 union distinct select * from tr2;
|
|
select * from tl0 union distinct select * from tr3;
|
|
|
|
select * from tl1 union distinct select * from tr0;
|
|
select * from tl1 union distinct select * from tr1;
|
|
select * from tl1 union distinct select * from tr2;
|
|
select * from tl1 union distinct select * from tr3;
|
|
|
|
select * from tl2 union distinct select * from tr0;
|
|
select * from tl2 union distinct select * from tr1;
|
|
select * from tl2 union distinct select * from tr2;
|
|
select * from tl2 union distinct select * from tr3;
|
|
|
|
select * from tl3 union distinct select * from tr0;
|
|
select * from tl3 union distinct select * from tr1;
|
|
select * from tl3 union distinct select * from tr2;
|
|
select * from tl3 union distinct select * from tr3;
|