-- source include/have_innodb.inc

--disable_warnings
drop table if exists t1;
--enable_warnings

create table t1 (
  XNo int unsigned,
  Sys_start timestamp(6) generated always as row start,
  Sys_end timestamp(6) generated always as row end,
  period for system_time (Sys_start, Sys_end)
) with system versioning;
show create table t1;

--echo # Implicit fields test
create or replace table t1 (
  XNo int unsigned
) with system versioning;
show create table t1;

--error ER_VERS_WRONG_PARAMS
create or replace table t1 (
  XNo int unsigned,
  Sys_start timestamp(6) generated always as row start,
  Sys_start2 timestamp(6) generated always as row start,
  Sys_end timestamp(6) generated always as row end,
  period for system_time (Sys_start, Sys_end)
) with system versioning;

--error ER_VERS_WRONG_PARAMS
create or replace table t1 (
  XNo int unsigned,
  Sys_start timestamp(6) generated always as row start,
  Sys_end2 timestamp(6) generated always as row end,
  period for system_time (Sys_start, Sys_end)
) with system versioning;

--error ER_VERS_WRONG_PARAMS
create or replace table t1 (
  XNo int unsigned,
  Sys_start timestamp(6) generated always as row start,
  Sys_end timestamp(6) generated always as row end,
  Sys_end2 timestamp(6) generated always as row end,
  period for system_time (Sys_start, Sys_end)
) with system versioning;

--error ER_VERS_WRONG_PARAMS
create or replace table t1 (
  XNo int unsigned,
  period for system_time (Sys_start, Sys_end)
) with system versioning;

--error ER_VERS_WRONG_PARAMS
create or replace table t1 (
  XNo int unsigned,
  Sys_start timestamp(6) generated always as row start,
  Sys_end timestamp(6) generated always as row end,
  Sys_end2 timestamp(6) generated always as row end,
  period for system_time (Sys_start, Sys_end)
);

--error ER_VERS_WRONG_PARAMS
create or replace table t1 (
  XNo int unsigned,
  Sys_start timestamp(6) generated always as row start,
  Sys_end timestamp(6) generated always as row end,
  period for system_time (sys_insert, sys_remove)
) with system versioning;

--error ER_VERS_WRONG_PARAMS
create or replace table t1 (
  XNo int unsigned,
  Sys_start timestamp(6) generated always as row start,
  Sys_end timestamp(6) generated always as row end,
  period for system_time (Sys_start, Sys_end)
);

--error ER_VERS_WRONG_PARAMS
create or replace table t1 (
  XNo int unsigned,
  Sys_start timestamp(6) generated always as row start,
  Sys_end timestamp(6) generated always as row end,
  period for system_time (Sys_start, Sys_start)
);

--error ER_VERS_FIELD_WRONG_TYPE
create or replace table t1 (
  XNo int unsigned,
  Sys_start int generated always as row start,
  Sys_end timestamp(6) generated always as row end,
  period for system_time (Sys_start, Sys_end)
) with system versioning;

--error ER_VERS_FIELD_WRONG_TYPE
create or replace table t1 (
  XNo int unsigned,
  Sys_start timestamp(6) generated always as row start,
  Sys_end int generated always as row end,
  period for system_time (Sys_start, Sys_end)
) with system versioning;

--error ER_VERS_FIELD_WRONG_TYPE
create or replace table t1 (
  XNo int unsigned,
  Sys_start timestamp(6) generated always as row start,
  Sys_end bigint generated always as row end,
  period for system_time (Sys_start, Sys_end)
) with system versioning engine innodb;

--error ER_VERS_FIELD_WRONG_TYPE
create or replace table t1 (
  XNo int unsigned,
  Sys_start bigint generated always as row start,
  Sys_end bigint generated always as row end,
  period for system_time (Sys_start, Sys_end)
) with system versioning engine innodb;

--error ER_VERS_FIELD_WRONG_TYPE
create or replace table t1 (
  XNo int unsigned,
  Sys_start bigint unsigned generated always as row start,
  Sys_end bigint generated always as row end,
  period for system_time (Sys_start, Sys_end)
) with system versioning engine innodb;

create or replace table t1 (
  A int with system versioning,
  B int
);
show create table t1;

create or replace table t1 (
  A int with system versioning,
  B int
) with system versioning;
show create table t1;

--error ER_VERS_WRONG_PARAMS
create or replace table t1 (
  A int,
  B int without system versioning
);

create or replace table t1 (
  A int,
  B int without system versioning
) with system versioning;
show create table t1;

create or replace table t1 (
  A int with system versioning,
  B int without system versioning
);
show create table t1;

create or replace table t1 (
  A int with system versioning,
  B int without system versioning
) with system versioning;
show create table t1;

--error ER_VERS_WRONG_PARAMS
create or replace table t1 (
  A int without system versioning
);

--error ER_VERS_WRONG_PARAMS
create or replace table t1 (
  A int without system versioning
) with system versioning;

--error ER_VERS_WRONG_PARAMS
create or replace table t1 (
  A int without system versioning with system versioning
);

--error ER_VERS_WRONG_PARAMS
create or replace table t1 (
  A int with system versioning without system versioning
);

--error ER_VERS_WRONG_PARAMS
create table t(
  a int
) without system versioning;

--error ER_VERS_WRONG_PARAMS
create or replace table t1 (
  A int
) without system versioning with system versioning;

--error ER_VERS_WRONG_PARAMS
create or replace table t1 (
  A int
) with system versioning without system versioning;

--error ER_VERS_WRONG_PARAMS
create or replace table t1 (
  A int
) with system versioning with system versioning;

--error ER_VERS_WRONG_PARAMS
create or replace table t1 (
  A int
) without system versioning without system versioning;

create or replace table t1 (a int) with system versioning;
create temporary table tmp with system versioning select * from t1;

drop table t1;