/**************************************************************************************/
/* File:        demo06                                                                */
/* Project:     ATSQL2 : TUC                                                          */
/* Author:      Andreas Steiner                                                       */
/* Date:        03-08-1995                                                            */
/* Results:                                                                           */
/**************************************************************************************/

SET CALENDRIC SYSTEM fiscal;


/* Queries : */
/* ========= */

CREATE TABLE p(X integer, i period);
CREATE TABLE q(X integer) AS VALID;

INSERT INTO p VALUES (1, PERIOD '1990-1992');
INSERT INTO p VALUES (1, PERIOD '1990-1992');
INSERT INTO p VALUES (2, PERIOD '1990-1992');
INSERT INTO p VALUES (3, PERIOD '1990-1992');

NONSEQUENCED VALID PERIOD '1993-1995' INSERT INTO q VALUES (1);
NONSEQUENCED VALID PERIOD '1997-2000' INSERT INTO q VALUES (3);


SELECT *
FROM   p
WHERE  NOT EXISTS (SELECT *
                    FROM   q
	            WHERE  p.X = q.X);

/*
               x                                            i
 --------------- --------------------------------------------
               1                                [1990 - 1992)
               1                                [1990 - 1992)
               2                                [1990 - 1992)
               3                                [1990 - 1992)
*/


DROP TABLE p;
DROP TABLE q;


 
/* INSERT : */
/* ======== */

SET CLOCK TO TIMESTAMP '1964/6/12~12:30';

CREATE TABLE test(i integer, int PERIOD);

INSERT INTO test VALUES (1, PERIOD '1990-2000');
INSERT INTO test SELECT * FROM test;

SELECT * FROM test;

/*
               i                                          int
 --------------- --------------------------------------------
               1                                [1990 - 2000)
               1                                [1990 - 2000)
*/

SET CLOCK TO TIMESTAMP '1964/6/13';

ALTER TABLE test ADD VALID;

INSERT INTO test VALUES (1, PERIOD '1990-2000');
INSERT INTO test SELECT * FROM test;

SELECT * FROM test;

/*
               i                                          int
 --------------- --------------------------------------------
               1                                [1990 - 2000)
               1                                [1990 - 2000)
               1                                [1990 - 2000)
               1                                [1990 - 2000)
               1                                [1990 - 2000)
               1                                [1990 - 2000)
*/


VALID SELECT * FROM test;

/*
                                        VALID               i                                          int
 -------------------------------------------- --------------- --------------------------------------------
                       [1964/06/13 - forever)               1                                [1990 - 2000)
                       [1964/06/13 - forever)               1                                [1990 - 2000)
                       [1964/06/13 - forever)               1                                [1990 - 2000)
                       [1964/06/13 - forever)               1                                [1990 - 2000)
                       [1964/06/13 - forever)               1                                [1990 - 2000)
                       [1964/06/13 - forever)               1                                [1990 - 2000)
*/

SET CLOCK TO TIMESTAMP '1964/6/14';

ALTER TABLE test ADD TRANSACTION;

INSERT INTO test VALUES (1, PERIOD '1990-2000');
INSERT INTO test SELECT * FROM test;

SELECT * FROM test;

/*
               i                                          int
 --------------- --------------------------------------------
               1                                [1990 - 2000)
               1                                [1990 - 2000)
               1                                [1990 - 2000)
               1                                [1990 - 2000)
               1                                [1990 - 2000)
               1                                [1990 - 2000)
               1                                [1990 - 2000)
               1                                [1990 - 2000)
               1                                [1990 - 2000)
               1                                [1990 - 2000)
               1                                [1990 - 2000)
               1                                [1990 - 2000)
               1                                [1990 - 2000)
               1                                [1990 - 2000)
*/


VALID AND TRANSACTION SELECT * FROM test;

/*
                                       SYSTEM                                        VALID               i                                          int
 -------------------------------------------- -------------------------------------------- --------------- --------------------------------------------
                       [1964/06/14 - forever)                       [1964/06/13 - forever)               1                                [1990 - 2000)
                       [1964/06/14 - forever)                       [1964/06/13 - forever)               1                                [1990 - 2000)
                       [1964/06/14 - forever)                       [1964/06/13 - forever)               1                                [1990 - 2000)
                       [1964/06/14 - forever)                       [1964/06/13 - forever)               1                                [1990 - 2000)
                       [1964/06/14 - forever)                       [1964/06/13 - forever)               1                                [1990 - 2000)
                       [1964/06/14 - forever)                       [1964/06/13 - forever)               1                                [1990 - 2000)
                       [1964/06/14 - forever)                       [1964/06/14 - forever)               1                                [1990 - 2000)
                       [1964/06/14 - forever)                       [1964/06/14 - forever)               1                                [1990 - 2000)
                       [1964/06/14 - forever)                       [1964/06/14 - forever)               1                                [1990 - 2000)
                       [1964/06/14 - forever)                       [1964/06/14 - forever)               1                                [1990 - 2000)
                       [1964/06/14 - forever)                       [1964/06/14 - forever)               1                                [1990 - 2000)
                       [1964/06/14 - forever)                       [1964/06/14 - forever)               1                                [1990 - 2000)
                       [1964/06/14 - forever)                       [1964/06/14 - forever)               1                                [1990 - 2000)
                       [1964/06/14 - forever)                       [1964/06/14 - forever)               1                                [1990 - 2000)
*/

SET CLOCK TO TIMESTAMP '1964/6/15';

COMMIT;

VALID AND TRANSACTION SELECT * FROM test;

/*
                                  TRANSACTION                                        VALID               i                                          int
 -------------------------------------------- -------------------------------------------- --------------- --------------------------------------------
                       [1964/06/15 - forever)                       [1964/06/13 - forever)               1                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/13 - forever)               1                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/13 - forever)               1                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/13 - forever)               1                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/13 - forever)               1                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/13 - forever)               1                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/14 - forever)               1                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/14 - forever)               1                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/14 - forever)               1                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/14 - forever)               1                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/14 - forever)               1                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/14 - forever)               1                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/14 - forever)               1                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/14 - forever)               1                                [1990 - 2000)
*/

ALTER TABLE test DROP i;

SELECT * FROM test;

/*
                                          int
 --------------------------------------------
                                [1990 - 2000)
                                [1990 - 2000)
                                [1990 - 2000)
                                [1990 - 2000)
                                [1990 - 2000)
                                [1990 - 2000)
                                [1990 - 2000)
                                [1990 - 2000)
                                [1990 - 2000)
                                [1990 - 2000)
                                [1990 - 2000)
                                [1990 - 2000)
                                [1990 - 2000)
                                [1990 - 2000)
*/


VALID SELECT * FROM test;

/*
                                        VALID                                          int
 -------------------------------------------- --------------------------------------------
                       [1964/06/13 - forever)                                [1990 - 2000)
                       [1964/06/13 - forever)                                [1990 - 2000)
                       [1964/06/13 - forever)                                [1990 - 2000)
                       [1964/06/13 - forever)                                [1990 - 2000)
                       [1964/06/13 - forever)                                [1990 - 2000)
                       [1964/06/13 - forever)                                [1990 - 2000)
                       [1964/06/14 - forever)                                [1990 - 2000)
                       [1964/06/14 - forever)                                [1990 - 2000)
                       [1964/06/14 - forever)                                [1990 - 2000)
                       [1964/06/14 - forever)                                [1990 - 2000)
                       [1964/06/14 - forever)                                [1990 - 2000)
                       [1964/06/14 - forever)                                [1990 - 2000)
                       [1964/06/14 - forever)                                [1990 - 2000)
                       [1964/06/14 - forever)                                [1990 - 2000)
*/


VALID AND TRANSACTION SELECT * FROM test;

/*
                                  TRANSACTION                                        VALID                                          int
 -------------------------------------------- -------------------------------------------- --------------------------------------------
                       [1964/06/15 - forever)                       [1964/06/13 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/13 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/13 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/13 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/13 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/13 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/14 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/14 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/14 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/14 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/14 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/14 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/14 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                       [1964/06/14 - forever)                                [1990 - 2000)
*/


ALTER TABLE test DROP VALID;

TRANSACTION SELECT * FROM test;

/*
                                  TRANSACTION                                          int
 -------------------------------------------- --------------------------------------------
                       [1964/06/15 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                                [1990 - 2000)
                       [1964/06/15 - forever)                                [1990 - 2000)
*/


ALTER TABLE test DROP TRANSACTION;

SELECT * FROM test;


DROP TABLE test;

REMOVE CLOCK;



/* DELETE : */
/* ======== */

CREATE TABLE p(X integer, i period);
CREATE TABLE q(X integer) AS VALID;

INSERT INTO p VALUES (1, PERIOD '1990-1992');
INSERT INTO p VALUES (1, PERIOD '1990-1992');
INSERT INTO p VALUES (2, PERIOD '1990-1992');
INSERT INTO p VALUES (3, PERIOD '1990-1992');

NONSEQUENCED VALID PERIOD '1993-1995' INSERT INTO q VALUES (1);
NONSEQUENCED VALID PERIOD '1995-2000' INSERT INTO q VALUES (3);


DELETE FROM p 
  WHERE NOT EXISTS (SELECT *
                    FROM   q
	            WHERE  p.X = q.X);

SELECT * FROM p;

/*
               x                                            i
 --------------- --------------------------------------------
               3                                [1990 - 1992)
*/


DROP TABLE p;
DROP TABLE q;


CREATE TABLE p(X integer) AS VALID;
CREATE TABLE q(X integer, i period);

NONSEQUENCED VALID PERIOD '1991-1995' INSERT INTO p VALUES (1);
NONSEQUENCED VALID PERIOD '1993-1997' INSERT INTO p VALUES (1);
NONSEQUENCED VALID PERIOD '1993-1997' INSERT INTO p VALUES (2);
NONSEQUENCED VALID PERIOD '1992-1998' INSERT INTO p VALUES (3);

INSERT INTO q VALUES (1, PERIOD '1991-1994');
INSERT INTO q VALUES (3, PERIOD '1991-1994');


DELETE FROM p 
  WHERE NOT EXISTS (SELECT *
                    FROM   q
	            WHERE  p.X = q.X);

SELECT * FROM p;

/*
               x
 ---------------
               1
               3
*/


DROP TABLE p;
DROP TABLE q;

