/**************************************************************************************/
/* File:        demo11                                                                */
/* Project:     ATSQL2 : Special case of a delete                                     */
/* Author:      Andreas Steiner                                                       */
/* Date:        30-08-1995                                                            */
/* Results:                                                                           */
/**************************************************************************************/

SET CALENDRIC SYSTEM fiscal;

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

CREATE TABLE test (i integer) AS VALID;

NONSEQUENCED VALID PERIOD '1990-1999'
INSERT INTO test VALUES(9999);

NONSEQUENCED VALID PERIOD '1990-1997'
INSERT INTO test VALUES(9999);

VALID SELECT * FROM test;

/*
                                        VALID               i
 -------------------------------------------- ---------------
                                [1990 - 1999)            9999
                                [1990 - 1997)            9999
*/

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

VALID
DELETE FROM test WHERE valid(test) = PERIOD '1990-1997';

VALID SELECT * FROM test;

/*
                                        VALID               i
 -------------------------------------------- ---------------
                                [1990 - 1999)            9999
*/

DROP TABLE test;



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

CREATE TABLE test (i integer) AS TRANSACTION AND VALID;

NONSEQUENCED VALID PERIOD '1990-1999'
INSERT INTO test VALUES(9999);

NONSEQUENCED VALID PERIOD '1990-1997'
INSERT INTO test VALUES(9999);

VALID AND TRANSACTION SELECT * FROM test;

/*
                                  TRANSACTION                                        VALID               i
 -------------------------------------------- -------------------------------------------- ---------------
                             [1995 - forever)                                [1990 - 1999)            9999
                             [1995 - forever)                                [1990 - 1997)            9999
*/

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

VALID
DELETE FROM test WHERE valid(test) = PERIOD '1990-1997';

VALID AND TRANSACTION SELECT * FROM test;

/*
                                  TRANSACTION                                        VALID               i
 -------------------------------------------- -------------------------------------------- ---------------
                             [1995 - forever)                                [1990 - 1999)            9999
                             [1995 - 1995/06)                                [1990 - 1997)            9999
*/

DROP TABLE test;


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

CREATE TABLE p(i integer) AS VALID;

NONSEQUENCED VALID PERIOD '1990-1999'
INSERT INTO p VALUES(9999);

CREATE TABLE q(i integer) AS VALID;

NONSEQUENCED VALID PERIOD '1993-1997'
INSERT INTO q VALUES(9999);

VALID SELECT * FROM p;

/*
                                        VALID               i
 -------------------------------------------- ---------------
                                [1990 - 1999)            9999
*/

VALID SELECT * FROM q;

/*
                                        VALID               i
 -------------------------------------------- ---------------
                                [1993 - 1997)            9999
*/


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

VALID SELECT * FROM p;

/*
                                        VALID               i
 -------------------------------------------- ---------------
                                [1993 - 1997)            9999
*/

DROP TABLE p;
DROP TABLE q;


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

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

NONSEQUENCED VALID PERIOD '1990-1999'
INSERT INTO p VALUES(9999);

CREATE TABLE q(i integer) AS VALID;

NONSEQUENCED VALID PERIOD '1993-1997'
INSERT INTO q VALUES(9999);

VALID AND TRANSACTION SELECT * FROM p;

/*
                                  TRANSACTION                                        VALID               i
 -------------------------------------------- -------------------------------------------- ---------------
                             [1995 - forever)                                [1990 - 1999)            9999
*/


VALID SELECT * FROM q;

/*
                                        VALID               i
 -------------------------------------------- ---------------
                                [1993 - 1997)            9999
*/

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

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

VALID AND TRANSACTION SELECT * FROM p;

/*
                                  TRANSACTION                                        VALID               i
 -------------------------------------------- -------------------------------------------- ---------------
                             [1995 - 1995/02)                                [1990 - 1999)            9999
                          [1995/02 - forever)                                [1993 - 1997)            9999
*/


DROP TABLE p;
DROP TABLE q;


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

CREATE TABLE p(i integer) AS VALID;

NONSEQUENCED VALID PERIOD '1990-1999'
INSERT INTO p VALUES(9999);

CREATE TABLE q(i integer) AS VALID;

NONSEQUENCED VALID PERIOD '1993-1997'
INSERT INTO q VALUES(9999);

VALID SELECT * FROM p;

/*
                                        VALID               i
 -------------------------------------------- ---------------
                                [1990 - 1999)            9999
*/


VALID SELECT * FROM q;

/*
                                        VALID               i
 -------------------------------------------- ---------------
                                [1993 - 1997)            9999
*/

VALID 
DELETE FROM p WHERE EXISTS(SELECT * FROM q WHERE p.i = q.i);

VALID SELECT * FROM p;

/*
                                        VALID               i
 -------------------------------------------- ---------------
                                [1990 - 1993)            9999
                                [1997 - 1999)            9999
*/

DROP TABLE p;
DROP TABLE q;
