############################################################################
#C1 DEFAULT指定なしの列
#C2 DEFAULT <literal>の指定を持つ列
#C3 DEFAULT CURRENT_TIMESTAMPの指定を持つ列 #1
#C4 DEFAULT CURRENT_TIMESTAMPの指定を持つ列 #2	... 索引つき
#C5 DEFAULT CURRENT_TIMESTAMP USING ON UPDATEの指定を持つ列 #1
#C6 DEFAULT CURRENT_TIMESTAMP USING ON UPDATEの指定を持つ列 #2	... 索引つき
############################################################################
# default CURRENT_TIMESTAMP テスト
# 

Begin;
Initialize;
InitializeSession "";
Command "create database TESTDB";
TerminateSession;

InitializeSession "TESTDB";

Command "create table T
(
	C1 int,
	C2 int DEFAULT 1234,
	C3 datetime DEFAULT CURRENT_TIMESTAMP,
	C4 datetime DEFAULT CURRENT_TIMESTAMP,
	C5 datetime DEFAULT CURRENT_TIMESTAMP USING ON UPDATE,
	C6 datetime DEFAULT CURRENT_TIMESTAMP USING ON UPDATE
)";
Command "create index I4 on T(C4)";
Command "create index I6 on T(C6)";

#######################  目視が必要な部分  ##################################
### 1-1 , 2-1 , 5の検査 ###
#C1 のみに値を指定したINSERT文により(複数の)レコードを入れる
Command "insert T(C1) values (1), (2), (3), (4), (5)";

#C3〜C6が現在時刻であり、かつ同じ値であることを確認
#C1: 指定した値、C2: <literal>の値、C3〜C6: 現在時刻(目視)
#同じ値であることは AssureCount 5 で確認
Command "select * from T where C3 = C4 and C4 = C5 and C5 = C6";
AssureCount 5;

#C3 のみに値を指定したINSERT文により(複数の)レコードを入れる
#1-2のテストで似たようなものがあるがselectで検査するものが違う
Command "insert T(C3) values ('2345-06-07 08:09:10'), ('2468-10-12 14:16:18')";

#C4〜C6が現在時刻であり、かつ同じ値であることを確認
#C1: 指定した値、C2: <literal>の値、C3: 指定した値、C4〜C6: 現在時刻(目視)
#同じ値であることは AssureCount 2 で確認
Command "select * from T where C3 > '2300-01-01 00:00:00' and C4 = C5 and C5 = C6";
AssureCount 2;

##########################
### 1-3 , 2-3 の検査 #####
#C2 のみに値を指定したUPDATE文により(複数の)レコードを更新する
#挿入されたレコードのうち3件が対象になる。
Command "update T set C2 = 100 where C1 in (3,4,5)";

#C1: 指定した値、C2: insert時に指定した値、C3〜C4: insert時の時刻、C5〜C6: 現在時刻(目視)
#同じ値であることは AssureCount 3 で確認
Command "select * from T where C2 = 100 and C5 = C6";
AssureCount 3;

#C3 のみに値を指定したUPDATE文により(複数の)レコードを更新する
#1-4のテストで似たようなものがあるがselectで検査するものが違う
#挿入されたレコードのうち2件が対象になる。
Command "update T set C3 = '3456-07-08 09:10:11' where C1 in (1,2)";

#C4に変化がなく、C5〜C6が現在時刻(同じ値)であることを確認
#C1: insert時に指定した値、C2: <literal>の値、C3: 指定した値、C4: insert時の時刻、C5〜C6: 現在時刻(目視)
#同じ値であることは AssureCount 2 で確認
Command "select * from T where C3 = '3456-07-08 09:10:11' and C5 = C6";
AssureCount 2;

#########################
### 2-5 の検査 ##########
#ON UPDATEつき同士
#事前にC5とC6に決まった値を入れておく
Command "insert T(C2, C5) values (5, '0123-04-05 06:07:08'), (5, '0246-08-10 12:14:16')";
Command "insert T(C2, C6) values (6, '1234-05-06 07:08:09'), (6, '2468-10-12 14:16:18')";

#C5の値をC6(およびその逆)に入れて更新し、指定したほうには決まった値、指定していないほうには現在時刻が入っていることを確認
Command "update T set C6 = C5 where C2 = 5";
Command "update T set C5 = C6 where C2 = 6";

#C5: 現在時刻(目視)、C6: insert時にC5に指定した値
Command "select C5, C6 from T where C2 = 5";

#C5: insert時にC6に指定した値、C6: 現在時刻(目視) 
Command "select C5, C6 from T where C2 = 6";

# tableの後始末
Command  "drop table T";

TerminateSession;

InitializeSession "";
Command "drop database TESTDB";
TerminateSession;
Terminate;
End;
