Files
oceanbase/unittest/sql/resolver/sql/test_resolver_view_2.test
wangzelin.wzl 93a1074b0c patch 4.0
2022-10-24 17:57:12 +08:00

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;