/**************************************************************************************/
/* File:        demo04                                                                */
/* Project:     ATSQL2 : Mike's examples with capitals                                */
/* Author:      Andreas Steiner                                                       */
/* Date:        12-07-1995                                                            */
/* Results:                                                                           */
/**************************************************************************************/

SET CALENDRIC SYSTEM decimal;

/* i models the independence of Eastern European countries */
CREATE TABLE i (c1 char(20), c2 char(20)) AS VALID;

NONSEQUENCED VALID PERIOD '1198-1621' 
	INSERT INTO i VALUES ('Czech Kingdom', 'Prague');
NONSEQUENCED VALID PERIOD '1918-1939' 
	INSERT INTO i VALUES ('Czechoslovakia', 'Prague');
NONSEQUENCED VALID PERIOD '1945-1993' 
	INSERT INTO i VALUES ('Czechoslovakia', 'Prague');
NONSEQUENCED VALID PERIOD '1993-forever' 
	INSERT INTO i VALUES ('Czech Republic', 'Prague');
NONSEQUENCED VALID PERIOD '1940-1945' 
	INSERT INTO i VALUES ('Slovakia', 'Bratislava');
NONSEQUENCED VALID PERIOD '1993-forever' 
	INSERT INTO i VALUES ('Slovakia', 'Bratislava');
NONSEQUENCED VALID PERIOD '1025-1040' 
	INSERT INTO i VALUES ('Poland', 'Gniezno');
NONSEQUENCED VALID PERIOD '1040-1596' 
	INSERT INTO i VALUES ('Poland', 'Cracow');
NONSEQUENCED VALID PERIOD '1596-1795' 
	INSERT INTO i VALUES ('Poland', 'Warsaw');
NONSEQUENCED VALID PERIOD '1918-1939' 
	INSERT INTO i VALUES ('Poland', 'Warsaw');
NONSEQUENCED VALID PERIOD '1945-forever' 
	INSERT INTO i VALUES ('Poland', 'Warsaw');


VALID SELECT * FROM i;

/*
	                    VALID                  c1                  c2
	 ------------------------ ------------------- -------------------
	            [1198 - 1621)       Czech Kingdom              Prague
		    [1918 - 1939)      Czechoslovakia              Prague
		    [1945 - 1993)      Czechoslovakia              Prague
		 [1993 - forever)      Czech Republic              Prague
		    [1940 - 1945)            Slovakia          Bratislava
		 [1993 - forever)            Slovakia          Bratislava
		    [1025 - 1040)              Poland             Gniezno
		    [1040 - 1596)              Poland              Cracow
		    [1596 - 1795)              Poland              Warsaw
		    [1918 - 1939)              Poland              Warsaw
		 [1945 - forever)              Poland              Warsaw
*/



VALID SELECT * FROM i where valid(i) precedes TIMESTAMP '1900';

/*
		    VALID                  c1                  c2
         ---------------- ------------------- -------------------
	    [1198 - 1621)       Czech Kingdom              Prague
	    [1025 - 1040)              Poland             Gniezno
	    [1040 - 1596)              Poland              Cracow
	    [1596 - 1795)              Poland              Warsaw
*/



VALID SELECT c1 FROM i;

/*
			    VALID                  c1
	 ------------------------ -------------------
		    [1198 - 1621)       Czech Kingdom
		    [1918 - 1939)      Czechoslovakia
		    [1945 - 1993)      Czechoslovakia
		 [1993 - forever)      Czech Republic
		    [1940 - 1945)            Slovakia
		 [1993 - forever)            Slovakia
		    [1025 - 1040)              Poland
		    [1040 - 1596)              Poland
		    [1596 - 1795)              Poland
		    [1918 - 1939)              Poland
		 [1945 - forever)              Poland
*/



VALID (SELECT c1 FROM i) (PERIOD);

/*
			    VALID                  c1
	 ------------------------ -------------------
		    [1198 - 1621)       Czech Kingdom
		    [1918 - 1939)      Czechoslovakia
		    [1945 - 1993)      Czechoslovakia
		 [1993 - forever)      Czech Republic
		    [1940 - 1945)            Slovakia
		 [1993 - forever)            Slovakia
		    [1025 - 1795)              Poland
		    [1918 - 1939)              Poland
		 [1945 - forever)              Poland
*/



VALID SELECT valid(i), c1 FROM i;

/*
	                    VALID               valid(i)                  c1
	 ------------------------ ---------------------- -------------------
	            [1198 - 1621)          [1198 - 1621)       Czech Kingdom
	            [1918 - 1939)          [1918 - 1939)      Czechoslovakia
	            [1945 - 1993)          [1945 - 1993)      Czechoslovakia
	         [1993 - forever)       [1993 - forever)      Czech Republic
	            [1940 - 1945)          [1940 - 1945)            Slovakia
	         [1993 - forever)       [1993 - forever)            Slovakia
	            [1025 - 1040)          [1025 - 1040)              Poland
	            [1040 - 1596)          [1040 - 1596)              Poland
	            [1596 - 1795)          [1596 - 1795)              Poland
	            [1918 - 1939)          [1918 - 1939)              Poland
	         [1945 - forever)       [1945 - forever)              Poland
*/



NONSEQUENCED VALID
  SELECT c1
  FROM   i;

/*
	                  c1
	 -------------------
	       Czech Kingdom
	      Czechoslovakia
	      Czechoslovakia
	      Czech Republic
	            Slovakia
	            Slovakia
	              Poland
	              Poland
	              Poland
	              Poland
	              Poland
*/



NONSEQUENCED VALID
  (SELECT c1
   FROM   i)(PERIOD);

/*
	                  c1
	 -------------------
	       Czech Kingdom
	      Czechoslovakia
	      Czech Republic
	            Slovakia
	              Poland
*/



NONSEQUENCED VALID valid(i)
  SELECT c1
  FROM   i;

/*
	                  VALID                  c1
	----------------------- -------------------
	          [1198 - 1621)       Czech Kingdom
	          [1918 - 1939)      Czechoslovakia
	          [1945 - 1993)      Czechoslovakia
	       [1993 - forever)      Czech Republic
	          [1940 - 1945)            Slovakia
	       [1993 - forever)            Slovakia
	          [1025 - 1040)              Poland
	          [1040 - 1596)              Poland
	          [1596 - 1795)              Poland
	          [1918 - 1939)              Poland
	       [1945 - forever)              Poland
*/



NONSEQUENCED VALID valid(i)
  (SELECT c1
   FROM   i)(PERIOD);

/*
	                  VALID                  c1
	----------------------- -------------------
	          [1198 - 1621)       Czech Kingdom
	          [1918 - 1939)      Czechoslovakia
	          [1945 - 1993)      Czechoslovakia
	       [1993 - forever)      Czech Republic
	          [1940 - 1945)            Slovakia
	       [1993 - forever)            Slovakia
	          [1025 - 1795)              Poland
	          [1918 - 1939)              Poland
	       [1945 - forever)              Poland
*/



NONSEQUENCED VALID valid(i) + interval '1' year
  SELECT c1
  FROM   i;

/*
	                  VALID                  c1
	----------------------- -------------------
	          [1199 - 1622)       Czech Kingdom
	          [1919 - 1940)      Czechoslovakia
	          [1946 - 1994)      Czechoslovakia
	       [1994 - forever)      Czech Republic
	          [1941 - 1946)            Slovakia
	       [1994 - forever)            Slovakia
	          [1026 - 1041)              Poland
	          [1041 - 1597)              Poland
	          [1597 - 1796)              Poland
	          [1919 - 1940)              Poland
	       [1946 - forever)              Poland
*/



NONSEQUENCED VALID PERIOD(TIMESTAMP '1964', TIMESTAMP '1995')
  SELECT *
  FROM i;

/*
	        VALID                  c1                  c2
	------------- ------------------- -------------------
	[1964 - 1995)       Czech Kingdom              Prague
	[1964 - 1995)      Czechoslovakia              Prague
	[1964 - 1995)      Czechoslovakia              Prague
	[1964 - 1995)      Czech Republic              Prague
	[1964 - 1995)            Slovakia          Bratislava
	[1964 - 1995)            Slovakia          Bratislava
	[1964 - 1995)              Poland             Gniezno
	[1964 - 1995)              Poland              Cracow
	[1964 - 1995)              Poland              Warsaw
	[1964 - 1995)              Poland              Warsaw
	[1964 - 1995)              Poland              Warsaw
*/



/* [BCST96] Example 2.4 */
VALID
  (
  SELECT 1
  FROM i(PERIOD) AS a0
  WHERE NOT EXISTS (
    SELECT *
    FROM i(PERIOD) AS a1
    WHERE a1.c1='Slovakia')
  AND a0.c1='Poland'
  )(PERIOD);

/*
	1025-1795	1
	1918-1939	1
	1945-1993	1
*/


VALID
  SELECT 1
  FROM i(PERIOD) AS a0
  WHERE NOT EXISTS (
    SELECT *
    FROM i(PERIOD) AS a1
    WHERE a1.c1='Slovakia')
  AND a0.c1='Poland';

/* 
	[1025 - 1040)	1
	[1040 - 1596)	1
	[1596 - 1795)	1
	[1918 - 1939)	1
	[1945 - 1993)	1
*/



/* [BCST96] Example 2.3 */


NONSEQUENCED VALID PERIOD(LAST(BEGIN(VALID(a0)),BEGIN(VALID(a2))+INTERVAL'1'YEAR),END(VALID(a0)))
 (SELECT a0.c1 AS c1
  FROM 
       (VALID
         SELECT a1.c2 AS c1
         FROM i(PERIOD) AS a1
         WHERE a1.c2<>'Cracow'
         AND a1.c1='Poland'
       )(PERIOD) AS a0,
       (VALID
         SELECT 1 AS c1
         FROM i(PERIOD) AS a3
         WHERE a3.c2='Cracow'
         AND a3.c1='Poland'
       )(PERIOD) AS a2
  WHERE LAST(BEGIN(VALID(a0)),BEGIN(VALID(a2))+INTERVAL'1'YEAR) PRECEDES END(VALID(a0))
  AND (END(VALID(a2))=BEGIN(VALID(a0)) OR BEGIN(VALID(a0)) PRECEDES END(VALID(a2)))
)(PERIOD);

/*
	Warsaw  1596-1794
*/



/* [BCST96] Example 2.4 */
VALID
(
SELECT a2.c2 AS c1
FROM 
     (NONSEQUENCED  VALID PERIOD(TIMESTAMP'beginning',END(VALID(a3))-INTERVAL'1'YEAR)
        SELECT a3.c2 AS c1,a3.c1 AS c2
         FROM i(PERIOD) AS a3
     )(PERIOD) AS a5,
     (NONSEQUENCED VALID PERIOD(BEGIN(VALID(a0))+INTERVAL'1'YEAR,TIMESTAMP'forever')
         SELECT a0.c2 AS c1,a0.c1 AS c2
         FROM i(PERIOD) AS a0
     )(PERIOD) AS a2
WHERE NOT EXISTS (
  SELECT *
  FROM i(PERIOD) AS a6
  WHERE a6.c1=a2.c2)
AND a5.c2=a2.c2
)(PERIOD);

/*
	Czechoslovakia	[1939 - 1945)
	Slovakia	[1945 - 1993)
	Poland		[1795 - 1918)
	Poland		[1939 - 1945)
*/



/* [BCST96 Example 2.6 */
NONSEQUENCED VALID VALID(i1)
  SELECT i1.c2
  FROM i(PERIOD) AS i1, i(PERIOD) AS i2
  WHERE i1.c1 = 'Poland'
  AND i2.c1 = 'Poland' AND i2.c2 = 'Cracow'
  AND VALID(i2) MEETS VALID(i1);

/*
	Warsaw  [1596 - 1795)
*/



/* [BCST96] Example 2.7 */
VALID
  (SELECT i1.c1
   FROM i(PERIOD) AS i1
   WHERE i1.c1 = 'Poland'
   AND NOT EXISTS (
     SELECT *
     FROM i(PERIOD) AS i2
     WHERE i2.c1 = 'Slovakia'))(PERIOD);

/*
	Poland	[1025 - 1795)
	Poland	[1818 - 1939)
	Poland	[1945 - 1993)
*/

DROP TABLE i;
