


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

InitializeSession "TESTDB";

##########################################################################
# 1-1の検査(初期状態から)
#以下のような表を定義する
#
#create table T (f int, g int generated by default as identity, h int);
#
#g に値を指定しないで数件の挿入を数回繰り返す
#
#insert T(f, h) values (1, 10), (2, 20), (3, 30);
#insert T(f, h) values (4, 40), (5, 50), (6, 60);
#
#g の値が 0 から順に与えられていることを確認する
#
#select * from T;
#⇒ 期待結果:
#	{1, 0, 10}
#	{2, 1, 20}
#	{3, 2, 30}
#	{4, 3, 40}
#	{5, 4, 50}
#	{6, 5, 60}

Command "create table T (f int, g int generated by default as identity, h int)";

Command "insert T(f, h) values (1, 10), (2, 20), (3, 30)";
Command "insert T(f, h) values (4, 40), (5, 50), (6, 60)";
Command "select * from T";

#####################################################################################


#####################################################################################
# 1-2 の検査(登録済み状態から) 1-1の検査(登録済み状態から)
#引き続いて g に値を指定して数件の挿入を数回繰り返す
#
#insert T values (40, 4, 400), (50, 5, 500), (60, 6, 500);
#insert T values (70, 7, 700), (80, 8, 800), (90, 9, 900);
#
#g の値が指定された値になっていることを確認する
#
#select * from T where f > 10;
#⇒ 期待結果:
#	{40, 4, 400}
#	{50, 5, 500}
#	{60, 6, 600}
#	{70, 7, 700}
#	{80, 8, 800}
#	{90, 9, 900
Command "insert T values (40, 4, 400), (50, 5, 500), (60, 6, 500)";
Command "insert T values (70, 7, 700), (80, 8, 800), (90, 9, 900)";
Command "select * from T where f > 10";

#さらに g に値を指定しないで数件の挿入を数回繰り返す
#
#insert T(f, h) values (100, 1000), (200, 2000), (300, 3000);
#insert T(f, h) values (400, 4000), (500, 5000), (600, 6000);
#
#g の値が前回自動割当された続きになっていることを確認する
#
#select * from T where f >= 100;
#⇒ 期待結果:
#	{100, 6, 1000}
#	{200, 7, 2000}
#	{300, 8, 3000}
#	{400, 9, 4000}
#	{500, 10, 5000}
#	{600, 11, 6000}
Command "insert T(f, h) values (100, 1000), (200, 2000), (300, 3000)";
Command "insert T(f, h) values (400, 4000), (500, 5000), (600, 6000)";
Command "select * from T where f >= 100";

#######################################################################


#######################################################################
#1-2の検査
#表を作り直す
#
#drop table T;
#create table T (f int, g int generated by default as identity, h int);
#
#g に値を指定して数件の挿入を数回繰り返す
#
#insert T values (40, 4, 400), (50, 5, 500), (60, 6, 500);
#insert T values (70, 7, 700), (80, 8, 800), (90, 9, 900);
#
#g の値が指定された値になっていることを確認する
#
#select * from T where f < 100;
#⇒ 期待結果:
#	{40, 4, 400}
#	{50, 5, 500}
#	{60, 6, 600}
#	{70, 7, 700}
#	{80, 8, 800}
#	{90, 9, 900}
Command "drop table T";

Command "create table T (f int, g int generated by default as identity, h int)";

Command "insert T values (40, 4, 400), (50, 5, 500), (60, 6, 500)";
Command "insert T values (70, 7, 700), (80, 8, 800), (90, 9, 900)";

Command "select * from T where f < 100";

#さらに g に値を指定しないで数件の挿入を数回繰り返す
#
#insert T(f, h) values (100, 1000), (200, 2000), (300, 3000);
#insert T(f, h) values (400, 4000), (500, 5000), (600, 6000);
#
#g の値が 0 から始まることを確認する
#
#select * from T where f >= 100;
#⇒ 期待結果:
#	{100, 0, 1000}
#	{200, 1, 2000}
#	{300, 2, 3000}
#	{400, 3, 4000}
#	{500, 4, 5000}
#	{600, 5, 6000}

Command "insert T(f, h) values (100, 1000), (200, 2000), (300, 3000)";
Command "insert T(f, h) values (400, 4000), (500, 5000), (600, 6000)";

Command "select * from T where f >= 100";

####################################################################################


####################################################################################
# 1-3 1-4の検査
#引き続いて g に値を指定しないで数件の更新を数回繰り返す
#
#update T set h = h + 1 where f between 40 and 50;
#update T set h = h * 2 where f between 60 and 90;
#
#g の値が変化していないことを確認する
#
#select * from T where f < 100;
#⇒ 期待結果:
#	{40, 4, 401}
#	{50, 5, 501}
#	{60, 6, 1200}
#	{70, 7, 1400}
#	{80, 8, 1600}
#	{90, 9, 1800}

Command "update T set h = h + 1 where f between 40 and 50";
Command "update T set h = h * 2 where f between 60 and 90";

Command "select * from T where f < 100";

#さらに g に値を指定して数件の更新を数回繰り返す
#
#update T set g = g + 100 where f between 100 and 300;
#update T set g = g - 100 where f between 400 and 600;
#
#g の値が指定された値になっていることを確認する
#
#select * from T where f >= 100;
#⇒ 期待結果:
#	{100, 100, 1000}
#	{200, 101, 2000}
#	{300, 102, 3000}
#	{400, -97, 4000}
#	{500, -96, 5000}
#	{600, -95, 6000}

Command "update T set g = g + 100 where f between 100 and 300";
Command "update T set g = g - 100 where f between 400 and 600";

Command "select * from T where f >= 100";

#さらに g に値を指定しないで数件の挿入を数回繰り返す
#
#insert T(f, h) values (1, 10), (2, 20), (3, 30);
#insert T(f, h) values (4, 40), (5, 50), (6, 60);
#
#g の値が前回の続き(6) から始まることを確認する
#
#select * from T where f < 10;
#⇒ 期待結果:
#	{1, 6, 10}
#	{2, 7, 20}
#	{3, 8, 30}
#	{4, 9, 40}
#	{5, 10, 50}
#	{6, 11, 60}

Command "insert T(f, h) values (1, 10), (2, 20), (3, 30)";
Command "insert T(f, h) values (4, 40), (5, 50), (6, 60);";

Command "select * from T where f < 10";

#####################################################################


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

TerminateSession;

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