create table t (id int primary key, s date, e date, period for mytime(s,e));
# CONSTRAINT CHECK (s < e) is added implicitly, and shouldn't be shown
# this is important for correct command-based replication
show create table t;
Table Create Table
t CREATE TABLE `t` (
`id` int(11) NOT NULL,
`s` date NOT NULL,
`e` date NOT NULL,
PERIOD FOR `mytime` (`s`, `e`),
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
create or replace table t (id int primary key, s timestamp(6), e timestamp(6),
period for mytime(s,e));
show create table t;
Table Create Table
t CREATE TABLE `t` (
`id` int(11) NOT NULL,
`s` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000',
`e` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000',
PERIOD FOR `mytime` (`s`, `e`),
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
# SQL16, Part 2, 11.3
, Syntax Rules, 2)a)
# 2) If a TPD is specified, then:
# a) shall not be specified.
create or replace temporary table t (s date, e date, period for mytime(s,e));
ERROR HY000: Application-time period table cannot be temporary
# SQL16, Part 2, 11.3 , Syntax Rules, 2)e)iii)
# The contained in CD1 is either DATE or a
# timestamp type and it is equivalent to the
# contained in CD2.
create or replace table t (id int primary key, s datetime, e date,
period for mytime(s,e));
ERROR HY000: Fields of PERIOD FOR `mytime` have different types
create or replace table t (s timestamp(2), e timestamp(6),
period for mytime(s,e));
ERROR HY000: Fields of PERIOD FOR `mytime` have different types
create or replace table t (id int primary key, s int, e date,
period for mytime(s,e));
ERROR 42000: Incorrect column specifier for column 's'
create or replace table t (id int primary key, s time, e time,
period for mytime(s,e));
ERROR 42000: Incorrect column specifier for column 's'
create or replace table t (id int primary key, s date, e date,
period for mytime(s,x));
ERROR 42S22: Unknown column 'x' in 'mytime'
# MDEV-18842: Unfortunate error message when the same column is used
# for application period start and end
create or replace table t (s date, t date, period for apt(s,s));
ERROR 42000: Column 's' specified twice
create or replace table t (id int primary key, s date, e date,
period for mytime(s,e),
period for mytime2(s,e));
ERROR HY000: Cannot specify more than one application-time period
# SQL16, Part 2, 11.3 , Syntax Rules, 2)d)
# No in any shall be equivalent to PN.
create or replace table t (mytime int, s date, e date,
period for mytime(s,e));
ERROR 42S21: Duplicate column name 'mytime'
# SQL16, Part 2, 11.3 , Syntax Rules, 2)e)v)2)A)
# Neither CD1 nor CD2 shall contain an , a
# , a ,
# or a .
create or replace table t (id int primary key,
s date,
e date generated always as (s+1),
period for mytime(s,e));
ERROR HY000: Period field `e` cannot be GENERATED ALWAYS AS
create or replace table t (id int primary key,
s date,
e date as (s+1) VIRTUAL,
period for mytime(s,e));
ERROR HY000: Period field `e` cannot be GENERATED ALWAYS AS
create or replace table t (id int primary key, s timestamp(6), e timestamp(6),
st timestamp(6) as row start,
en timestamp(6) as row end,
period for system_time (st, en),
period for mytime(st,e)) with system versioning;
ERROR HY000: Period field `st` cannot be GENERATED ALWAYS AS
# SQL16, Part 2, 11.3 , Syntax Rules, 2)
# Let IDCN be an implementation-dependent that is not
# equivalent to the of any table constraint descriptor
# included in S.
create or replace table t (x int, s date, e date,
period for mytime(s, e),
constraint mytime check (x > 1));
show create table t;
Table Create Table
t CREATE TABLE `t` (
`x` int(11) DEFAULT NULL,
`s` date NOT NULL,
`e` date NOT NULL,
PERIOD FOR `mytime` (`s`, `e`),
CONSTRAINT `mytime` CHECK (`x` > 1)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
insert t values (2, '2001-01-01', '2001-01-01');
ERROR 23000: CONSTRAINT `mytime_1` failed for `test`.`t`
show status like "Feature_application_time_periods";
Variable_name Value
Feature_application_time_periods 6
drop table t;
# MDEV-29387: Period name with more than 32 symbols crashes the server
#
# test 34 symbols
create table t2 (s date, e date,
period for `abcd123456789012345678901234567890` (s,e));
drop table t2;
# test 64 symbols
create table t2 (s date, e date, period for
`abcd123456789012345678901234567890123456789012345678901234567890`
(s,e));
drop table t2;