mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
SQL: derived tables improvements [closes #185]
This commit is contained in:
165
mysql-test/suite/versioning/r/derived.result
Normal file
165
mysql-test/suite/versioning/r/derived.result
Normal file
@ -0,0 +1,165 @@
|
||||
create table emp
|
||||
(
|
||||
emp_id int,
|
||||
name varchar(127),
|
||||
mgr int
|
||||
) with system versioning;
|
||||
insert into emp values (1, 'bill', 0),
|
||||
(2, 'bill', 1),
|
||||
(3, 'kate', 1);
|
||||
set @ts=now(6);
|
||||
delete from emp;
|
||||
insert into emp values (4, 'john', 1);
|
||||
with ancestors as (select * from emp) select * from ancestors;
|
||||
emp_id name mgr
|
||||
4 john 1
|
||||
set @tmp= "with ancestors as (select * from emp) select * from ancestors";
|
||||
prepare stmt from @tmp;
|
||||
execute stmt;
|
||||
emp_id name mgr
|
||||
4 john 1
|
||||
drop prepare stmt;
|
||||
with ancestors as (select * from emp for system_time all) select * from ancestors;
|
||||
emp_id name mgr
|
||||
1 bill 0
|
||||
2 bill 1
|
||||
3 kate 1
|
||||
4 john 1
|
||||
set @tmp= "with ancestors as (select * from emp for system_time all) select * from ancestors";
|
||||
prepare stmt from @tmp;
|
||||
execute stmt;
|
||||
emp_id name mgr
|
||||
1 bill 0
|
||||
2 bill 1
|
||||
3 kate 1
|
||||
4 john 1
|
||||
drop prepare stmt;
|
||||
with recursive ancestors as (select * from emp) select * from ancestors;
|
||||
emp_id name mgr
|
||||
4 john 1
|
||||
set @tmp= "with recursive ancestors as (select * from emp) select * from ancestors";
|
||||
prepare stmt from @tmp;
|
||||
execute stmt;
|
||||
emp_id name mgr
|
||||
4 john 1
|
||||
drop prepare stmt;
|
||||
select emp_id from (select emp_id from emp where sys_trx_end>'2031-1-1') as tmp;
|
||||
emp_id
|
||||
4
|
||||
set @tmp= "select emp_id from (select emp_id from emp where sys_trx_end>'2031-1-1') as tmp";
|
||||
prepare stmt from @tmp;
|
||||
execute stmt;
|
||||
emp_id
|
||||
4
|
||||
drop prepare stmt;
|
||||
with recursive
|
||||
ancestors
|
||||
as
|
||||
(
|
||||
select e.emp_id, e.name, e.mgr
|
||||
from emp as e
|
||||
where name = 'john'
|
||||
union
|
||||
select ee.emp_id, ee.name, ee.mgr
|
||||
from emp as ee, ancestors as a
|
||||
where ee.mgr = a.emp_id
|
||||
)
|
||||
select * from ancestors;
|
||||
emp_id name mgr
|
||||
4 john 1
|
||||
set @tmp= "
|
||||
with recursive
|
||||
ancestors
|
||||
as
|
||||
(
|
||||
select e.emp_id, e.name, e.mgr
|
||||
from emp as e
|
||||
where name = 'john'
|
||||
union
|
||||
select ee.emp_id, ee.name, ee.mgr
|
||||
from emp as ee, ancestors as a
|
||||
where ee.mgr = a.emp_id
|
||||
)
|
||||
select * from ancestors";
|
||||
prepare stmt from @tmp;
|
||||
execute stmt;
|
||||
emp_id name mgr
|
||||
4 john 1
|
||||
drop prepare stmt;
|
||||
with recursive
|
||||
ancestors
|
||||
as
|
||||
(
|
||||
select e.emp_id, e.name, e.mgr
|
||||
from emp as e for system_time as of timestamp @ts
|
||||
where name = 'bill'
|
||||
union
|
||||
select ee.emp_id, ee.name, ee.mgr
|
||||
from emp as ee for system_time as of timestamp @ts, ancestors as a for system_time as of timestamp @ts
|
||||
where ee.mgr = a.emp_id
|
||||
)
|
||||
select * from ancestors;
|
||||
emp_id name mgr
|
||||
1 bill 0
|
||||
2 bill 1
|
||||
3 kate 1
|
||||
set @tmp= "
|
||||
with recursive
|
||||
ancestors
|
||||
as
|
||||
(
|
||||
select e.emp_id, e.name, e.mgr
|
||||
from emp as e for system_time as of timestamp @ts
|
||||
where name = 'bill'
|
||||
union
|
||||
select ee.emp_id, ee.name, ee.mgr
|
||||
from emp as ee for system_time as of timestamp @ts, ancestors as a for system_time as of timestamp @ts
|
||||
where ee.mgr = a.emp_id
|
||||
)
|
||||
select * from ancestors";
|
||||
prepare stmt from @tmp;
|
||||
execute stmt;
|
||||
emp_id name mgr
|
||||
1 bill 0
|
||||
2 bill 1
|
||||
3 kate 1
|
||||
drop prepare stmt;
|
||||
drop table emp;
|
||||
create or replace table t1 (x int) with system versioning;
|
||||
create or replace table t2 (y int) with system versioning;
|
||||
insert into t1 values (1);
|
||||
set @t0= now(6);
|
||||
insert into t1 values (2);
|
||||
delete from t1 where x = 1;
|
||||
insert into t2 values (10);
|
||||
select * from (select *, t1.sys_trx_end, t1.sys_trx_end as endo from t1) as s0;
|
||||
ERROR HY000: Derived table is prohibited: multiple end system fields `t1.sys_trx_end`, `t1.sys_trx_end` in query!
|
||||
select * from (select *, t1.sys_trx_end, t2.sys_trx_start from t1, t2) as s0;
|
||||
ERROR HY000: Derived table is prohibited: system fields from multiple tables `t1`, `t2` in query!
|
||||
select * from (select * from t1 for system_time as of timestamp @t0, t2) as s0;
|
||||
x y
|
||||
1 10
|
||||
select * from (select *, t1.sys_trx_end from t2, t1 for system_time as of timestamp @t0) as s0;
|
||||
y x
|
||||
10 1
|
||||
select * from (select *, t1.sys_trx_start from t2 for system_time as of now, t1) as s0 query for system_time as of timestamp @t0;
|
||||
y x
|
||||
10 1
|
||||
set @q= concat("create view vt1 as select * from t1 for system_time as of timestamp '", @t0, "'");
|
||||
prepare q from @q;
|
||||
execute q;
|
||||
drop prepare q;
|
||||
select * from vt1;
|
||||
x
|
||||
1
|
||||
select * from (select * from vt1, t2) as s0;
|
||||
x y
|
||||
1 10
|
||||
select * from (select *, vt1.sys_trx_end from t2, vt1) as s0;
|
||||
y x
|
||||
10 1
|
||||
select * from (select *, vt1.sys_trx_start from t2 for system_time as of now, vt1) as s0 query for system_time as of timestamp @t0;
|
||||
y x
|
||||
10 1
|
||||
drop table t1, t2;
|
||||
drop view vt1;
|
Reference in New Issue
Block a user