create database drop_view_database with dbcompatibility = 'B';
\c drop_view_database
create table test(id int, name varchar(20));
insert into test values(1, 'test1'), (2, 'test2'), (3, 'test3');
create view view1 as select * from test;
create view view2 as select id from test;
create view view3 as select name from test;
create view view4 as select v1.id as id1, v1.name as name1, v2.id from view1 as v1 cross join view2 as v2;
create view view5 as select * from test;
create view view6 as select id from test;
select * from view4;
 id1 | name1 | id 
-----+-------+----
   1 | test1 |  1
   1 | test1 |  2
   1 | test1 |  3
   2 | test2 |  1
   2 | test2 |  2
   2 | test2 |  3
   3 | test3 |  1
   3 | test3 |  2
   3 | test3 |  3
(9 rows)

create table table_view1 as select * from view1;
select * from table_view1;
 id | name  
----+-------
  1 | test1
  2 | test2
  3 | test3
(3 rows)

drop view if exists view1;
select * from view4;
ERROR:  The view view4 is invalid, please make it valid before operation.
HINT:  Please re-add missing table fields.
create view view1 as select * from test;
select * from view4;
 id1 | name1 | id 
-----+-------+----
   1 | test1 |  1
   1 | test1 |  2
   1 | test1 |  3
   2 | test2 |  1
   2 | test2 |  2
   2 | test2 |  3
   3 | test3 |  1
   3 | test3 |  2
   3 | test3 |  3
(9 rows)

drop view if exists view2, view3;
create view view2 as select id from test;
create view view3 as select name from test;
drop view if exists view5, view6;
create view view5 as select * from test;
create view view6 as select id from test;
drop view if exists view1 restrict;
select * from view4;
ERROR:  The view view4 is invalid, please make it valid before operation.
HINT:  Please re-add missing table fields.
create view view1 as select * from test;
select * from view4;
 id1 | name1 | id 
-----+-------+----
   1 | test1 |  1
   1 | test1 |  2
   1 | test1 |  3
   2 | test2 |  1
   2 | test2 |  2
   2 | test2 |  3
   3 | test3 |  1
   3 | test3 |  2
   3 | test3 |  3
(9 rows)

drop view if exists view2, view3 restrict;
create view view2 as select id from test;
create view view3 as select name from test;
drop view if exists view5, view6 restrict;
create view view5 as select * from test;
create view view6 as select id from test;
drop view view1 restrict;
select * from view4;
ERROR:  The view view4 is invalid, please make it valid before operation.
HINT:  Please re-add missing table fields.
create view view1 as select * from test;
select * from view4;
 id1 | name1 | id 
-----+-------+----
   1 | test1 |  1
   1 | test1 |  2
   1 | test1 |  3
   2 | test2 |  1
   2 | test2 |  2
   2 | test2 |  3
   3 | test3 |  1
   3 | test3 |  2
   3 | test3 |  3
(9 rows)

drop view view2, view3 restrict;
create view view2 as select id from test;
create view view3 as select name from test;
drop view view5, view6 restrict;
create view view5 as select * from test;
create view view6 as select id from test;
drop view if exists view1 cascade;
NOTICE:  drop cascades to view view4
select * from view4;
ERROR:  relation "view4" does not exist on datanode1
LINE 1: select * from view4;
                      ^
create view view1 as select * from test;
-- mysql can query view4, but openGauss error for view4 does not exist
select * from view4;
ERROR:  relation "view4" does not exist on datanode1
LINE 1: select * from view4;
                      ^
drop view if exists view2, view3 cascade;
create view view2 as select id from test;
create view view3 as select name from test;
drop view if exists view5, view6 cascade;
create view view5 as select * from test;
create view view6 as select id from test;
drop view view1 cascade;
select * from view4;
ERROR:  relation "view4" does not exist on datanode1
LINE 1: select * from view4;
                      ^
create view view1 as select * from test;
-- mysql can query view4, but openGauss error for view4 does not exist
select * from view4;
ERROR:  relation "view4" does not exist on datanode1
LINE 1: select * from view4;
                      ^
drop view view2, view3 cascade;
create view view2 as select id from test;
create view view3 as select name from test;
drop view view5, view6 cascade;
create view view5 as select * from test;
create view view6 as select id from test;
truncate table test;
select * from test;
 id | name 
----+------
(0 rows)

insert into test values(1, 'test1'), (2, 'test2'), (3, 'test3');
truncate test;
select * from test;
 id | name 
----+------
(0 rows)

\c postgres
drop database drop_view_database;