/**************************************************************************************/
/* File:        demo25                                                                */
/* Project:     ATSQL2 : Primary Key                		                      */
/* Author:      Andreas Steiner                                                       */
/* Date:        22-11-1995                                                            */
/* Results:                                                                           */
/**************************************************************************************/

SET CALENDRIC SYSTEM fiscal;

/******************************* Snapshot tables **************************************/

create table employee(eno integer primary key, name char(32));
 
insert into employee values(1, 'Steiner');
insert into employee values(2, 'Losa');
insert into employee values(3, 'Rosenberger');

check;

/*
No integrity constraints violated
*/


insert into employee values(1, 'Ruckli');

check;

/*
Error(s) found checking primary key of table * employee *
*/

drop table employee;



create table test(int period primary key, str char(10));

insert into test values (period '1990-1995', 'test1');

check;

/*
No integrity constraints violated
*/


insert into test values (period '1990-1995', 'test2');

check;

/*
Error(s) found checking primary key of table * test *
*/


select * from keys;

/*
 tablename attribute
 --------- ---------
      test   ints_#$
      test   inte_#$
*/


alter table test drop int;

select * from keys;

/*
No tupels selected
*/

check;

/*
No integrity constraints violated
*/

drop table test;


/********************************* Valid tables ***************************************/

create table employee(eno integer primary key, name char(32)) as valid;
 
insert into employee values(1, 'Steiner');
insert into employee values(2, 'Losa');
insert into employee values(3, 'Rosenberger');

check;

/*
No integrity constraints violated
*/


insert into employee values(1, 'Ruckli');

check;

/*
Error(s) found checking primary key of table * employee *
*/


select * from keys;

/*
 tablename attribute
 --------- ---------
  employee       eno
*/


alter table employee drop eno;

select * from keys;

/*
No tupels selected
*/

check;

/*
No integrity constraints violated
*/

drop table employee;



set clock to timestamp '1995/11/23';

create table employee(eno integer primary key, name char(32)) as valid;
 
insert into employee values(1, 'Steiner');
insert into employee values(2, 'Losa');
insert into employee values(3, 'Rosenberger');

check;

valid select * from employee;

/*
                VALID eno        name
 -------------------- --- -----------
 [1995/11/23-forever)   1     Steiner
 [1995/11/23-forever)   2        Losa
 [1995/11/23-forever)   3 Rosenberger
*/


set clock to timestamp '1995/11/27';

insert into employee values(1, 'Ruckli');

valid select * from employee;

/*
                VALID eno        name
 -------------------- --- -----------
 [1995/11/23-forever)   1     Steiner
 [1995/11/23-forever)   2        Losa
 [1995/11/23-forever)   3 Rosenberger
 [1995/11/27-forever)   1      Ruckli
*/

check;

/*
Error(s) found checking primary key of table * employee *
*/

nonsequenced valid period '1995/11/27-forever'
delete from employee where name = 'Steiner';

valid select * from employee;

/*
                   VALID eno        name
 ----------------------- --- -----------
    [1995/11/23-forever)   2        Losa
    [1995/11/23-forever)   3 Rosenberger
    [1995/11/27-forever)   1      Ruckli
 [1995/11/23-1995/11/27)   1     Steiner
*/

check;

/*
No integrity constraints violated
*/

drop table employee;



create table test(int period primary key, str char(10)) as valid;

insert into test values (period '1990-1995', 'test1');

check;

/*
No integrity constraints violated
*/


insert into test values (period '1990-1995', 'test2');

check;

/*
Error(s) found checking primary key of table * test *
*/


select * from keys;

/*
 tablename attribute
 --------- ---------
      test   ints_#$
      test   inte_#$
*/

alter table test drop int;

select * from keys;

/*
No tupels selected
*/

check;

/*
No integrity constraints violated
*/

drop table test;


/******************************* Transaction tables ***********************************/

set clock to timestamp '1995/11/23';

create table employee(eno integer primary key, name char(32)) as transaction;
 
insert into employee values(1, 'Steiner');
insert into employee values(2, 'Losa');
insert into employee values(3, 'Rosenberger');

transaction select * from employee;

/*
          TRANSACTION eno        name
 -------------------- --- -----------
 [1995/11/23-forever)   1     Steiner
 [1995/11/23-forever)   2        Losa
 [1995/11/23-forever)   3 Rosenberger
*/

check;

/*
No integrity constraints violated
*/

set clock to timestamp '1995/11/24';

insert into employee values(1, 'Ruckli');

transaction select * from employee;

/*
          TRANSACTION eno        name
 -------------------- --- -----------
 [1995/11/23-forever)   1     Steiner
 [1995/11/23-forever)   2        Losa
 [1995/11/23-forever)   3 Rosenberger
 [1995/11/24-forever)   1      Ruckli
*/

check;

/*
Error(s) found checking primary key of table * employee *
*/

delete from employee where name = 'Steiner';

transaction select * from employee;

/*
             TRANSACTION eno        name
 ----------------------- --- -----------
    [1995/11/23-forever)   2        Losa
    [1995/11/23-forever)   3 Rosenberger
    [1995/11/24-forever)   1      Ruckli
 [1995/11/23-1995/11/24)   1     Steiner
*/

check;

/*
No integrity constraints violated
*/

drop table employee;



create table test(int period primary key, str char(10)) as transaction;

insert into test values (period '1990-1995', 'test1');

check;

/*
No integrity constraints violated
*/


insert into test values (period '1990-1995', 'test2');

check;

/*
Error(s) found checking primary key of table * test *
*/


select * from keys;

/*
 tablename attribute
 --------- ---------
      test   ints_#$
      test   inte_#$
*/


alter table test drop int;

select * from keys;

/*
No tupels selected
*/

check;

/*
No integrity constraints violated
*/

drop table test;



/******************************** Bitemporal tables ***********************************/

set clock to timestamp '1995/11/23';

create table employee(eno integer primary key, name char(32)) as valid and transaction;
 
insert into employee values(1, 'Steiner');
insert into employee values(2, 'Losa');
insert into employee values(3, 'Rosenberger');

valid and transaction select * from employee;

/*
          TRANSACTION                VALID eno        name
 -------------------- -------------------- --- -----------
 [1995/11/23-forever) [1995/11/23-forever)   1     Steiner
 [1995/11/23-forever) [1995/11/23-forever)   2        Losa
 [1995/11/23-forever) [1995/11/23-forever)   3 Rosenberger
*/


check;

/*
No integrity constraints violated
*/


set clock to timestamp '1995/11/24';

insert into employee values(1, 'Ruckli');

valid and transaction select * from employee;

/*
          TRANSACTION                VALID eno        name
 -------------------- -------------------- --- -----------
 [1995/11/23-forever) [1995/11/23-forever)   1     Steiner
 [1995/11/23-forever) [1995/11/23-forever)   2        Losa
 [1995/11/23-forever) [1995/11/23-forever)   3 Rosenberger
 [1995/11/24-forever) [1995/11/24-forever)   1      Ruckli
*/

check;

/*
Error(s) found checking primary key of table * employee *
*/

delete from employee where name = 'Steiner';

valid and transaction select * from employee;

/*
             TRANSACTION                   VALID eno        name
 ----------------------- ----------------------- --- -----------
    [1995/11/23-forever)    [1995/11/23-forever)   2        Losa
    [1995/11/23-forever)    [1995/11/23-forever)   3 Rosenberger
    [1995/11/24-forever)    [1995/11/24-forever)   1      Ruckli
 [1995/11/23-1995/11/24)    [1995/11/23-forever)   1     Steiner
    [1995/11/24-forever) [1995/11/23-1995/11/24)   1     Steiner
*/

check;


select * from keys;

/*
 tablename attribute
 --------- ---------
  employee       eno
*/


alter table employee drop eno;

select * from keys;

/*
No tupels selected
*/

check;

/*
No integrity constraints violated
*/

drop table employee;



create table test(int period primary key, str char(10)) as valid and transaction;

insert into test values (period '1990-1995', 'test1');

check;

/*
No integrity constraints violated
*/

insert into test values (period '1990-1995', 'test2');

check;

/*
Error(s) found checking primary key of table * test *
*/


select * from keys;

/*
 tablename attribute
 --------- ---------
      test   ints_#$
      test   inte_#$
*/

alter table test drop int;

select * from keys;

/*
No tupels selected
*/

check;

/*
No integrity constraints violated
*/

drop table test;
