/**************************************************************************************/
/* File:        demo10                                                                */
/* Project:     ATSQL2 : Example of different bitemp. restructuring                   */
/* Author:      Andreas Steiner                                                       */
/* Date:        19-06-1995                                                            */
/* Results:                                                                           */
/**************************************************************************************/

SET CALENDRIC SYSTEM fiscal;


CREATE TABLE contracts (name CHAR(20), eno INTEGER) AS VALID AND TRANSACTION;

SET CLOCK TO TIMESTAMP '1993/06/03';

NONSEQUENCED VALID PERIOD '1993/06-1994/06'
	INSERT INTO contracts VALUES ('Andreas Steiner', 1206);

VALID AND TRANSACTION SELECT * FROM contracts;

/*
          TRANSACTION             VALID            name  eno
 -------------------- ----------------- --------------- ----
 [1993/06/03-forever) [1993/06-1994/06) Andreas Steiner 1206
*/



/* Update of the contract : */
SET CLOCK TO TIMESTAMP '1994/05/25';

NONSEQUENCED VALID PERIOD '1993/06-1996/06'
INSERT INTO contracts VALUES ('Andreas Steiner', 1206);

NONSEQUENCED VALID
DELETE FROM contracts 
WHERE eno=1206 
AND   VALID(contracts) = PERIOD '1993/06-1994/06';

VALID AND TRANSACTION SELECT * FROM contracts;

/*
             TRANSACTION             VALID            name  eno
 ----------------------- ----------------- --------------- ----
    [1994/05/25-forever) [1993/06-1996/06) Andreas Steiner 1206
 [1993/06/03-1994/05/25) [1993/06-1994/06) Andreas Steiner 1206
*/



/* Update of the contract : */
SET CLOCK TO TIMESTAMP '1996/05/28';

NONSEQUENCED VALID PERIOD '1993/06-1998/06'
INSERT INTO contracts VALUES ('Andreas Steiner', 1206);

NONSEQUENCED VALID
DELETE FROM contracts 
WHERE eno=1206 
AND   VALID(contracts) = PERIOD '1993/06-1996/06';


VALID AND TRANSACTION SELECT * FROM contracts;

/*
             TRANSACTION             VALID            name  eno
 ----------------------- ----------------- --------------- ----
 [1993/06/03-1994/05/25) [1993/06-1994/06) Andreas Steiner 1206
    [1996/05/28-forever) [1993/06-1998/06) Andreas Steiner 1206
 [1994/05/25-1996/05/28) [1993/06-1996/06) Andreas Steiner 1206
*/


/* Update of the contract : */
SET CLOCK TO TIMESTAMP '1997/08/01';

NONSEQUENCED VALID
DELETE FROM contracts 
WHERE  eno=1206 
AND    VALID(contracts) = PERIOD '1993/06-1998/06';


VALID AND TRANSACTION (SELECT * FROM contracts) (PERIOD);

/*
             TRANSACTION             VALID            name  eno
 ----------------------- ----------------- --------------- ----
 [1993/06/03-1994/05/25) [1993/06-1994/06) Andreas Steiner 1206
 [1994/05/25-1996/05/28) [1993/06-1996/06) Andreas Steiner 1206
    [1996/05/28-1997/08) [1993/06-1998/06) Andreas Steiner 1206
*/


/* Which contract was stored over three years in the db and
   what is the maximal valid time common to all the different 
   versions of the contract stored during that time */

TRANSACTION AND VALID
SELECT * 
FROM   (TRANSACTION AND VALID
          (SELECT * FROM contracts) (PERIOD)) a1
WHERE  INTERVAL(TRANSACTION(a1)) > INTERVAL '3' year;

/*
             VALID          TRANSACTION            name  eno
 ----------------- -------------------- --------------- ----
 [1994/06-1996/06) [1994/05/25-1997/08) Andreas Steiner 1206
 [1993/06-1994/06) [1993/06/03-1997/08) Andreas Steiner 1206
*/


DROP TABLE contracts;

REMOVE CLOCK;
