/**************************************************************************************/
/* File:        demo09                                                                */
/* Project:     ATSQL2 :  Temporal query types                                        */
/* Author:      Andreas Steiner                                                       */
/* Date:        08/18/1995                                                            */
/* Results:     24/08/1995                                                            */
/**************************************************************************************/

SET CALENDRIC SYSTEM fiscal;


/* Data : */
/* ------ */

CREATE TABLE snapshot(i INTEGER, int PERIOD);
INSERT INTO snapshot VALUES (1, PERIOD '1995/01/01-forever');
INSERT INTO snapshot VALUES (1, PERIOD '1996/01/01-forever');
INSERT INTO snapshot VALUES (2, PERIOD '1995/01/01-forever');
DELETE FROM snapshot WHERE i = 2;

SELECT * FROM snapshot;

/*
               i                                          int
 --------------- --------------------------------------------
               1                             [1995 - forever)
               1                             [1996 - forever)
*/


CREATE TABLE vt(i INTEGER, int PERIOD) AS VALID;
NONSEQUENCED VALID PERIOD '1995/01/01-forever' 
	INSERT INTO vt VALUES (1, PERIOD '1995/01/01-forever');
NONSEQUENCED VALID PERIOD '1996/01/01-forever' 
	INSERT INTO vt VALUES (1, PERIOD '1996/01/01-forever');
NONSEQUENCED VALID PERIOD '1995/01/01-forever' 
	INSERT INTO vt VALUES (2, PERIOD '1995/01/01-forever');
NONSEQUENCED VALID PERIOD 'beginning-1995/02'
	DELETE FROM vt WHERE i = 2;


VALID SELECT * FROM vt;

/*
                                        VALID               i                                          int
 -------------------------------------------- --------------- --------------------------------------------
                             [1995 - forever)               1                             [1995 - forever)
                             [1996 - forever)               1                             [1996 - forever)
                          [1995/02 - forever)               2                             [1995 - forever)
*/


SET CLOCK TO TIMESTAMP '1995/01/02';

CREATE TABLE tt(i INTEGER, int PERIOD) AS TRANSACTION;
INSERT INTO tt VALUES (1, PERIOD '1995/01/01-forever');
INSERT INTO tt VALUES (1, PERIOD '1996/01/01-forever');
INSERT INTO tt VALUES (2, PERIOD '1995/01/01-forever');

SET CLOCK TO TIMESTAMP '1995/01/03';
DELETE FROM tt WHERE i = 2;

TRANSACTION SELECT * FROM tt;

/*
                                       SYSTEM               i                                          int
 -------------------------------------------- --------------- --------------------------------------------
                       [1995/01/02 - forever)               1                             [1995 - forever)
                       [1995/01/02 - forever)               1                             [1996 - forever)
                    [1995/01/02 - 1995/01/03)               2                             [1995 - forever)
*/

SET CLOCK TO TIMESTAMP '1995/01/02';

CREATE TABLE bitemp(i INTEGER, int PERIOD) AS VALID AND TRANSACTION;
NONSEQUENCED VALID PERIOD '1995/01/01-forever' 
	INSERT INTO bitemp VALUES (1, PERIOD '1995/01/01-forever');
NONSEQUENCED VALID PERIOD '1996/01/01-forever' 
	INSERT INTO bitemp VALUES (1, PERIOD '1996/01/01-forever');
NONSEQUENCED VALID PERIOD '1995/01/01-forever' 
	INSERT INTO bitemp VALUES (2, PERIOD '1995/01/01-forever');

SET CLOCK TO TIMESTAMP '1995/01/03';
NONSEQUENCED VALID PERIOD 'beginning-1995/02'
	DELETE FROM bitemp WHERE i = 2;


VALID AND TRANSACTION SELECT * FROM bitemp;

/*
                                       SYSTEM                                        VALID               i                                          int
 -------------------------------------------- -------------------------------------------- --------------- --------------------------------------------
                       [1995/01/02 - forever)                             [1995 - forever)               1                             [1995 - forever)
                       [1995/01/02 - forever)                             [1996 - forever)               1                             [1996 - forever)
                    [1995/01/02 - 1995/01/03)                             [1995 - forever)               2                             [1995 - forever)
                       [1995/01/03 - forever)                          [1995/02 - forever)               2                             [1995 - forever)
*/


/* Queries : */
/* --------- */


NONSEQUENCED VALID SELECT * FROM vt;

/*
               i                                          int
 --------------- --------------------------------------------
               1                             [1995 - forever)
               1                             [1996 - forever)
               2                             [1995 - forever)

*/


NONSEQUENCED TRANSACTION SELECT * FROM tt;

/*
               i                                          int
 --------------- --------------------------------------------
               1                             [1995 - forever)
               1                             [1996 - forever)
               2                             [1995 - forever)
*/


NONSEQUENCED VALID SELECT * FROM bitemp;

/*
               i                                          int
 --------------- --------------------------------------------
               1                             [1995 - forever)
               1                             [1996 - forever)
               2                             [1995 - forever)
*/


NONSEQUENCED TRANSACTION SELECT * FROM bitemp;

/*
               i                                          int
 --------------- --------------------------------------------
               1                             [1995 - forever)
               2                             [1995 - forever)
*/



NONSEQUENCED VALID AND NONSEQUENCED TRANSACTION SELECT * FROM bitemp;

/*
               i                                          int
 --------------- --------------------------------------------
               1                             [1995 - forever)
               1                             [1996 - forever)
               2                             [1995 - forever)
               2                             [1995 - forever)
*/


NONSEQUENCED VALID AND TRANSACTION SELECT * FROM bitemp;

/*
                                       SYSTEM               i                                          int
 -------------------------------------------- --------------- --------------------------------------------
                       [1995/01/02 - forever)               1                             [1995 - forever)
                       [1995/01/02 - forever)               1                             [1996 - forever)
                    [1995/01/02 - 1995/01/03)               2                             [1995 - forever)
                       [1995/01/03 - forever)               2                             [1995 - forever)
*/


NONSEQUENCED VALID PERIOD '1990-1995' AND TRANSACTION SELECT * FROM bitemp;

/*
                                       SYSTEM                                        VALID               i                                          int
 -------------------------------------------- -------------------------------------------- --------------- --------------------------------------------
                       [1995/01/02 - forever)                                [1990 - 1995)               1                             [1995 - forever)
                       [1995/01/02 - forever)                                [1990 - 1995)               1                             [1996 - forever)
                    [1995/01/02 - 1995/01/03)                                [1990 - 1995)               2                             [1995 - forever)
                       [1995/01/03 - forever)                                [1990 - 1995)               2                             [1995 - forever)
*/


VALID AND NONSEQUENCED TRANSACTION SELECT * FROM bitemp;

/*
                                        VALID               i                                          int
 -------------------------------------------- --------------- --------------------------------------------
                             [1995 - forever)               1                             [1995 - forever)
                             [1996 - forever)               1                             [1996 - forever)
                             [1995 - forever)               2                             [1995 - forever)
                          [1995/02 - forever)               2                             [1995 - forever)
*/


SELECT snapshot.i, snapshot.int 
FROM   snapshot, vt, tt, bitemp 
WHERE  snapshot.i = vt.i AND snapshot.i = tt.i AND snapshot.i = bitemp.i;

/*
      snapshot.i                                 snapshot.int
 --------------- --------------------------------------------
               1                             [1995 - forever)
               1                             [1995 - forever)
               1                             [1996 - forever)
               1                             [1996 - forever)
*/


VALID 
	SELECT snapshot.i, snapshot.int 
	FROM   snapshot, vt, tt, bitemp 
	WHERE  snapshot.i = vt.i AND snapshot.i = tt.i AND snapshot.i = bitemp.i;

/*
Error: tables of type * system * and type * bitemporal * in FROM clause temporally incompatible
*/


TRANSACTION
	SELECT snapshot.i, snapshot.int 
	FROM   snapshot, vt, tt, bitemp 
	WHERE  snapshot.i = vt.i AND snapshot.i = tt.i AND snapshot.i = bitemp.i;

/*
Error: tables of type * system * and type * bitemporal * in FROM clause temporally incompatible
*/


VALID AND TRANSACTION
	SELECT snapshot.i, snapshot.int 
	FROM snapshot, vt, tt, bitemp 
	WHERE snapshot.i = vt.i AND snapshot.i = tt.i AND snapshot.i = bitemp.i;

/*
Error: tables of type * system * and type * bitemporal * in FROM clause temporally incompatible
*/


TRANSACTION AND VALID
	SELECT snapshot.i, snapshot.int 
	FROM snapshot, vt, tt, bitemp 
	WHERE snapshot.i = vt.i AND snapshot.i = tt.i AND snapshot.i = bitemp.i;

/*
Error: tables of type * system * and type * bitemporal * in FROM clause temporally incompatible
*/


DROP TABLE snapshot;
DROP TABLE vt;
DROP TABLE tt;
DROP TABLE bitemp;

REMOVE CLOCK;

/*************************************************************************************/


SET CLOCK TO TIMESTAMP '1995/01';

CREATE TABLE p(i INTEGER) AS VALID AND TRANSACTION;

NONSEQUENCED VALID PERIOD '1995/01/01-1995/06' INSERT INTO p VALUES (1);
NONSEQUENCED VALID PERIOD '1996/01/01-1996/06' INSERT INTO p VALUES (2);

VALID AND TRANSACTION SELECT * FROM p;

/*
                                       SYSTEM                                        VALID               i
 -------------------------------------------- -------------------------------------------- ---------------
                             [1995 - forever)                             [1995 - 1995/06)               1
                             [1995 - forever)                             [1996 - 1996/06)               2
*/

CREATE TABLE q(i INTEGER) AS VALID AND TRANSACTION;

NONSEQUENCED VALID PERIOD '1995/03-1995/09' INSERT INTO q VALUES (1);
NONSEQUENCED VALID PERIOD '1996/03-1996/09' INSERT INTO q VALUES (2);

VALID AND TRANSACTION SELECT * FROM q;

/*
                                       SYSTEM                                        VALID               i
 -------------------------------------------- -------------------------------------------- ---------------
                             [1995 - forever)                          [1995/03 - 1995/09)               1
                             [1995 - forever)                          [1996/03 - 1996/09)               2
*/



VALID AND TRANSACTION
	SELECT *
	FROM   p, q
	WHERE  p.i = q.i;

/*
                                       SYSTEM                                        VALID               i               i
 -------------------------------------------- -------------------------------------------- --------------- ---------------
                             [1995 - forever)                          [1995/03 - 1995/06)               1               1
                             [1995 - forever)                          [1996/03 - 1996/06)               2               2
*/


NONSEQUENCED VALID AND NONSEQUENCED TRANSACTION
 	SELECT TRANSACTION(p), TRANSACTION(q), VALID(p), VALID(q), *
	FROM   p, q
	WHERE  p.i = q.i;


DROP TABLE p;
DROP TABLE q;

REMOVE CLOCK;
