replace ts related to ddl with scn.

This commit is contained in:
obdev
2022-11-28 02:21:13 +00:00
committed by ob-robot
parent bbec6aff49
commit 8a4d14122f
539 changed files with 17685 additions and 173434 deletions

View File

@ -1,523 +0,0 @@
drop database if exists cte_st;
create database cte_st;
use cte_st;
## bugfix: https://work.aone.alibaba-inc.com/issue/37502128
result_format: 4
with cte1(c1, c2) as
(select 1, '0' from dual
union all select 2, '1' from dual
),
cte2(c1, c2) as
(select '0', 1 from dual
union all select cte1.c2, cte1.c1 from cte2, cte1 where 10 = cte2.c1)
select * from cte2;
ERROR 42S02: Table doesn't exist
WITH my_cte AS (SELECT 1 AS n UNION ALL SELECT 1+n FROM my_cte WHERE n<10 ) SELECT * FROM my_cte;
ERROR 42S02: Table doesn't exist
WITH recursive my_cte AS (SELECT 1 AS n UNION ALL SELECT 1+n FROM my_cte WHERE n<10 ) SELECT * FROM my_cte;
+------+
| n |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+------+
WITH recursive my_cte AS (SELECT 1+n FROM my_cte WHERE n<10 UNION ALL SELECT 1 AS n) SELECT * FROM my_cte;
ERROR HY000: Recursive Common Table Expression should have one or more non-recursive query blocks followed by one or more recursive ones
WITH my_cte AS (SELECT 1+n FROM my_cte WHERE n<10 UNION ALL SELECT 1 AS n) SELECT * FROM my_cte;
ERROR 42S02: Table doesn't exist
##bugfix: https://work.aone.alibaba-inc.com/issue/37501730
create table t1(deptno number, loc varchar(100));
CREATE TABLE t2(EMPNO DECIMAL(4) UNIQUE,ENAME VARCHAR(10) NOT NULL,JOB VARCHAR(9),MGR DECIMAL(4),HIREDATE DATE,SAL DECIMAL(7,2),COMM DECIMAL(7,2),DEPTNO INT);
WITH
temp AS (SELECT e.deptno,e.loc FROM t1 e WHERE e.loc IN ('New York','ChiCaGo') ORDER BY e.deptno),
temp AS (SELECT p.deptno,p.job FROM t2 p WHERE p.job NOT IN ('CLERK','ANALYST') ORDER BY p.deptno)
SELECT e.deptno,e.loc,p.job FROM temp e,temp p WHERE e.deptno = p.deptno ORDER BY 1,2,3;
ERROR 42000: Not unique table/alias: 'temp'
##bugfix: https://work.aone.alibaba-inc.com/issue/37715234
CREATE TABLE employees (
id INT PRIMARY KEY NOT NULL,
name VARCHAR(100) NOT NULL,
manager_id INT NULL,
INDEX (manager_id)
);
INSERT INTO employees VALUES(333, 'Yasmina', NULL);
INSERT INTO employees VALUES(198, 'John', 333);
INSERT INTO employees VALUES(692, 'Tarek', 333);
INSERT INTO employees VALUES(29, 'Pedro', 198);
INSERT INTO employees VALUES(4610, 'Sarah', 29);
INSERT INTO employees VALUES(72, 'Pierre', 29);
INSERT INTO employees VALUES(123, 'Adil', 692);
## result not correct. https://aone.alibaba-inc.com/task/35657687
WITH RECURSIVE employee_paths (id, name, path) AS
(
SELECT id, name, 1
FROM employees
WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, CONCAT(ep.path, ',', e.id)
FROM employee_paths ep JOIN employees e
ON ep.id = e.manager_id
)
SELECT * FROM employee_paths ORDER BY name;
+------+---------+------+
| id | name | path |
+------+---------+------+
| 123 | Adil | 1 |
| 198 | John | 1 |
| 29 | Pedro | 1 |
| 72 | Pierre | 1 |
| 4610 | Sarah | 1 |
| 692 | Tarek | 1 |
| 333 | Yasmina | 1 |
+------+---------+------+
WITH RECURSIVE employee_paths (id, name, path) AS
(
SELECT id, name, CAST(id AS CHAR(200))
FROM employees
WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, CONCAT(ep.path, ',', e.id)
FROM employee_paths AS ep JOIN employees AS e
ON ep.id = e.manager_id
)
SELECT * FROM employee_paths ORDER BY name;
+------+---------+-----------------+
| id | name | path |
+------+---------+-----------------+
| 123 | Adil | 333,692,123 |
| 198 | John | 333,198 |
| 29 | Pedro | 333,198,29 |
| 72 | Pierre | 333,198,29,72 |
| 4610 | Sarah | 333,198,29,4610 |
| 692 | Tarek | 333,692 |
| 333 | Yasmina | 333 |
+------+---------+-----------------+
drop database cte_st;
drop database if exists with_limit;
create database with_limit;
use with_limit;
with recursive CTETEMP(N) as
(
SELECT 1
UNION ALL
SELECT N+1 FROM CTETEMP WHERE N < 20
)
SELECT N as order_id
From CTETEMP
limit 10;
+----------+
| order_id |
+----------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+----------+
with recursive CTETEMP(N) as
(
SELECT 1
UNION ALL
SELECT N+1 FROM CTETEMP WHERE N < 20
)
SELECT N as order_id
From CTETEMP;
+----------+
| order_id |
+----------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
| 12 |
| 13 |
| 14 |
| 15 |
| 16 |
| 17 |
| 18 |
| 19 |
| 20 |
+----------+
drop database with_limit;
drop tenant if exists tenant_case_mode0 force;
drop tenant if exists tenant_case_mode1 force;
drop tenant if exists tenant_case_mode2 force;
DROP RESOURCE POOL IF EXISTS case_mode_pool;
DROP RESOURCE UNIT IF EXISTS case_mode_uint;
CREATE RESOURCE UNIT case_mode_uint MAX_CPU=1, MEMORY_SIZE='1G';
CREATE RESOURCE POOL case_mode_pool UNIT='case_mode_uint', UNIT_NUM=1, ZONE_LIST=('zone1');
# ORIGIN_AND_SENSITIVE
CREATE TENANT tenant_case_mode0 REPLICA_NUM = 1, RESOURCE_POOL_LIST = ('case_mode_pool'), collate = utf8mb4_bin set ob_tcp_invited_nodes='%', lower_case_table_names=0;
create database name_case;
use name_case;
show variables like 'lower_case_table_names';
Variable_name Value
lower_case_table_names 0
create table ORDERS(order_id int);
INSERT INTO ORDERS SELECT * FROM (
WITH RECURSIVE CTETMP (N) AS
(
SELECT 1
UNION ALL
SELECT N+1 FROM CTETMP WHERE N < 10
)
SELECT N AS ORDER_ID
FROM CTETMP
) t1
;
select * from ORDERS;
+----------+
| order_id |
+----------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+----------+
INSERT INTO ORDERS SELECT * FROM (
WITH RECURSIVE ctetmp (N) AS
(
SELECT 1
UNION ALL
SELECT N+1 FROM ctetmp WHERE N < 10
)
SELECT N AS ORDER_ID
FROM ctetmp
) t1
;
select * from ORDERS;
+----------+
| order_id |
+----------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+----------+
INSERT INTO ORDERS SELECT * FROM (
WITH RECURSIVE CTETMP (N) AS
(
SELECT 1
UNION ALL
SELECT N+1 FROM ctetmp WHERE N < 10
)
SELECT N AS ORDER_ID
FROM ctetmp
) t1
;
ERROR 42S02: Table 'name_case.ctetmp' doesn't exist
drop database name_case;
# LOWERCASE_AND_INSENSITIVE
drop tenant tenant_case_mode0 force;
CREATE TENANT tenant_case_mode1 REPLICA_NUM = 1, RESOURCE_POOL_LIST = ('case_mode_pool'), collate = utf8mb4_bin set ob_tcp_invited_nodes='%', lower_case_table_names=1;
create database name_case;
use name_case;
show variables like 'lower_case_table_names';
Variable_name Value
lower_case_table_names 1
create table ORDERS(order_id int);
INSERT INTO ORDERS SELECT * FROM (
WITH RECURSIVE CTETMP (N) AS
(
SELECT 1
UNION ALL
SELECT N+1 FROM CTETMP WHERE N < 10
)
SELECT N AS ORDER_ID
FROM CTETMP
) t1
;
select * from ORDERS;
+----------+
| order_id |
+----------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+----------+
INSERT INTO ORDERS SELECT * FROM (
WITH RECURSIVE ctetmp (N) AS
(
SELECT 1
UNION ALL
SELECT N+1 FROM ctetmp WHERE N < 10
)
SELECT N AS ORDER_ID
FROM ctetmp
) t1
;
select * from ORDERS;
+----------+
| order_id |
+----------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+----------+
INSERT INTO ORDERS SELECT * FROM (
WITH RECURSIVE CTETMP (N) AS
(
SELECT 1
UNION ALL
SELECT N+1 FROM ctetmp WHERE N < 10
)
SELECT N AS ORDER_ID
FROM ctetmp
) t1
;
select * from ORDERS;
+----------+
| order_id |
+----------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+----------+
drop database name_case;
# ORIGIN_AND_INSENSITIVE
drop tenant tenant_case_mode1 force;
CREATE TENANT tenant_case_mode2 REPLICA_NUM = 1, RESOURCE_POOL_LIST = ('case_mode_pool'), collate = utf8mb4_bin set ob_tcp_invited_nodes='%', lower_case_table_names=2;
create database name_case;
use name_case;
show variables like 'lower_case_table_names';
Variable_name Value
lower_case_table_names 2
create table ORDERS(order_id int);
INSERT INTO ORDERS SELECT * FROM (
WITH RECURSIVE CTETMP (N) AS
(
SELECT 1
UNION ALL
SELECT N+1 FROM CTETMP WHERE N < 10
)
SELECT N AS ORDER_ID
FROM CTETMP
) t1
;
select * from ORDERS;
+----------+
| order_id |
+----------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+----------+
INSERT INTO ORDERS SELECT * FROM (
WITH RECURSIVE ctetmp (N) AS
(
SELECT 1
UNION ALL
SELECT N+1 FROM ctetmp WHERE N < 10
)
SELECT N AS ORDER_ID
FROM ctetmp
) t1
;
select * from ORDERS;
+----------+
| order_id |
+----------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+----------+
INSERT INTO ORDERS SELECT * FROM (
WITH RECURSIVE CTETMP (N) AS
(
SELECT 1
UNION ALL
SELECT N+1 FROM ctetmp WHERE N < 10
)
SELECT N AS ORDER_ID
FROM ctetmp
) t1
;
select * from ORDERS;
+----------+
| order_id |
+----------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+----------+
drop database name_case;
# clean up
drop tenant tenant_case_mode2 force;
drop resource pool case_mode_pool;
drop resource unit case_mode_uint;

View File

@ -1,301 +0,0 @@
# owner: dachuan.sdc
# owner group: sql2
# tags: optimizer
--disable_warnings
drop database if exists cte_st;
--enable_warnings
create database cte_st;
use cte_st;
--echo ## bugfix: https://work.aone.alibaba-inc.com/issue/37502128
--result_format 4
--error 1146
with cte1(c1, c2) as
(select 1, '0' from dual
union all select 2, '1' from dual
),
cte2(c1, c2) as
(select '0', 1 from dual
union all select cte1.c2, cte1.c1 from cte2, cte1 where 10 = cte2.c1)
select * from cte2;
--error 1146
WITH my_cte AS (SELECT 1 AS n UNION ALL SELECT 1+n FROM my_cte WHERE n<10 ) SELECT * FROM my_cte;
WITH recursive my_cte AS (SELECT 1 AS n UNION ALL SELECT 1+n FROM my_cte WHERE n<10 ) SELECT * FROM my_cte;
--error 3574
WITH recursive my_cte AS (SELECT 1+n FROM my_cte WHERE n<10 UNION ALL SELECT 1 AS n) SELECT * FROM my_cte;
--error 1146
WITH my_cte AS (SELECT 1+n FROM my_cte WHERE n<10 UNION ALL SELECT 1 AS n) SELECT * FROM my_cte;
--echo ##bugfix: https://work.aone.alibaba-inc.com/issue/37501730
create table t1(deptno number, loc varchar(100));
CREATE TABLE t2(EMPNO DECIMAL(4) UNIQUE,ENAME VARCHAR(10) NOT NULL,JOB VARCHAR(9),MGR DECIMAL(4),HIREDATE DATE,SAL DECIMAL(7,2),COMM DECIMAL(7,2),DEPTNO INT);
--error 1066
WITH
temp AS (SELECT e.deptno,e.loc FROM t1 e WHERE e.loc IN ('New York','ChiCaGo') ORDER BY e.deptno),
temp AS (SELECT p.deptno,p.job FROM t2 p WHERE p.job NOT IN ('CLERK','ANALYST') ORDER BY p.deptno)
SELECT e.deptno,e.loc,p.job FROM temp e,temp p WHERE e.deptno = p.deptno ORDER BY 1,2,3;
--echo ##bugfix: https://work.aone.alibaba-inc.com/issue/37715234
CREATE TABLE employees (
id INT PRIMARY KEY NOT NULL,
name VARCHAR(100) NOT NULL,
manager_id INT NULL,
INDEX (manager_id)
);
INSERT INTO employees VALUES(333, 'Yasmina', NULL);
INSERT INTO employees VALUES(198, 'John', 333);
INSERT INTO employees VALUES(692, 'Tarek', 333);
INSERT INTO employees VALUES(29, 'Pedro', 198);
INSERT INTO employees VALUES(4610, 'Sarah', 29);
INSERT INTO employees VALUES(72, 'Pierre', 29);
INSERT INTO employees VALUES(123, 'Adil', 692);
## result not correct. https://aone.alibaba-inc.com/task/35657687
WITH RECURSIVE employee_paths (id, name, path) AS
(
SELECT id, name, 1
FROM employees
WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, CONCAT(ep.path, ',', e.id)
FROM employee_paths ep JOIN employees e
ON ep.id = e.manager_id
)
SELECT * FROM employee_paths ORDER BY name;
WITH RECURSIVE employee_paths (id, name, path) AS
(
SELECT id, name, CAST(id AS CHAR(200))
FROM employees
WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, CONCAT(ep.path, ',', e.id)
FROM employee_paths AS ep JOIN employees AS e
ON ep.id = e.manager_id
)
SELECT * FROM employee_paths ORDER BY name;
drop database cte_st;
#bugfix https://work.aone.alibaba-inc.com/issue/44898667
#use with limit
--disable_warnings
drop database if exists with_limit;
--enable_warnings
create database with_limit;
use with_limit;
with recursive CTETEMP(N) as
(
SELECT 1
UNION ALL
SELECT N+1 FROM CTETEMP WHERE N < 20
)
SELECT N as order_id
From CTETEMP
limit 10;
with recursive CTETEMP(N) as
(
SELECT 1
UNION ALL
SELECT N+1 FROM CTETEMP WHERE N < 20
)
SELECT N as order_id
From CTETEMP;
drop database with_limit;
#bugfix https://work.aone.alibaba-inc.com/issue/44947935
#test in different case mode
connect (sys,$OBMYSQL_MS0,admin,$OBMYSQL_PWD,test,$OBMYSQL_PORT);
connection sys;
let $zone = query_get_value(select zone from oceanbase.dba_ob_zones, zone, 1);
--disable_warnings
drop tenant if exists tenant_case_mode0 force;
drop tenant if exists tenant_case_mode1 force;
drop tenant if exists tenant_case_mode2 force;
--enable_warnings
--disable_warnings
eval DROP RESOURCE POOL IF EXISTS case_mode_pool;
eval DROP RESOURCE UNIT IF EXISTS case_mode_uint;
--enable_warnings
eval CREATE RESOURCE UNIT case_mode_uint MAX_CPU=1, MEMORY_SIZE='1G';
eval CREATE RESOURCE POOL case_mode_pool UNIT='case_mode_uint', UNIT_NUM=1, ZONE_LIST=('$zone');
--enable_query_log
--echo # ORIGIN_AND_SENSITIVE
CREATE TENANT tenant_case_mode0 REPLICA_NUM = 1, RESOURCE_POOL_LIST = ('case_mode_pool'), collate = utf8mb4_bin set ob_tcp_invited_nodes='%', lower_case_table_names=0;
--sleep 3
connect (conn_case_mode_sys0,$OBMYSQL_MS0, root@tenant_case_mode0, ,*NO-ONE*,$OBMYSQL_PORT);
connection conn_case_mode_sys0;
create database name_case;
use name_case;
show variables like 'lower_case_table_names';
create table ORDERS(order_id int);
INSERT INTO ORDERS SELECT * FROM (
WITH RECURSIVE CTETMP (N) AS
(
SELECT 1
UNION ALL
SELECT N+1 FROM CTETMP WHERE N < 10
)
SELECT N AS ORDER_ID
FROM CTETMP
) t1
;
select * from ORDERS;
INSERT INTO ORDERS SELECT * FROM (
WITH RECURSIVE ctetmp (N) AS
(
SELECT 1
UNION ALL
SELECT N+1 FROM ctetmp WHERE N < 10
)
SELECT N AS ORDER_ID
FROM ctetmp
) t1
;
select * from ORDERS;
--error 1146
INSERT INTO ORDERS SELECT * FROM (
WITH RECURSIVE CTETMP (N) AS
(
SELECT 1
UNION ALL
SELECT N+1 FROM ctetmp WHERE N < 10
)
SELECT N AS ORDER_ID
FROM ctetmp
) t1
;
drop database name_case;
--echo
--echo # LOWERCASE_AND_INSENSITIVE
connection sys;
drop tenant tenant_case_mode0 force;
CREATE TENANT tenant_case_mode1 REPLICA_NUM = 1, RESOURCE_POOL_LIST = ('case_mode_pool'), collate = utf8mb4_bin set ob_tcp_invited_nodes='%', lower_case_table_names=1;
--sleep 3
connect (conn_case_mode_sys1,$OBMYSQL_MS0, root@tenant_case_mode1, ,*NO-ONE*,$OBMYSQL_PORT);
connection conn_case_mode_sys1;
create database name_case;
use name_case;
show variables like 'lower_case_table_names';
create table ORDERS(order_id int);
INSERT INTO ORDERS SELECT * FROM (
WITH RECURSIVE CTETMP (N) AS
(
SELECT 1
UNION ALL
SELECT N+1 FROM CTETMP WHERE N < 10
)
SELECT N AS ORDER_ID
FROM CTETMP
) t1
;
select * from ORDERS;
INSERT INTO ORDERS SELECT * FROM (
WITH RECURSIVE ctetmp (N) AS
(
SELECT 1
UNION ALL
SELECT N+1 FROM ctetmp WHERE N < 10
)
SELECT N AS ORDER_ID
FROM ctetmp
) t1
;
select * from ORDERS;
INSERT INTO ORDERS SELECT * FROM (
WITH RECURSIVE CTETMP (N) AS
(
SELECT 1
UNION ALL
SELECT N+1 FROM ctetmp WHERE N < 10
)
SELECT N AS ORDER_ID
FROM ctetmp
) t1
;
select * from ORDERS;
drop database name_case;
--echo
--echo # ORIGIN_AND_INSENSITIVE
connection sys;
drop tenant tenant_case_mode1 force;
CREATE TENANT tenant_case_mode2 REPLICA_NUM = 1, RESOURCE_POOL_LIST = ('case_mode_pool'), collate = utf8mb4_bin set ob_tcp_invited_nodes='%', lower_case_table_names=2;
--sleep 3
connect (conn_case_mode_sys2,$OBMYSQL_MS0, root@tenant_case_mode2, ,*NO-ONE*,$OBMYSQL_PORT);
connection conn_case_mode_sys2;
create database name_case;
use name_case;
show variables like 'lower_case_table_names';
create table ORDERS(order_id int);
INSERT INTO ORDERS SELECT * FROM (
WITH RECURSIVE CTETMP (N) AS
(
SELECT 1
UNION ALL
SELECT N+1 FROM CTETMP WHERE N < 10
)
SELECT N AS ORDER_ID
FROM CTETMP
) t1
;
select * from ORDERS;
INSERT INTO ORDERS SELECT * FROM (
WITH RECURSIVE ctetmp (N) AS
(
SELECT 1
UNION ALL
SELECT N+1 FROM ctetmp WHERE N < 10
)
SELECT N AS ORDER_ID
FROM ctetmp
) t1
;
select * from ORDERS;
INSERT INTO ORDERS SELECT * FROM (
WITH RECURSIVE CTETMP (N) AS
(
SELECT 1
UNION ALL
SELECT N+1 FROM ctetmp WHERE N < 10
)
SELECT N AS ORDER_ID
FROM ctetmp
) t1
;
select * from ORDERS;
drop database name_case;
--echo # clean up
connection sys;
drop tenant tenant_case_mode2 force;
drop resource pool case_mode_pool;
drop resource unit case_mode_uint;
connection default;