oceanbase/unittest/sql/parser/test_parser.test
2024-08-12 10:05:52 +00:00

341 lines
18 KiB
Plaintext

create table t1(c1 bit);
create table t1(c1 bit(10));
#error
create table s002 (c1 int primary key, c2 varchar(50), unique index idx(c2(20)))
create table s001 (c1 int primary key, c2 varchar(50), unique key idx(c2(20)))
create table s001 (c1 int primary key, c2 varchar(50), unique idx(c2(20)))
use rongxuan;
start transaction read only;
start transaction read write;
start transaction with consistent snapshot, read only;
start transaction read write, with consistent snapshot;
start/*hint+start tx hint*/ transaction;
begin;
begin/*hint+begin*/;
begin work;
begin/*hint+begin work*/ work;
commit;
commit/*hint+commit*/;
commit work;
commit/*hint+commit work*/ work;
--sql_mode oracle
commit comment 'comment transaction commit';
commit work comment 'comment txn commit work';
commit/*hint+commit tx hint*/ comment 'comment + hint';
commit/*hint+commit tx work hint*/ work comment 'comment + hint';
--sql_mode mysql
rollback;
rollback/*hint+rollback*/;
rollback work;
rollback/*hint+rollback work*/ work;
alter user 'zdy' account lock;
alter user 'zdy' account unlock;
select d.t1.c1, sum(t1.c2) from d.t1 where d.t1.c1 > 0 and c2 + d.t1.c1 = 100 group by d.t1.c2 order by t.d1.c1 desc limit 0, 1
select c1, sum(d.t1.c2) from t1 where t1.c1 > 0 and c2 + t1.c1 = 100 group by t1.c2 order by t1.c1 desc limit 0, 1
select t1.c1, sum(c2) from t1 where c1 > 0 and c2 + c1 = 100 group by c2 order by c1 desc limit 0, 1
insert into t1 values(1, 2)
insert into t1.t1 values(1, 2)
insert into t1(c1) values(1), (2)
insert into t1(t1.c1) values(1), (2)
insert into d.t1(d.t1.c1) values(1), (2)
update t1 set d.t1.c2=t1.c1+1 where d.t1.c1 > 1 order by d.t1.c1 desc limit 0, 10
update d.t1 set t1.c2=d.t1c1+1 where t1.c1 > 1 order by c1 desc limit 0, 10
delete from d.t1 where d.t1.c2 > 10 order by c1 limit 0, 1
select t1.c1, t2.c1 from d.t1 join d.t2 on d.t1.c1=t2.c1 where t1.c1>0;
select d.t1.c1, t2.c1 from d.t1 join t2 on t1.c1=t2.c1 where t1.c1>0;
select d.t1.c1, t2.c1 from d.t1 join t2 on c1=c1 where t1.c1>0;
insert into t1 value (1, 2), (3, 4) on duplicate key update d.t.c1 = t.c2 + 1, c2 = c2 + 3;
insert into d.t1 value (1, 2), (3, 4) on duplicate key update t.c1 = t.c2 + 1, d.t.c2 = t.c2 + 3;
create table rongxuan(c int primary key, c2 int)
create table rongxuan(rongxuan.c int primary key, c2 int)
create table rongxuan(d.rongxuan.c int primary key, c2 int)
drop table t1
drop table oceanbase.t, t1
alter table rongxuan add c3 int;
alter table rongxuan add rongxuan.c4 int;
alter table rongxuan add test.rongxuan.c5 int;
drop database rongxuan
create database rongxuan
create database if not exists rongxuan
create database if not exists rongxuan default character set = 'utf8' default collate = 'default_collate'
select * from d.t1 PARTITION(p1, p2);
delete from d.t1 PARTITION(p0, p1);
update d.t1 PARTITION (p2) SET id = 2 WHERE name = 'Jill';
INSERT INTO d.t1 PARTITION (p3, p4) VALUES (24, 'Tim', 'Greene', 3, 1), (26, 'Linda', 'Mills', 2, 1);
REPLACE INTO d.t1 PARTITION (p0) VALUES (20, 'Jan', 'Jones', 3, 2);
SELECT e.id, s.city, d.name FROM e JOIN stores PARTITION (p1) ON e.id=s.id JOIN departments PARTITION (p0) ON e.id=d.id;
#alter system switch replica leader zone = 'z1';
#alter system switch replica leader server = '127.0.0.1:80';
#alter system switch replica leader partition_id = '1%8@3001' server = '127.0.0.1:80';
#alter system switch replica leader partition_id '1%8@3001' server '127.0.0.1:80';
alter system report replica;
alter system report replica server = '127.0.0.1:80';
alter system report replica zone = 'z1';
alter system recycle replica;
alter system recycle replica server = '127.0.0.1:80';
alter system recycle replica server '127.0.0.1:80';
alter system recycle replica zone = 'z1';
alter system recycle replica zone 'z1';
alter system major freeze;
alter system start merge zone = 'z1';
alter system suspend merge;
alter system suspend merge tenant = sys;
alter system suspend merge tenant = all_user;
alter system suspend merge tenant = all_meta;
alter system resume merge;
alter system resume merge tenant = sys;
alter system resume merge tenant = all_user;
alter system resume merge tenant = all_meta;
alter system clear roottable;
alter system clear roottable tenant = 'xxx';
alter system modify zone 'z1' set region 'r1'
--error 5001
alter system start zone 'z1' region 'r1'
alter system modify zone 'z1' IDC 'idc1'
alter system modify zone 'z1' set IDC 'idc1', region 'r1'
alter system add zone 'z1' idc 'idc1', region 'r1'
alter system add zone 'z1' idc 'idc1'
alter system modify zone 'z1'
--error 5001
alter system start zone 'z1' IDC 'idc1'
--error 5001
alter system start zone 'z1' zone_type 'ReadWrite'
alter system add zone 'z1' zone_type 'ReadWrite', idc 'idc1', region 'r1'
alter system add zone 'z1' zone_type 'ReadWrite', idc 'idc1'
alter system add zone 'z1' zone_type 'ReadWrite', region 'r1'
alter system add zone 'z1' zone_type 'ReadWrite'
alter system modify zone 'z1' zone_type 'ReadWrite', idc 'idc1', region 'r1'
alter system modify zone 'z1' zone_type 'ReadWrite', idc 'idc1'
alter system modify zone 'z1' zone_type 'ReadWrite', region 'r1'
alter system modify zone 'z1' zone_type 'ReadWrite'
select * from t1 where c1>ANY(select c1 from t2 where c2>1);
select * from t1 where c1>SOME(select c1 from t2 where c2>1);
select * from t1 where c1>ALL(select c1 from t2 where c2>1);
select * from t1 where c1>(select c1 from t2 where c2>1);
select * from t1 where c1<ANY(select c1 from t2 where c2>1);
select * from t1 where c1<SOME(select c1 from t2 where c2>1);
select * from t1 where c1<ALL(select c1 from t2 where c2>1);
select * from t1 where c1<(select c1 from t2 where c2>1);
select * from t1 where c1>=ANY(select c1 from t2 where c2>1);
select * from t1 where c1>=SOME(select c1 from t2 where c2>1);
select * from t1 where c1>=ALL(select c1 from t2 where c2>1);
select * from t1 where c1>=(select c1 from t2 where c2>1);
select * from t1 where c1<=ANY(select c1 from t2 where c2>1);
select * from t1 where c1<=SOME(select c1 from t2 where c2>1);
select * from t1 where c1<=ALL(select c1 from t2 where c2>1);
select * from t1 where c1<=(select c1 from t2 where c2>1);
select * from t1 where c1=ANY(select c1 from t2 where c2>1);
select * from t1 where c1=SOME(select c1 from t2 where c2>1);
select * from t1 where c1=ALL(select c1 from t2 where c2>1);
select * from t1 where c1=(select c1 from t2 where c2>1);
select * from t1 where c1!=ANY(select c1 from t2 where c2>1);
select * from t1 where c1!=SOME(select c1 from t2 where c2>1);
select * from t1 where c1!=ALL(select c1 from t2 where c2>1);
select * from t1 where c1!=(select c1 from t2 where c2>1);
select * from t1 where c1 in (select c1 from t2 where c2>1);
select * from t1 where c1 not in (select c1 from t2 where c2>1);
select * from t1 where exists (select c1 from t2 where c2>1);
select * from t1 where not exists (select c1 from t2 where c2>1);
select * from t1 where (select c1 from t1) like (select c2 from t2);
select * from t1 where (select c1 from t1) not like (select c2 from t2);
select * from t1 where (c1) in (select c1 from t2);
select * from t1 where (c1, c2) in (select c1, c2 from t2);
select * from t1 where ROW(c1, c2) in (select c1, c2 from t2);
set names latin1;
set names 'latin1';
set names utf8 collate 'utf8_general_ci';
set names utf8 collate utf8_general_ci;
set character set utf8;
set character set 'utf8';
set charset utf8;
select _utf8 'abc', _utf8mb4 'def' collate utf8mb4_general_ci from t1 where c1 collate utf8_bin = 'xyz' collate utf8_bin;
select * from t1 where c1=?;
select * from t1 where c1>?;
select * from t1 where (select c1 from t1 where c1 = ?) not like (select c2 from t2 where c2=?);
#test join syntax with no join_condition
select * from t1 join t2;
select * from t1 inner join t2;
select * from t1 cross join t2;
select * from t1 cross join t2 join t3;
select "1234";
select '1234';
create table test(c1 varchar(3) binary charset utf8mb4);
replace into test values(1,2);
replace ignore into test values(1,2);
insert ignore into test values(1,2);
insert ignore into test values(1,2) on duplicate key update c2 = c1 + 1;
#test for create outline
create outline out_name on select * from t1;
create or replace outline out_name on select * from t1;
create outline out_name on select * from t1;
create outline out_name on select /*+ssssss*/* from t1;
create outline out_name on select /*+ssssss*/* from t1 to select /*+ssssss*/* from t1;
create outline out_name on select /*+ssssss*/* from t1 to select * from t1;
create outline out_name on insert /*+ssssss*/ into t1 values(1, 2) to insert /*+ssssss*/ into t1 values(1, 2);
#test for drop outline
drop outline out_name;
drop outline db_name.out_name;
#test create tenant, alter tenant
create tenant tt1 replica_num = 1, primary_zone = 'zone1', resource_pool_list = ('zone1') set ob_tcp_invited_nodes='%';
create tenant if not exists tt1 replica_num = 1, primary_zone = 'zone1', resource_pool_list = ('zone1') set ob_tcp_invited_nodes='%';
create tenant tt1 replica_num = 1, primary_zone = 'zone1', resource_pool_list = ('zone1'), locality = 'auto_locality_strategy' set ob_tcp_invited_nodes='%';
create tenant if not exists tt1 replica_num = 1, primary_zone = 'zone1', resource_pool_list = ('zone1'), locality = 'auto_locality_strategy' set ob_tcp_invited_nodes='%';
create tenant tt1 replica_num = 1, primary_zone = 'zone1', resource_pool_list = ('zone1'), logonly_replica_num = 1 set ob_tcp_invited_nodes='%';
create tenant if not exists tt1 replica_num = 1, primary_zone = 'zone1', resource_pool_list = ('zone1'), logonly_replica_num = 1 set ob_tcp_invited_nodes='%';
select /*+max_concurrent(-10)*/* from t1;
select /*+max_concurrent(10)*/* from t1;
alter system refresh time_zone_info;
########################## test for hierarchical query ###################################
### test for prior expression ###
#select emp_id, mgr_id, emp_name from emp connect by prior emp_id = mgr_id;
#select emp_id, mgr_id, emp_name from emp connect by prior (emp_id + 1) = mgr_id;
#select emp_id, mgr_id, emp_name from emp connect by prior emp_id = mgr_id and prior emp_id = emp_name;
#select emp_id, mgr_id, emp_name from emp connect by prior emp_id = mgr_id or prior emp_id = emp_name;
#
#select emp_id, mgr_id, emp_name from emp connect by emp_id != 1;
#select emp_id, mgr_id, emp_name from emp connect by emp_id != 1 and emp_id = 2;
#select emp_id, mgr_id, emp_name from emp connect by emp_id != 1 or emp_id = 2;
#
#select emp_id, mgr_id, emp_name from emp connect by prior emp_id = mgr_id and emp_id > 10;
#
#select emp_id, mgr_id, emp_name from emp connect by nocycle prior emp_id = mgr_id;
#
#select emp_id, mgr_id, emp_name from emp connect by nocycle prior (select min(c1) from t1) = mgr_id;
#select emp_id, mgr_id, emp_name from emp connect by nocycle prior emp_id = (select min(c1) from t1);
#select emp_id, emp_name, mgr_id from emp connect by prior emp_id = (select min(c1) from t1 where c1 > emp_id);
#
#### test start with ###
#
#select emp_id, mgr_id, emp_name from emp start with emp_id = 1 connect by prior emp_id = mgr_id;
#select emp_id, mgr_id, emp_name from emp start with (select min(c1) from t1) = 1 connect by prior emp_id = mgr_id;
#select emp_id, mgr_id, emp_name from emp start with emp_id = 1 or emp_id = 2 connect by prior emp_id = mgr_id;
#
#### test for pseudocolumn ##
#select level, emp_id from emp connect by prior emp_id = mgr_id;
#select max(level), emp_id from emp connect by prior emp_id = mgr_id;
#select level, emp_id from emp where level < 1 connect by prior emp_id = mgr_id;
#--error 5001
#create table t1(level int);
#create table t1(`level` int);
#
#select connect_by_isleaf, emp_id from emp connect by prior emp_id = mgr_id;
#select max(connect_by_isleaf), emp_id from emp connect by prior emp_id = mgr_id;
#select connect_by_isleaf, emp_id from emp where connect_by_isleaf < 1 connect by prior emp_id = mgr_id;
#
#select connect_by_iscycle, emp_id from emp connect by prior emp_id = mgr_id;
#select max(connect_by_iscycle), emp_id from emp connect by prior emp_id = mgr_id;
#select connect_by_iscycle, emp_id from emp where connect_by_iscycle < 1 connect by prior emp_id = mgr_id;
#
#### test for order siblings by ##
#select emp_id from emp connect by prior emp_id = gmr_id order by emp_id;
#select emp_id from emp connect by prior emp_id = gmr_id order siblings by emp_id;
#select emp_id from emp connect by prior emp_id = gmr_id order siblings by emp_id asc;
#select emp_id from emp connect by prior emp_id = gmr_id order siblings by emp_id asc, mgr_id;
#
#### test for connect_by_root ###
#select connect_by_root(emp_id) from emp connect by prior emp_id = gmr_id order by emp_id;
#select connect_by_root(level) from emp connect by prior emp_id = gmr_id order by emp_id;
#
### test for sys_connect_by_path ##
#select sys_connect_by_path(emp_id, 1) from emp connect by prior emp_id = gmr_id order by emp_id;
#select sys_connect_by_path(emp_id, '/') from emp connect by prior emp_id = gmr_id order by emp_id;
#select sys_connect_by_path(1, '/') from emp connect by prior emp_id = gmr_id order by emp_id;
#select sys_connect_by_path(emp_id + 1, '/') from emp connect by prior emp_id = gmr_id order by emp_id;
#--error 5001
#select sys_connect_by_path(emp_id, mgr_id) from emp connect by prior emp_id = gmr_id order by emp_id;
#
### test for group by ##
#select emp_id, mgr_id from emp where emp_id = 1 start with emp_id = 1 connect by prior c1 = 1 group by c1 having c1 > 1;
#
### test for limit ##
#select emp_id, mgr_id from emp where emp_id = 1 start with emp_id = 1 connect by prior c1 = 1 group by c1 having c1 > 1 limit 10;
########################## test for flashback and purge index ###################################
#flashback index t1_index to before drop;
#purge index t1_index;
######################## test for merge stmt ####################################
--error 5001
merge into targetTable t1 using sourceTable t2 on (t1.id = t2.id) when matched then update set t1.sales = t2.sales when not matched then insert(t1.id, t1.sales) values(t2.id, t2.sales);
--error 5001
merge into targetTable t1 using sourceTable t2 on (t1.id = t2.id) when matched then update set t1.sales = t2.sales where t2.id!= t1.id when not matched then insert(t1.id, t1.sales) values(t2.id, t2.sales);
--error 5001
merge into targetTable t1 using sourceTable t2 on (t1.id = t2.id) when matched then update set t1.sales = t2.sales where t1.id < 3 delete where t1.id < 5 when not matched then insert(t1.id, t1.sales) values(t2.id, t2.sales);
--error 5001
merge into targetTable t1 using sourceTable t2 on (t1.id = t2.id) when matched then update set t1.sales = t2.sales delete where t1.sales =2 when not matched then insert(t1.id, t1.sales) values(t2.id, t2.sales);
--error 5001
merge into targetTable t1 using sourceTable t2 on (t1.id = t2.id) when not matched then insert(t1.id, t1.sales) values(t2.id, t2.sales) where t2.id > 0;
--error 5001
merge into targetTable t1 using sourceTable t2 on (1 = 2) when not matched then insert(t1.id, t1.sales) values(t2.id, t2.sales) where t2.id > 0;
--error 5001
merge into targetTable t1 using sourceTable t2 on (t1.id = t2.id) when matched then update set t1.sales = t2.sales;
--error 5001
merge into targetTable using sourceTable on (targetTable.id = sourceTable.id) when matched then update set targetTable.sales = sourceTable.sales;
--error 5001
merge into targetTable using (select * from t1 ) sourceTable on (targetTable.id = sourceTable.id) when matched then update set targetTable.sales = sourceTable.sales;
select unique(c1), c2 from t1;
select unique(c1+1), c2 from t1;
select distinct unique( max(c1)), c2 from t1;
select unique distinct( max(c1)), c2 from t1;
--error 5001
select unique(*) from t1;
########################## test for returning ###################################
--sql_mode oracle
delete from t1 where c1 = 1 returning c1 + 1, c2 * 2;
update t1 set c1 = 1 where c2 = 2 returning c1, c2 + 3, c3 * c4;
insert into t1 values(1, 2, 3) returning c1, c2, c3;
--error 5001
replace into t1 values(1, 2) returning c1, c2, c3, c4, c5, c6;
############# tablegroup ##################
--sql_mode mysql
alter tablegroup tg2 add table t1,t2;
insert into t1 values(X'');
create table t1(`thedate` date NOT NULL COMMENT '日期');
alter system bootstrap REGION 'sys_region' ZONE 'zone1' SERVER '10.101.74.122:41425';
alter system transfer partition table_id = 1, object_id = 1 to ls 1001;
alter system transfer partition table_id = 1, object_id = 1 to ls 1001 tenant 'mysql';
alter system cancel transfer partition table_id = 1, object_id = 1;
alter system cancel transfer partition table_id = 1, object_id = 1 tenant 'mysql';
alter system cancel transfer partition ALL;
alter system cancel transfer partition ALL tenant 'mysql';
alter system cancel balance job;
alter system cancel balance job tenant 'mysql';
alter system add replica ls=100 server='100.88.107.212:5000' replica_type='F' data_source='100.88.107.212:5001' paxos_replica_num=3 tenant='mysql_tenant';
alter system add replica ls=100 server='100.88.107.212:5000' replica_type='F' data_source='100.88.107.212:5001' paxos_replica_num=3;
alter system add replica ls=100 server='100.88.107.212:5000' replica_type='F' data_source='100.88.107.212:5001';
alter system add replica ls=100 server='100.88.107.212:5000' replica_type='F';
alter system remove replica ls=100 server='100.88.107.212:5000' paxos_replica_num=3 tenant='mysql_tenant';
alter system remove replica ls=100 server='100.88.107.212:5000' paxos_replica_num=3;
alter system remove replica ls=100 server='100.88.107.212:5000';
alter system modify replica ls=100 server='100.88.107.212:5000' replica_type='F' paxos_replica_num=3 tenant='mysql_tenant';
alter system modify replica ls=100 server='100.88.107.212:5000' replica_type='F' paxos_replica_num=3;
alter system modify replica ls=100 server='100.88.107.212:5000' replica_type='F';
alter system modify ls=100 paxos_replica_num=3 tenant='mysql_tenant';
alter system modify ls=100 paxos_replica_num=3;
alter system migrate replica ls=100 source='100.88.107.212:5000' destination='100.88.107.212:5000' data_source='100.88.107.212:5001' tenant='mysql_tenant';
alter system migrate replica ls=100 source='100.88.107.212:5000' destination='100.88.107.212:5000' data_source='100.88.107.212:5001';
alter system migrate replica ls=100 source='100.88.107.212:5000' destination='100.88.107.212:5000';
alter system cancel replica task task_id = 'xxx' tenant='mysql_tenant';
alter system cancel replica task task_id = 'xxx';