Files
oceanbase/tools/deploy/mysql_test/t/view.test
2023-11-20 08:32:44 +00:00

371 lines
11 KiB
Plaintext

--disable_query_log
set @@session.explicit_defaults_for_timestamp=off;
--enable_query_log
# owner: dachuan.sdc
# owner group: SQL2
# description:
#
# 新建数据库作为测试环境,以下三句勿删
--disable_warnings
drop database if exists db_view;
create database db_view;
use db_view;
drop view if exists v_mix_tv, v_mix_1, v_mix_2, v_mix_3, vv_mix_1, vv_1, vvv_1;
--enable_warnings
--disable_warnings
drop view if exists view_v1, view_v2, view_v3, view_v4, view_v5, view_v6, view_v7;
--enable_warnings
--disable_warnings
drop table if exists view_t1_not_null, view_t1_null_default, view_t1_not_null_default;
--enable_warnings
--disable_warnings
drop view if exists view_v1_null_default, view_v1_not_null, view_v1_not_null_default;
--enable_warnings
--disable_warnings
drop table if exists view_t1, view_t2, view_t3;
--enable_warnings
set character_set_client = 45;
#
# view test
#
create table view_t1(c1 int primary key, c2 int);
create table view_t2(c3 int primary key, c4 int);
create table view_t3(c1 int primary key, c2 int);
insert into view_t1 values(1, 11), (2, 12), (3, 13);
insert into view_t2 values(10, 111), (20, 112), (30, 113);
insert into view_t3 values(100, 1111), (200, 1112), (300, 1113);
############################################
# debugging
############
#
# error: dupl column name of 'c1'
############################################
#
# nullable/defaultable
#
create table view_t1_not_null(c1 int primary key, c2 int not null);
create table view_t1_null_default(c1 int primary key, c2 int default 22222);
create table view_t1_not_null_default(c1 int primary key, c2 int not null default 2222);
#create view view_v1_not_null as select * from view_t1_not_null;
create view view_v1_not_null as select c1,c2 from view_t1_not_null;
#create view view_v1_null_default as select * from view_t1_null_default;
create view view_v1_null_default as select c1,c2 from view_t1_null_default;
#create view view_v1_not_null_default as select * from view_t1_not_null_default;
create view view_v1_not_null_default as select c1,c2 from view_t1_not_null_default;
#
## Bug
#
create table table_t8(c1 int null,c2 int not null);
create view view_v8 as select c1+c2 from table_t8;
desc view_v8;
create view view_v9 as select c1+c2 from table_t8 a;
desc view_v9;
drop table table_t8;
drop view view_v8;
drop view view_v9;
#
# other types (TODO)
#
#
#
# single table with columns and alias
#
#create or replace view view_v1 as select * from view_t1;
create or replace view view_v1 as select c1,c2 from view_t1;
select * from view_v1;
create or replace view view_v2(c1, c2) as select c1, c2 from view_t1;
select * from view_v2;
create or replace view view_v3(c2) as select c2 from view_t1;
select * from view_v3;
#create or replace view view_v4(vc2) as select c2 from view_t1;
create or replace view view_v4(vc2) as select c2 as vc2 from view_t1;
select * from view_v4;
#create or replace view view_v5(vc2) as select c2 as tc2 from view_t1;
create or replace view view_v5(vc2) as select c2 as vc2 from view_t1;
select * from view_v5;
# todo select 1+5
#
# single table with mixed expr
#
create or replace view view_v6 as select c1+1 from view_t1;
select * from view_v6;
#create or replace view view_v7(vc1,vc2) as select c1+1 as tc1, c2+2 as tc2 from view_t1;
create or replace view view_v7(vc1,vc2) as select c1+1 as vc1, c2+2 as vc2 from view_t1;
select * from view_v7;
#
# multi-table with alias
#
#create or replace view v_2t_1 as select * from view_t1, view_t2;
create or replace view v_2t_1 as select c1,c2,c3,c4 from view_t1, view_t2;
--sorted_result
select * from v_2t_1;
# DUP
#create or replace view v_2t_1 as select * from view_t1, view_t2;
#create or replace view v_3t_1(vc1, vc2, vc3, vc4, vc5, vc6) as select * from view_t1, view_t2, view_t3;
create or replace view v_3t_1(vc1, vc2, vc3, vc4, vc5, vc6) as select view_t1.c1 as vc1, view_t1.c2 as vc2, view_t2.c3 as vc3, view_t2.c4 as vc4, view_t3.c1 as vc5, view_t3.c2 as vc6 from view_t1, view_t2, view_t3;
--sorted_result
select * from v_3t_1;
#
# sub-view
#
#create or replace view vv_1 as select * from view_v1;
create or replace view vv_1 as select c1,c2 from view_v1;
--sorted_result
select * from vv_1;
#create or replace view vvv_1 as select * from vv_1;
create or replace view vvv_1 as select c1,c2 from vv_1;
--sorted_result
select * from vvv_1;
#
# sub-view/table
#
# OB_ERR_COLUMN_DUPLICATE
#create or replace view v_mix_tv as select * from view_v1, view_t1;
# mixed case with x1/x2 but different column names
#create view v_mix_1 as select * from view_t1;
create view v_mix_1 as select c1,c2 from view_t1;
#create view vv_mix_1 as select * from v_mix_1, view_t2;
create view vv_mix_1 as select c1,c2,c3,c4 from v_mix_1, view_t2;
--sorted_result
select * from (select * from (select * from view_t1) as v_test, view_t2) as vv_test;
--sorted_result
select * from vv_mix_1;
# mixed case with x1/x3 but same column names
#create or replace view v_mix_2(v_t1_c1, v_t1_c2) as select * from view_t1;
#select * from v_mix_2;
#create or replace view vv_mix_2 as select * from v_mix_2, view_t3;
#select * from (select * from (select c1 v_t1_c1, c2 v_t1_c2 from view_t1) as v_test, view_t3) as vv_test;
#select * from vv_mix_2;
#create or replace view v_mix_3 as select * from view_t1;
create or replace view v_mix_3 as select c1,c2 from view_t1;
--sorted_result
select * from v_mix_3;
#create or replace view vv_mix_3(vv_c1, vv_c2, vv_c3, vv_c4) as select * from v_mix_3, view_t3;
#select * from (select v_test.c1 vv_c1, v_test.c2 vv_c2, view_t3.c1 vv_c3, view_t3.c2 vv_c4 from (select * from view_t1) as v_test, view_t3) as vv_test;
#select * from vv_mix_3;
#
# view join table
# Unknown column 'c1'
#select * from vv_mix_3 join view_v6 on vv_mix_3.vv_c1=view_v6.c1+1;
#
# clean
#
--disable_warnings
drop view if exists v_mix_tv, v_mix_1, v_mix_2, v_mix_3, vv_mix_1, vv_mix_2, vv_mix_3, vv_1, vvv_1;
--enable_warnings
--disable_warnings
drop view if exists v_2t_1, v_3t_1;
--enable_warnings
--disable_warnings
drop view if exists view_v1, view_v2, view_v3, view_v4, view_v5, view_v6, view_v7;
--enable_warnings
--disable_warnings
drop table if exists view_t1_not_null, view_t1_null_default, view_t1_not_null_default;
--enable_warnings
--disable_warnings
drop view if exists view_v1_null_default, view_v1_not_null, view_v1_not_null_default;
--enable_warnings
--disable_warnings
drop table if exists view_t1, view_t2, view_t3;
--enable_warnings
#
#drop view if exists xy1.view_v1, xy2.view_v2, xy3.view_v3;
#drop view if exists xy1.view_v1, view_v2, xy3.view_v3;
# select_stmt with brackets or not
--disable_warnings
drop view if exists v1,v2,v3;
--enable_warnings
--disable_warnings
drop table if exists t1;
--enable_warnings
create table t1(c1 int primary key);
insert into t1 values(1),(2);
#create view v1 as select * from t1;
create view v1 as select c1 from t1;
#$create view v2 as (select * from t1);
create view v2 as (select c1 from t1);
#create view v3 as ((select * from t1));
create view v3 as ((select c1 from t1));
insert into t1 values(3),(4);
select * from v1;
select * from v2;
select * from v3;
--disable_warnings
drop view if exists v1,v2,v3;
--enable_warnings
#--error TODO xiyu
#select * from v;
--disable_warnings
drop table if exists t1;
--enable_warnings
# Bug
--disable_warnings
drop table if exists t1;
--enable_warnings
--disable_warnings
drop view if exists v1;
--enable_warnings
create table t1(c1 varchar(10));
insert into t1 value('test1');
insert into t1 value('test2');
create view v1 as select c1 from t1;
--sorted_result
select v1.c1 from v1 join t1 on v1.c1 = t1.c1;
--source mysql_test/include/show_create_table_old_version_replica2.inc
show create view v1;
--disable_warnings
drop table if exists t1;
--enable_warnings
--disable_warnings
drop view if exists v1;
--enable_warnings
#replace view
--disable_warnings
drop table if exists t1;
--enable_warnings
--disable_warnings
drop view if exists v1;
--enable_warnings
create table t1(c1 int, c2 int);
insert into t1 values(1,1);
select * from t1;
create or replace view v1 as select c1 from t1;
select * from v1;
#create or replace view v1 as select * from t1;
create or replace view v1 as select c1,c2 from t1;
select * from v1;
--source mysql_test/include/show_create_table_old_version_replica2.inc
show create view v1;
--error 1050
create view v1 as select c2 from t1;
drop view v1;
drop table t1;
##
--disable_warnings
drop table if exists t1;
--enable_warnings
--disable_warnings
drop view if exists v1;
--enable_warnings
# schema
create table t1(c1 int,c2 int);
create table t2(a int,b int);
create view v as select c1,c2 from t1;
create view vv as select c1,c2,a,b from v,t2;
#create view vv as select * from t1;
select * from v;
select c1 from v;
select * from vv;
select c1 from vv;
# drop column
alter table t1 drop column c2;
--error 1356
select * from v;
--error 1356
select * from vv;
--error 1356
select c1 from v;
--error 1356
select c1 from vv;
--error 1356
select c2 from v;
--error 1356
select c2 from vv;
# recover dropped column
alter table t1 add column c2 int;
select * from v;
select * from vv;
# drop table
drop table t1;
--error 1356
select * from v;
--error 1356
select * from vv;
# recover table with different column_type
create table t1(c1 varchar(10), c2 datetime);
select * from v;
select * from vv;
drop table t1;
# recover table with different column_count
create table t1(c1 varchar(10), c2 datetime, c3 int);
select * from v;
select * from vv;
# insert and select
drop table t1;
create table t1(c1 int,c2 int);
insert into t1 values(1,10),(2,11);
select * from v;
select * from vv;
drop table t1;
create table t1(c1 varchar(10), c2 double, c3 int);
insert into t1 values('hello', 100.10, 1),('hello', 100.11,2);
select * from v;
select * from v;
drop table t1;
drop view v;
create table t1(c1 int, c2 int);
insert into t1 values(1,1), (2,2);
create view v as select 5 from t1 order by 1;
select * from v;
create view v1 as select * from t1 where c1>'1';
--source mysql_test/include/show_create_table_old_version_replica2.inc
show create view v1;
select * from v1;
drop view v, v1;
create view v as select 5, 6 from t1 order by 1,2;
select * from v;
drop view v;
create view v as select c1 + 1 from t1 order by 1;
select * from v;
drop view v;
create view v as select 7 + 3 from t1 order by 1;
select * from v;
drop view v;
--disable_warnings
drop table if exists t1;
--enable_warnings
create table t1(a int, b int);
insert into t1 values (1,1);
create view v as select group_concat(b) from t1 group by a;
select * from v;
drop table if exists t1;
drop view if exists v;
create table t1(c1 datetime, c2 int);
insert into t1 values('1990-03-03 00:00:00', 2), ('2016-05-31 20:00:00', 3);
create view v as select * from t1 where c1>'1990-04-01 00:00:00';
--source mysql_test/include/show_create_table_old_version_replica2.inc
show create view v;
select * from v;
drop view if exists v;
drop table if exists t1;
drop view if exists v1, v2;
create table t1(col1 varchar(12) character set utf8mb4 collate utf8mb4_general_ci);
insert into t1 values('t1_val');
create view v1 as select 'v1_val' collate utf8mb4_general_ci as col1;
--source mysql_test/include/show_create_table_old_version_replica2.inc
show create view v1;
create view v2 as select col1 from v1 union select col1 from t1;
--source mysql_test/include/show_create_table_old_version_replica2.inc
show create view v2;
select coercibility(col1), collation(col1) from v2;
# 本句勿删,且保证始终是该脚本的最后一行
drop database if exists db_view;