1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00

SQL: derived, hiding, error messages

Many related changes.

Note that AS OF condition must always be pushed down to physical tables,
it cannot be applied to a derived or a view. Thus:

* no versioning for internal temporary tables, they can never store
  historical data.
* remove special versioning code from mysql_derived_prepare and
  remove ER_VERS_DERIVED_PROHIBITED - derived can have no historical
  data and cannot be prohibited for system versioning related reasons.
* do not expand select list for derived/views with sys vers fields,
  derived/views can never have historical data.
* remove special invisiblity rules for sys vers fields, they are no
  longer needed after the previous change
* remove system_versioning_hide, it lost the meaning after the
  previous change.
* remove ER_VERS_SYSTEM_TIME_CLASH, it's no "clash", the inner
  AS OF clause always wins.
* non-versioned fields in a historical query

reword the warning text, downgrade to note, don't
replace values with NULLs
This commit is contained in:
Sergei Golubchik
2017-12-30 13:40:36 +01:00
committed by Aleksey Midenkov
parent b06b5c3eab
commit e6a7457653
35 changed files with 98 additions and 451 deletions

View File

@@ -1 +0,0 @@
--system-versioning-hide=implicit

View File

@@ -99,16 +99,18 @@ delete from t1;
insert into t1 values (2);
insert into t2 values (10);
--error ER_VERS_DERIVED_PROHIBITED
--replace_column 2 # 3 #
select * from (select *, t1.sys_trx_end, t1.sys_trx_end as endo from t1) as s0;
--error ER_VERS_DERIVED_PROHIBITED
--replace_column 3 # 4 #
select * from (select *, t1.sys_trx_end, t2.sys_trx_start from t1, t2) as s0;
--echo # SYSTEM_TIME propagation from inner to outer
select * from (select * from t1 for system_time as of timestamp @t0, t2) as s0;
with s1 as (select * from t1 for system_time as of timestamp @t0, t2) select * from s1;
--echo # leading table selection
--replace_column 3 #
select * from (select *, t1.sys_trx_end from t2, t1 for system_time as of timestamp @t0) as s2;
--replace_column 3 #
with s3 as (select *, t1.sys_trx_end from t2, t1 for system_time as of timestamp @t0) select * from s3;
--echo ### VIEW instead of t1
@@ -122,11 +124,11 @@ select * from vt1;
select * from (select * from vt1, t2) as s0;
--echo ### SYSTEM_TIME clash
--error ER_VERS_SYSTEM_TIME_CLASH
--error ER_VERS_NOT_VERSIONED
select * from (select * from t1 for system_time all) for system_time all as dt0;
--error ER_VERS_SYSTEM_TIME_CLASH
--error ER_VERS_NOT_VERSIONED
select * from vt1 for system_time all;
--error ER_VERS_SYSTEM_TIME_CLASH
--error ER_VERS_NOT_VERSIONED
with dt1 as (select * from t1 for system_time all)
select * from dt1 for system_time all;

View File

@@ -1 +0,0 @@
--system-versioning-hide=implicit

View File

@@ -1,3 +1 @@
--system-versioning-hide=implicit
--system-versioning-alter-history=keep

View File

@@ -1 +0,0 @@
--system-versioning-hide=implicit

View File

@@ -192,7 +192,7 @@ delete from t1 where x = 3;
insert into t2 values (1);
select * from t1, t2 for system_time all;
--error ER_VERS_SYSTEM_TIME_CLASH
--error ER_VERS_NOT_VERSIONED
select * from (select * from t1 for system_time all, t2 for system_time all)
for system_time all as t;

View File

@@ -219,7 +219,7 @@ delete from t1 where x = 3;
insert into t2 values (1);
select * from t1, t2 for system_time all;
--error ER_VERS_SYSTEM_TIME_CLASH
--error ER_VERS_NOT_VERSIONED
select * from (select * from t1 for system_time all, t2 for system_time all) for system_time all as t;
--error ER_PARSE_ERROR
select * from (t1 for system_time all join t2 for system_time all) for system_time all;

View File

@@ -1 +0,0 @@
--system-versioning-hide=implicit

View File

@@ -76,37 +76,12 @@ set global system_versioning_asof= DEFAULT;
set system_versioning_asof= DEFAULT;
select @@global.system_versioning_asof, @@system_versioning_asof;
show variables where variable_name = "system_versioning_hide";
select * from t for system_time all;
set system_versioning_hide= AUTO;
select * from t;
select * from t for system_time as of timestamp current_timestamp(6);
--replace_regex /\d{4}-\d\d-\d\d \d\d:\d\d:\d\d\.\d{6}/TIMESTAMP/
select * from t for system_time all;
--replace_regex /\d{4}-\d\d-\d\d \d\d:\d\d:\d\d\.\d{6}/TIMESTAMP/
select * from t for system_time from '0-0-0' to current_timestamp(6);
--replace_regex /\d{4}-\d\d-\d\d \d\d:\d\d:\d\d\.\d{6}/TIMESTAMP/
select * from t for system_time between '0-0-0' and current_timestamp(6);
set system_versioning_hide= NEVER;
--replace_regex /\d{4}-\d\d-\d\d \d\d:\d\d:\d\d\.\d{6}/TIMESTAMP/
select * from t;
set system_versioning_hide= FULL;
create or replace table t (
x int,
st timestamp(6) as row start invisible,
en timestamp(6) as row end invisible,
period for system_time (st, en))
with system versioning;
show create table t;
insert into t values (2);
delete from t;
select * from t;
select * from t for system_time all;
drop table t;
set system_versioning_hide= IMPLICIT;

View File

@@ -1,2 +1 @@
--system-versioning-hide=implicit
--partition

View File

@@ -1 +0,0 @@
--system-versioning-hide=implicit