/**************************************************************************************/
/* File:        demo17                                                                */
/* Project:     ATSQL2 : Delete                                                       */
/* Author:      Andreas Steiner                                                       */
/* Date:        10-23-1998                                                            */
/* Results:                                                                           */
/**************************************************************************************/

create table ref(a integer, b char(20));
insert into ref values (1, 'ref1');


create table test(a integer, b char(20));
insert into test values (1, 'test1');
insert into test values (2, 'test2');
insert into test values (3, 'test3');


create table vt_ref(c integer, d char(20)) as validtime;
validtime period [1981-1985) insert into vt_ref values (1, 'vt_ref11');
validtime period [1985-1988) insert into vt_ref values (1, 'vt_ref12');
validtime period [1988-forever) insert into vt_ref values (1, 'vt_ref13');


create table vt_test(c integer, d char(20)) as validtime;
validtime period [1981-1985) insert into vt_test values (1, 'vt_test11');
validtime period [1985-1988) insert into vt_test values (1, 'vt_test12');
validtime period [1988-forever) insert into vt_test values (1, 'vt_test13');
validtime period [1990-forever) insert into vt_test values (2, 'vt_test2');
validtime period [1986-1992) insert into vt_test values (3, 'vt_test31');
validtime period [1990-1998) insert into vt_test values (3, 'vt_test32');

commit;


select * from test;
/*
a b                    
------------------------
1 test1                
2 test2                
3 test3                
*/


validtime select * from vt_test;
/*
valid          c d                    
---------------------------------------
[1981-1985)    1 vt_test11            
[1985-1988)    1 vt_test12            
[1988-forever) 1 vt_test13            
[1990-forever) 2 vt_test2             
[1986-1992)    3 vt_test31            
[1990-1998)    3 vt_test32            
*/



/* Delete Operations : */
/* =================== */

/* Snapshot-Delete in non-temporal table : */

delete from test where a = 1;
select * from test;
/*
a b                    
------------------------
2 test2                
3 test3                
*/
rollback;

delete from test where not exists (select * from ref where test.a = ref.a);
select * from test;
/*
a b                    
------------------------
1 test1                
*/
rollback;


/* Snapshot-Delete in temporal table : */

delete from vt_test where c = 1;
validtime select * from vt_test;
/*
valid                     c d                    
--------------------------------------------------
[1981-1985)               1 vt_test11            
[1985-1988)               1 vt_test12            
[1988-1998/12/20~22:3:55) 1 vt_test13            
[1990-forever)            2 vt_test2             
[1986-1992)               3 vt_test31            
[1990-1998)               3 vt_test32            
*/
rollback;

delete from vt_test where not exists (select * from vt_ref where vt_test.c = vt_ref.c);
validtime select * from vt_test;
/*
valid                    c d                    
-------------------------------------------------
[1981-1985)              1 vt_test11            
[1985-1988)              1 vt_test12            
[1988-forever)           1 vt_test13            
[1990-1998/12/20~22:4:6) 2 vt_test2             
[1986-1992)              3 vt_test31            
[1990-1998)              3 vt_test32            
*/
rollback;



/* Nontemporal evaluation of where-clause : */

nonsequenced validtime period [1983-1990) 
  delete from vt_test where c = 1;
validtime select * from vt_test;
/*
valid          c d                    
---------------------------------------
[1990-forever) 2 vt_test2             
[1986-1992)    3 vt_test31            
[1990-1998)    3 vt_test32            
[1981-1983)    1 vt_test11            
[1990-forever) 1 vt_test13            
*/
rollback;

nonsequenced validtime period [1983-1990) 
  delete from vt_test where not exists (select * from vt_ref where vt_test.c = vt_ref.c);
validtime select * from vt_test;
/*
valid          c d                    
---------------------------------------
[1981-1985)    1 vt_test11            
[1985-1988)    1 vt_test12            
[1988-forever) 1 vt_test13            
[1990-forever) 2 vt_test2             
[1990-1998)    3 vt_test32            
[1990-1992)    3 vt_test31            
*/
rollback;


/* Temporal evaluation of where-clause : */

validtime period [1983-1990) 
  delete from vt_test where c = 1;
validtime select * from vt_test;
/*
valid          c d                    
---------------------------------------
[1990-forever) 2 vt_test2             
[1986-1992)    3 vt_test31            
[1990-1998)    3 vt_test32            
[1981-1983)    1 vt_test11            
[1990-forever) 1 vt_test13            
*/
rollback;


validtime period [1983-1990) 
  delete from vt_test where not exists (select * from vt_ref where vt_test.c = vt_ref.c);
validtime select * from vt_test;
/*
valid          c d                    
---------------------------------------
[1981-1985)    1 vt_test11            
[1985-1988)    1 vt_test12            
[1988-forever) 1 vt_test13            
[1990-forever) 2 vt_test2             
[1990-1992)    3 vt_test31            
[1990-1998)    3 vt_test32            
*/
rollback;



/* Remove Tables : */
/* =============== */

drop table test;
drop table ref;
drop table vt_test;
drop table vt_ref;

commit;

