235 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			235 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| drop database if exists view;
 | |
| create database view;
 | |
| use view;
 | |
| 
 | |
| #
 | |
| ## test view schema weak-binding
 | |
| #
 | |
| 
 | |
| #simple
 | |
| drop table if exists t1;
 | |
| drop view if exists v, vv;
 | |
| create table t1(c1 int, c2 int);
 | |
| create view v as select c1, c2 from t1;
 | |
| create view vv as select c1 from v;
 | |
| select c1, c2 from v;
 | |
| drop table t1;
 | |
| create table t1(c1 int);
 | |
| --error 5231
 | |
| select c1 from v;
 | |
| --error 5231
 | |
| select c2 from v;
 | |
| --error 5231
 | |
| select c1, c2 from v;
 | |
| drop table t1;
 | |
| --error 5231
 | |
| select c1 from v;
 | |
| --error 5231
 | |
| select c2 from v;
 | |
| --error 5231
 | |
| select c1, c2 from v;
 | |
| create table t1(c1 int);
 | |
| --error 5231
 | |
| select c1 from vv;
 | |
| --error 5231
 | |
| select c2 from vv;
 | |
| --error 5231
 | |
| select c1, c2 from vv;
 | |
| --error 5231
 | |
| select 1 as a from vv;
 | |
| 
 | |
| drop table if exists t1;
 | |
| drop view if exists v, vv;
 | |
| create table t1(c1 int, c2 int);
 | |
| create view v as select c1, c2 from t1;
 | |
| create view vv as select c2 from v;
 | |
| select c1, c2 from v;
 | |
| drop table t1;
 | |
| create table t1(c1 int);
 | |
| --error 5231
 | |
| select c1 from v;
 | |
| --error 5231
 | |
| select c2 from v;
 | |
| --error 5231
 | |
| select c1, c2 from v;
 | |
| drop table t1;
 | |
| --error 5231
 | |
| select c1 from v;
 | |
| --error 5231
 | |
| select c2 from v;
 | |
| --error 5231
 | |
| select c1, c2 from v;
 | |
| create table t1(c1 int);
 | |
| --error 5231
 | |
| select c1 from vv;
 | |
| --error 5231
 | |
| select c2 from vv;
 | |
| --error 5231
 | |
| select c1, c2 from vv;
 | |
| --error 5231
 | |
| select c2, c1 from vv;
 | |
| --error 5231
 | |
| select 1 as a from vv;
 | |
| 
 | |
| #select * from view
 | |
| drop table if exists t1,t2;
 | |
| drop view if exists v,vv;
 | |
| create table t1(c1 int ,c2 int);
 | |
| create table t2(c1 int ,c2 int);
 | |
| create view v as select c1, c2 from t1;
 | |
| create view vv as select c1 from v;
 | |
| drop table t1;
 | |
| create table t1(c1 int);
 | |
| --error 5231
 | |
| select * from v;
 | |
| --error 5231
 | |
| select v.* from v;
 | |
| --error 5231
 | |
| select * from vv;
 | |
| --error 5231
 | |
| select vv.* from vv;
 | |
| 
 | |
| #join on and using
 | |
| drop table if exists t1,t2;
 | |
| drop view if exists v;
 | |
| create table t1(c1 int,c2 int);
 | |
| create table t2(c1 int,c2 int);
 | |
| create view v as select c1, c2 from t1;
 | |
| drop table t1;
 | |
| create table t1(c1 int);
 | |
| --error 5231
 | |
| select v.c1 from v join t2 on v.c1 = t2.c1;
 | |
| --error 5231
 | |
| select v.c1 from v join t2 on v.c2 = t2.c2;
 | |
| --error 5231
 | |
| select v.c1 from v join t2 using(c1);
 | |
| --error 5231
 | |
| select v.c1 from v join t2 using(c2);
 | |
| 
 | |
| #column in where
 | |
| drop table if exists t1,t2;
 | |
| drop view if exists v;
 | |
| create table t1(c1 int,c2 int);
 | |
| create view v as select c1, c2 from t1;
 | |
| select c1 from v where c2 = 1;
 | |
| select c1 from v where (select c2) = 1;
 | |
| drop table t1;
 | |
| create table t1(c1 int);
 | |
| --error 5231
 | |
| select c1 from v where c2 = 1;
 | |
| --error 5231
 | |
| select c1 from v where (select c2) = 1;
 | |
| 
 | |
| #column in order by
 | |
| drop table if exists t1,t2;
 | |
| drop view if exists v;
 | |
| create table t1(c1 int,c2 int);
 | |
| create view v as select c1, c2 from t1;
 | |
| select c1 from v order by c2;
 | |
| select c1 from v order by (select c2);
 | |
| drop table t1;
 | |
| create table t1(c1 int);
 | |
| --error 5231
 | |
| select c1 from v order by c2;
 | |
| --error 5231
 | |
| select c1 from v order by (select c2);
 | |
| 
 | |
| #column in group by
 | |
| drop table if exists t1,t2;
 | |
| drop view if exists v;
 | |
| create table t1(c1 int,c2 int);
 | |
| create view v as select c1, c2 from t1;
 | |
| select c1 from v group by c2;
 | |
| select c1 from v group by (select c2);
 | |
| drop table t1;
 | |
| create table t1(c1 int);
 | |
| --error 5231
 | |
| select c1 from v group by c2;
 | |
| --error 5231
 | |
| select c1 from v group by (select c2);
 | |
| 
 | |
| #column in having
 | |
| #drop table if exists t1,t2;
 | |
| #drop view if exists v;
 | |
| #create table t1(c1 int,c2 int);
 | |
| #create view v as select c1, c2 from t1;
 | |
| #select c1 from v having c2 = 1;
 | |
| #select c1 from v having (select c2) = 1;
 | |
| #alter table t1 drop column c2;
 | |
| #--error 5217
 | |
| #select c1 from v having c2 = 1;
 | |
| #--error 5231
 | |
| #select c1 from v having (select c2) = 1;
 | |
| 
 | |
| 
 | |
| drop table if exists t1;
 | |
| drop view if exists v;
 | |
| create table t1(c1 int,c2 int);
 | |
| insert into t1 values(1,2),(2,3),(3,4);
 | |
| create view v as select c1,c2 from t1 order by c2;
 | |
| drop table t1;
 | |
| create table t1(c1 int);
 | |
| #order by 即使是从select里找到了c2(select中的c2不报错是因为view_stmt),因为select里面的c2也是无效列,因此最终结果也是视图无效
 | |
| --error 5231
 | |
| select c1 from v;
 | |
| 
 | |
| drop table if exists t1;
 | |
| drop view if exists v;
 | |
| create table t1(c1 int,c2 int);
 | |
| insert into t1 values(1,2),(2,3),(3,4);
 | |
| create view v as select c1, -1 as c2 from t1 order by (select c2);
 | |
| select c1 from v;
 | |
| drop table t1;
 | |
| create table t1(c1 int);
 | |
| # a select c2提升上来之后从t1基础列里面找不到就直接报错,不会再去select_items找
 | |
| --error 5231
 | |
| select c1 from v;
 | |
| # b (bug)
 | |
| #select c1 from (select c1, -1 as c2 from t1 order by (select c2)) v;
 | |
| 
 | |
| drop table if exists t1;
 | |
| drop view if exists v;
 | |
| create table t1(c1 int,c2 int);
 | |
| create view v as select c1,c2 from t1 where c2=1;
 | |
| drop table t1;
 | |
| create table t1(c1 int);
 | |
| --error 5231
 | |
| select c1 from v;
 | |
| 
 | |
| drop table if exists t1;
 | |
| drop view if exists v;
 | |
| create table t1(c1 int,c2 int);
 | |
| insert into t1 values(1,2),(2,3),(3,4);
 | |
| create view v as select c1, -1 as c2 from t1 order by (select c2);
 | |
| drop table t1;
 | |
| create table t1(c1 int);
 | |
| --error 5231
 | |
| select c1 from v;
 | |
| 
 | |
| # agg
 | |
| drop table if exists t1;
 | |
| drop view if exists v;
 | |
| create table t1(c1 int,c2 int);
 | |
| create view v as select c1,sum(c2) from t1;
 | |
| drop table t1;
 | |
| create table t1(c1 int);
 | |
| --error 5231
 | |
| select c1 from v;
 | |
| 
 | |
| # set op
 | |
| drop table if exists t1,t2;
 | |
| drop view if exists v;
 | |
| create table t1(c1 int,c2 int);
 | |
| create table t2(c3 int,c4 int);
 | |
| create view v as (select c1,c2 from t1) union (select c3,c4 from t2);
 | |
| drop table t1,t2;
 | |
| create table t1(c1 int);
 | |
| create table t2(c3 int);
 | |
| --error 5231
 | |
| select c1 from v;
 | |
| --error 5231
 | |
| select c2 from v;
 | |
| 
 | |
| 
 | |
| drop database if exists view;
 | 
