【实现内容】: 将本来的assert断言改成get_query_def 【根因分析】: 溯源了qrw的开关,qrw开关是给DEBUG_QRW用的,用于DFX,但是在I8HWD5语句中,QueryRewriteCTAS->deparse_query->get_select_query_def的调用导致context->qrw_phase传入false,触发了断言。 【实现方案】: assert(false)参考上下文改成改成get_query_def 【关联需求或issue】: https://e.gitee.com/opengaussorg/dashboard?issue=I8HWD5
121 lines
4.6 KiB
SQL
121 lines
4.6 KiB
SQL
-- test mysql "create table as"
|
|
-- a format
|
|
create schema a_createas;
|
|
set current_schema to 'a_createas';
|
|
|
|
create table t_base(col1 int, col2 int, col3 int);
|
|
|
|
create table t1 as select * from t_base;
|
|
select * from t1;
|
|
create table t2(col) as select * from t_base;
|
|
select * from t2;
|
|
-- fail
|
|
create table t3(col1,col2,col3,col4) as select * from t_base;
|
|
create table t4(col int) as select * from t_base;
|
|
|
|
reset current_schema;
|
|
drop schema a_createas cascade;
|
|
|
|
-- b format
|
|
create database b_createas dbcompatibility 'B';
|
|
\c b_createas
|
|
|
|
create table t_base(col1 int, col2 int, col3 int);
|
|
|
|
create table t1 as select * from t_base;
|
|
select * from t1;
|
|
create table t2(col) as select * from t_base;
|
|
select * from t2;
|
|
create table t3(col int) as select * from t_base;
|
|
select * from t3;
|
|
create table t4(col1 int) as select * from t_base;
|
|
select * from t4;
|
|
|
|
-- fail
|
|
create table t5() as select * from t_base;
|
|
create table t6(col1 int) as select col1,* from t_base;
|
|
|
|
-- duplicate key
|
|
insert into t_base values(1,1,10),(1,2,9),(2,2,8),(2,1,7),(1,1,6);
|
|
-- error
|
|
create table t7(col1 int unique) as select * from t_base;
|
|
-- ignore
|
|
create table t8(col1 int unique) ignore as select * from t_base;
|
|
select * from t8;
|
|
-- replace
|
|
create table t9(col1 int unique) replace as select * from t_base;
|
|
select * from t9 order by col3;
|
|
create table t10(col1 int unique, col2 int unique) replace as select * from t_base;
|
|
select * from t10 order by col3;
|
|
|
|
-- foreign key
|
|
create table ftable(col int primary key);
|
|
create table t11(col int, foreign key(col) references ftable(col)) as select * from t_base;
|
|
create table t12(col int references ftable(col)) as select * from t_base;
|
|
create table t13(foreign key(col1) references ftable(col)) as select * from t_base;
|
|
-- table like
|
|
create table t14(like t_base) as select * from t_base;
|
|
|
|
-- with no data
|
|
create table t15(id int, name char(8));
|
|
insert into t15(id) select generate_series(1,10);
|
|
create table t16(col1 int, id int) as select * from t15 where id with no data;
|
|
select * from t16;
|
|
create table t17(col1 int, id int unique) replace as select * from t15 where id with no data;
|
|
select * from t17;
|
|
|
|
-- union all
|
|
create table test1(id int,name varchar(10),score numeric,date1 date,c1 bytea);
|
|
insert into test1 values(1,'aaa',97.1,'1999-12-12','0101');
|
|
insert into test1 values(5,'bbb',36.9,'1998-01-12','0110');
|
|
insert into test1 values(30,'ooo',90.1,'2023-01-30','1001');
|
|
insert into test1 values(6,'hhh',60,'2022-12-22','1010');
|
|
insert into test1 values(7,'fff',71,'2001-11-23','1011');
|
|
insert into test1 values(-1,'yaya',77.7,'2008-09-10','1100');
|
|
insert into test1 values(7,'fff',71,'2001-11-23','1011');
|
|
insert into test1 values(null,null,null,null,null);
|
|
create table test2(id int,name varchar(10),score numeric,date1 date,c1 bytea);
|
|
insert into test2 values(1,'aaa',99.1,'1998-12-12','0101');
|
|
insert into test2 values(2,'hhh',36.9,'1996-01-12','0110');
|
|
insert into test2 values(3,'ddd',89.2,'2000-03-12','0111');
|
|
insert into test2 values(7,'uuu',60.9,'1997-01-01','1000');
|
|
insert into test2 values(11,'eee',71,'2011-11-20','1011');
|
|
insert into test2 values(-1,'yaya',76.7,'2008-09-10','1100');
|
|
insert into test2 values(7,'uuu',60.9,'1997-01-01','1000');
|
|
insert into test2 values(null,null,null,null,null);
|
|
create table tb1(col1 int,id int) as select * from test1 where id<4 union all select * from test2 where score>80 order by id,score;
|
|
select * from tb1 order by id;
|
|
create table tb2(col1 int,id int unique) replace as select * from test1 where id<4 union all select * from test2 where score>80 order by id,score;
|
|
select * from tb2 order by id;
|
|
|
|
-- test update
|
|
create table tb_primary(a int primary key, b int);
|
|
create table tb_unique(a int unique, b int);
|
|
insert into tb_primary values(1,2),(2,4),(3,6);
|
|
insert into tb_unique values(1,2),(2,4),(3,6);
|
|
-- error
|
|
insert into tb_primary values(1,1);
|
|
insert into tb_unique values(1,1);
|
|
-- UPDATE nothing
|
|
insert into tb_primary values(1,1) ON DUPLICATE KEY UPDATE NOTHING;
|
|
insert into tb_unique values(1,1) ON DUPLICATE KEY UPDATE NOTHING;
|
|
select * from tb_primary;
|
|
select * from tb_unique;
|
|
-- UPDATE
|
|
insert into tb_primary values(1,1) ON DUPLICATE KEY UPDATE a = 1, b = 1;
|
|
insert into tb_unique values(1,1) ON DUPLICATE KEY UPDATE a = 1, b = 1;
|
|
select * from tb_primary;
|
|
select * from tb_unique;
|
|
|
|
--fixbug
|
|
drop table if exists t_base;
|
|
create table t_base(col1 int, col2 int, col3 int);
|
|
insert into t_base values(1,2,3),(11,22,33);
|
|
create table ttt3(col int) as select * from t_base;
|
|
select * from ttt3;
|
|
|
|
CREATE TABLE table2 AS WITH RECURSIVE table1 ( pivot0 ) AS ( ( SELECT 1 UNION SELECT 1 LIMIT 1 ) UNION SELECT pivot0 + 1 FROM table1 WHERE pivot0 < 1 ) SELECT 1 ;
|
|
|
|
\c postgres
|
|
drop database b_createas;
|