/**************************************************************************************/
/* File:        demo08                                                                */
/* Project:     ATSQL2 :  Examples for bitemporal queries                             */
/* Author:      Andreas Steiner                                                       */
/* Date:        08/17/1995 :                                                          */
/* Results:     24/08/1995                                                            */
/**************************************************************************************/

SET CALENDRIC SYSTEM fiscal;


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

CREATE TABLE department(dept integer, phone integer) AS VALID AND TRANSACTION;


SET CLOCK TO TIMESTAMP '1990/6/01';
NONSEQUENCED VALID PERIOD '1981-1984' INSERT INTO department VALUES (1, 54321);

SET CLOCK TO TIMESTAMP '1990/6/02';
NONSEQUENCED VALID PERIOD '1984-1989' INSERT INTO department VALUES (1, 12345);

SET CLOCK TO TIMESTAMP '1990/6/03';
NONSEQUENCED VALID PERIOD '1989-1994' INSERT INTO department VALUES (1, 54321);

SET CLOCK TO TIMESTAMP '1990/6/05';
NONSEQUENCED VALID 
DELETE FROM department 
WHERE valid(department) = PERIOD '1981-1984' AND dept = 1 AND phone = 54321
      AND transaction(department) OVERLAPS TIMESTAMP 'NOW';

SET CLOCK TO TIMESTAMP '1990/6/07';
NONSEQUENCED VALID PERIOD '1986-1990' INSERT INTO department VALUES (1, 12345);

SET CLOCK TO TIMESTAMP '1990/6/08';
NONSEQUENCED VALID PERIOD '1981-1984' INSERT INTO department VALUES (1, 54321);

SET CLOCK TO TIMESTAMP '1990/6/09';
NONSEQUENCED VALID PERIOD '1987-1994' INSERT INTO department VALUES (1, 54321);

SET CLOCK TO TIMESTAMP '1990/6/11';
NONSEQUENCED VALID 
DELETE FROM department 
WHERE valid(department) = PERIOD '1984-1989' AND dept = 1 AND phone = 12345
      AND transaction(department) OVERLAPS TIMESTAMP 'NOW';

SET CLOCK TO TIMESTAMP '1990/6/14';
NONSEQUENCED VALID 
DELETE FROM department 
WHERE valid(department) = PERIOD '1989-1994' AND dept = 1 AND phone = 54321
      AND transaction(department) OVERLAPS TIMESTAMP 'NOW';

SET CLOCK TO TIMESTAMP '1990/6/16';
NONSEQUENCED VALID 
DELETE FROM department 
WHERE valid(department) = PERIOD '1981-1984' AND dept = 1 AND phone = 54321
      AND transaction(department) OVERLAPS TIMESTAMP 'NOW';
NONSEQUENCED VALID PERIOD '1981-1984' INSERT INTO department VALUES (1, 54321);

SET CLOCK TO TIMESTAMP '1990/6/18';
NONSEQUENCED VALID 
DELETE FROM department 
WHERE  valid(department) = PERIOD '1986-1990' AND dept = 1 AND phone = 12345
      AND transaction(department) OVERLAPS TIMESTAMP 'NOW';

SET CLOCK TO TIMESTAMP '1990/6/21';
NONSEQUENCED VALID 
DELETE FROM department 
WHERE valid(department) = PERIOD '1981-1984' AND dept = 1 AND phone = 54321
      AND transaction(department) OVERLAPS TIMESTAMP 'NOW';

SET CLOCK TO TIMESTAMP '1990/6/23';
NONSEQUENCED VALID PERIOD '1989-1995' INSERT INTO department VALUES (1, 54321);

SET CLOCK TO TIMESTAMP '1990/6/24';
NONSEQUENCED VALID 
DELETE FROM department 
WHERE valid(department) = PERIOD '1987-1994' AND dept = 1 AND phone = 54321;

SET CLOCK TO TIMESTAMP '1990/6/26';
NONSEQUENCED VALID 
DELETE FROM department 
WHERE valid(department) = PERIOD '1989-1995' AND dept = 1 AND phone = 54321;


NONSEQUENCED VALID AND NONSEQUENCED TRANSACTION SELECT TRANSACTION(d), VALID(d), * FROM department d;

/*
                               transaction(d)                                     valid(d)            dept           phone
 -------------------------------------------- -------------------------------------------- --------------- ---------------
                       [1990/06 - 1990/06/05)                                [1981 - 1984)               1           54321
                    [1990/06/02 - 1990/06/11)                                [1984 - 1989)               1           12345
                    [1990/06/03 - 1990/06/14)                                [1989 - 1994)               1           54321
                    [1990/06/08 - 1990/06/16)                                [1981 - 1984)               1           54321
                    [1990/06/07 - 1990/06/18)                                [1986 - 1990)               1           12345
                    [1990/06/16 - 1990/06/21)                                [1981 - 1984)               1           54321
                    [1990/06/09 - 1990/06/24)                                [1987 - 1994)               1           54321
                    [1990/06/23 - 1990/06/26)                                [1989 - 1995)               1           54321
*/


/* 1. Snapshot */
/* =========== */

NONSEQUENCED VALID AND NONSEQUENCED TRANSACTION
	SELECT dept, phone
	FROM   department
	WHERE  dept = 1;

/*
            dept           phone
 --------------- ---------------
               1           54321
               1           12345
               1           54321
               1           12345
               1           54321
               1           54321
               1           54321
               1           54321
*/


/* 2.1. Temporal query with reduction in valid-time-direction;   */
/*      system-time is projected away or treated as user-defined */
/*      time                                                     */
/* ============================================================= */


/* A. system time is projected away */

VALID AND NONSEQUENCED TRANSACTION
	(SELECT dept, phone
 	 FROM   department
	 WHERE  dept = 1) (PERIOD);

/*
                                        VALID            dept           phone
 -------------------------------------------- --------------- ---------------
                                [1981 - 1984)               1           54321
                                [1984 - 1990)               1           12345
                                [1987 - 1995)               1           54321
*/


/* B. system time is treated as user-defined time */

VALID AND NONSEQUENCED TRANSACTION 
	(SELECT TRANSACTION(department) time, dept, phone
	 FROM   department
	 WHERE  dept = 1) (PERIOD);

/*
                                        VALID                                         time            dept           phone
 -------------------------------------------- -------------------------------------------- --------------- ---------------
                                [1981 - 1984)                       [1990/06 - 1990/06/05)               1           54321
                                [1984 - 1989)                    [1990/06/02 - 1990/06/11)               1           12345
                                [1989 - 1994)                    [1990/06/03 - 1990/06/14)               1           54321
                                [1981 - 1984)                    [1990/06/08 - 1990/06/16)               1           54321
                                [1986 - 1990)                    [1990/06/07 - 1990/06/18)               1           12345
                                [1981 - 1984)                    [1990/06/16 - 1990/06/21)               1           54321
                                [1987 - 1994)                    [1990/06/09 - 1990/06/24)               1           54321
                                [1989 - 1995)                    [1990/06/23 - 1990/06/26)               1           54321
*/



/* 2.2. Temporal query with reduction in valid-time-direction;      */
/*      system-time is treated as user-defined time with constraint */
/* ================================================================ */

VALID AND NONSEQUENCED TRANSACTION 	
	(SELECT dept, phone
	 FROM   (VALID AND NONSEQUENCED TRANSACTION
 		 (SELECT TRANSACTION(department) time, dept, phone 
	          FROM   department
	          WHERE  dept = 1) (PERIOD)) AS a1 
	 WHERE  time OVERLAPS TIMESTAMP '1990/06/12~12:30:13') (PERIOD);

/*
                                        VALID            dept           phone
 -------------------------------------------- --------------- ---------------
                                [1986 - 1990)               1           12345
                                [1981 - 1984)               1           54321
                                [1987 - 1994)               1           54321

*/


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

/* 3.1. Temporal query with reduction in system-time-direction; */
/*      valid-time is projected away or treated as              */
/*      user-defined-time                                       */
/* ============================================================ */


/* A. valid time is projected away */

NONSEQUENCED VALID AND TRANSACTION
	(SELECT dept, phone
	 FROM   department
	 WHERE  dept = 1) (PERIOD);

/*
                                       SYSTEM            dept           phone
 -------------------------------------------- --------------- ---------------
                    [1990/06/02 - 1990/06/18)               1           12345
                       [1990/06 - 1990/06/26)               1           54321
*/


/* B. valid time is treated as user-defined time */

NONSEQUENCED VALID AND TRANSACTION
	(SELECT VALID(department) time, dept, phone
	 FROM   department
	 WHERE  dept = 1) (PERIOD);

/*
                                       SYSTEM                                         time            dept           phone
 -------------------------------------------- -------------------------------------------- --------------- ---------------
                       [1990/06 - 1990/06/05)                                [1981 - 1984)               1           54321
                    [1990/06/02 - 1990/06/11)                                [1984 - 1989)               1           12345
                    [1990/06/03 - 1990/06/14)                                [1989 - 1994)               1           54321
                    [1990/06/07 - 1990/06/18)                                [1986 - 1990)               1           12345
                    [1990/06/09 - 1990/06/24)                                [1987 - 1994)               1           54321
                    [1990/06/23 - 1990/06/26)                                [1989 - 1995)               1           54321
                    [1990/06/08 - 1990/06/21)                                [1981 - 1984)               1           54321
*/



/* 3.2. Temporal query with reduction in system-time-direction;    */
/*      valid-time is treated as user-defined-time with constraint */
/* ================================================================ */

NONSEQUENCED VALID AND TRANSACTION
	SELECT *
	  FROM   (NONSEQUENCED VALID AND TRANSACTION
	            SELECT VALID(department) time, dept, phone
	            FROM   department
	            WHERE  dept = 1) AS a1
	  WHERE  time OVERLAPS TIMESTAMP '1988';

/*
                                       SYSTEM                                         time            dept           phone
 -------------------------------------------- -------------------------------------------- --------------- ---------------
                    [1990/06/02 - 1990/06/11)                                [1984 - 1989)               1           12345
                    [1990/06/07 - 1990/06/18)                                [1986 - 1990)               1           12345
                    [1990/06/09 - 1990/06/24)                                [1987 - 1994)               1           54321
*/


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

/* 4.1. Temporal query with reduction in valid-time-direction    */
/*      considering all system-time-timepoints and coalescing on */
/*      value equivalent rows and equal valid-time intervals     */
/* ============================================================= */

VALID AND TRANSACTION
	(SELECT dept, phone
	 FROM   department
	 WHERE  dept = 1) (PERIOD);

/*
                                       SYSTEM                                        VALID            dept           phone
 -------------------------------------------- -------------------------------------------- --------------- ---------------
                    [1990/06/02 - 1990/06/07)                                [1984 - 1989)               1           12345
                    [1990/06/11 - 1990/06/18)                                [1986 - 1990)               1           12345
                    [1990/06/24 - 1990/06/26)                                [1989 - 1995)               1           54321
                    [1990/06/07 - 1990/06/11)                                [1984 - 1990)               1           12345
                    [1990/06/23 - 1990/06/24)                                [1987 - 1995)               1           54321
                       [1990/06 - 1990/06/05)                                [1981 - 1984)               1           54321
                    [1990/06/03 - 1990/06/09)                                [1989 - 1994)               1           54321
                    [1990/06/08 - 1990/06/21)                                [1981 - 1984)               1           54321
                    [1990/06/09 - 1990/06/23)                                [1987 - 1994)               1           54321
*/



/* 4.2. Temporal query with reduction in valid-time-direction       */
/*      considering all system-time-timepoints and coalescing on    */
/*      value equivalent rows and equal valid-time intervals; with  */
/*      temporal constraints                                        */
/* ===============================================================  */

VALID AND TRANSACTION
	SELECT *
	FROM   (VALID AND TRANSACTION
	           (SELECT dept, phone
	           FROM   department
	           WHERE  dept = 1) (PERIOD)) AS a1
	WHERE  VALID(a1) OVERLAPS PERIOD '1985-1988' AND 
	       TRANSACTION(a1) OVERLAPS TIMESTAMP '1990/06/10';

/*
                                       SYSTEM                                        VALID            dept           phone
 -------------------------------------------- -------------------------------------------- --------------- ---------------
                    [1990/06/07 - 1990/06/11)                                [1984 - 1990)               1           12345
                    [1990/06/09 - 1990/06/23)                                [1987 - 1994)               1           54321
*/

NONSEQUENCED VALID AND NONSEQUENCED TRANSACTION
	SELECT TRANSACTION(a1), VALID(a1), *
	FROM   (VALID AND TRANSACTION
	           (SELECT dept, phone
	            FROM   department
	            WHERE  dept = 1) (PERIOD)) AS a1
	WHERE  VALID(a1) OVERLAPS PERIOD '1985-1988' AND 
	       TRANSACTION(a1) OVERLAPS TIMESTAMP '1990/06/10';

/*
                              transaction(a1)                                    valid(a1)            dept           phone
 -------------------------------------------- -------------------------------------------- --------------- ---------------
                    [1990/06/07 - 1990/06/11)                                [1984 - 1990)               1           12345
                    [1990/06/09 - 1990/06/23)                                [1987 - 1994)               1           54321
*/


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

/* 5.1. Temporal query with reduction in system-time-direction  */
/*      considering all valid-time-timepoints and coalescing on */
/*      value equivalent rows and equal system-time intervals   */
/* ============================================================ */

TRANSACTION AND VALID
	(SELECT dept, phone
	 FROM   department
	 WHERE  dept = 1) (PERIOD);

/*
                                        VALID                                       SYSTEM            dept           phone
 -------------------------------------------- -------------------------------------------- --------------- ---------------
                                [1984 - 1986)                    [1990/06/02 - 1990/06/11)               1           12345
                                [1981 - 1984)                       [1990/06 - 1990/06/05)               1           54321
                                [1987 - 1989)                    [1990/06/09 - 1990/06/24)               1           54321
                                [1989 - 1990)                    [1990/06/07 - 1990/06/18)               1           12345
                                [1994 - 1995)                    [1990/06/23 - 1990/06/26)               1           54321
                                [1986 - 1989)                    [1990/06/02 - 1990/06/18)               1           12345
                                [1981 - 1984)                    [1990/06/08 - 1990/06/21)               1           54321
                                [1989 - 1994)                    [1990/06/03 - 1990/06/26)               1           54321
*/


/* 5.2. Temporal query with reduction in system-time-direction   */
/*      considering all valid-time-timepoints and coalescing on  */
/*      value equivalent rows and equal system-time intervals;   */
/*      with temporal constraints                                */
/* ============================================================  */

TRANSACTION AND VALID
	(SELECT *
	 FROM   (TRANSACTION AND VALID
	           (SELECT dept, phone
	            FROM   department
	            WHERE  dept = 1) (PERIOD)) AS a1
	 WHERE  VALID(a1) OVERLAPS PERIOD '1985-1987' AND
	        TRANSACTION(a1) OVERLAPS TIMESTAMP '1990/06/05') (PERIOD);

/*
                                        VALID                                       SYSTEM            dept           phone
 -------------------------------------------- -------------------------------------------- --------------- ---------------
                                [1984 - 1986)                    [1990/06/02 - 1990/06/11)               1           12345
                                [1986 - 1989)                    [1990/06/02 - 1990/06/18)               1           12345
*/


NONSEQUENCED VALID
	SELECT VALID(a1), TRANSACTION(a1), *
	FROM   (TRANSACTION AND VALID
		   (SELECT dept, phone
	            FROM   department
	            WHERE  dept = 1) (PERIOD)) AS a1
	WHERE  VALID(a1) OVERLAPS PERIOD '1985-1987' AND
	       TRANSACTION(a1) OVERLAPS TIMESTAMP '1990/06/05';

/*
                                    valid(a1)                              transaction(a1)            dept           phone
 -------------------------------------------- -------------------------------------------- --------------- ---------------
                                [1984 - 1986)                    [1990/06/02 - 1990/06/11)               1           12345
                                [1986 - 1989)                    [1990/06/02 - 1990/06/18)               1           12345
*/



DROP TABLE DEPARTMENT;

REMOVE CLOCK;
