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;
 | 
