Begin;
Initialize;
InitializeSession "TESTDB";
Command "create database TESTDB";
TerminateSession;
InitializeSession "TESTDB";
#
# XA END -- 終了しようと試みたトランザクションブランチの状態ごとのテスト
#

# 『存在しない』
Command "xa end X'00'";

# 『データ操作中』
## XA STARTでトランザクションブランチ(データ操作無)を開始した終了済のセッション以外のセッションで実行。セッションの終了時に自動的にトランザクションブランチが待機される
Command "xa start X'00'";
TerminateSession;
InitializeSession "TESTDB";
Command "xa end X'00'";
Command "xa prepare X'00'";
Command "xa commit X'00'";

## XA STARTでトランザクションブランチ(データ操作有)を開始した終了済のセッション以外のセッションで実行。セッションの終了時に自動的にトランザクションブランチが待機される
Command "create table T(I int)";
Command "xa start X'00'";
Command "insert into T(I) values (?)" [1];
TerminateSession;
InitializeSession "TESTDB";
Command "xa end X'00'";
Command "xa prepare X'00'";
Command "xa commit X'00'";
Command "select * from T";
Command "drop table T";

# 『待機中』
Command "xa start X'00'";
Command "xa end X'00'";
Command "xa end X'00'";
Command "xa prepare X'00'";
Command "xa commit X'00'";

# 『コミット準備完了』
Command "xa start X'00'";
Command "xa end X'00'";
Command "xa prepare X'00'";
Command "xa end X'00'";
Command "xa commit X'00'";

# 『ヒューリスティックな解決済』
Command "create table T(I int)";
Command "xa start X'00'";
Command "insert into T(I) values (?)" [1];
Command "xa end X'00'";
Command "xa prepare X'00'";
TerminateSession;
Terminate;
Initialize;
InitializeSession "TESTDB";
Command "xa recover";
Command "xa end X'00'";
Command "xa forget X'00'";
Command "drop table T";

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