# select * from T where〈 列リスト2個 〉in〈 subquery - where句がinの左辺を含む 〉
#
# 列A in (select .. where 列A)テスト
# 複索引
# --T1索引き有り, T2索引き有り
# --同種テスト 105[2-5]6

Begin;
Initialize;

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

InitializeSession "TESTDB";

# メインテーブル
Command  "create table T1(C1 int, C2 int, C3 varchar(2), C4 nvarchar(4), C5 nvarchar(448))";
Command  "create index I1_1  on T1(C1, C2)";
Command  "create index I1_2  on T1(C1, C3)";
Command  "create index I1_3  on T1(C1, C4)";
Command  "create index I1_4  on T1(C1, C5)";
Command  "create index I1_5  on T1(C2, C3)";
Command  "create index I1_6  on T1(C2, C4)";
Command  "create index I1_7  on T1(C2, C5)";
Command  "create index I1_8  on T1(C3, C4)";
Command  "create index I1_9  on T1(C3, C5)";
Command  "create index I1_10 on T1(C4, C5)";
Command  "insert into T1 (C1, C2, C3, C4, C5) values (?, ?, ?, ?, ?)" [1, 111,  "1", "ほげ", textsjisfile "..\\..\\doc\\lab.txt"   ];
Command  "insert into T1 (C1, C2, C3, C4, C5) values (?, ?, ?, ?, ?)" [2, 222,  "2", "ホゲ", textsjisfile "..\\..\\doc\\ricoh.txt"];
Command  "insert into T1 (C1, C2, C3, C4, C5) values (?, ?, ?, ?, ?)" [3, 222,  "3", "ホゲ", textsjisfile "..\\..\\doc\\ricoh.txt"];
Command  "insert into T1 (C1, C2, C3, C4, C5) values (?, ?, ?, ?, ?)" [4, 222,  "4", "ホゲ", textsjisfile "..\\..\\doc\\ricoh.txt"];
Command  "insert into T1 (C1, C2, C3, C4, C5) values (?, ?, ?, ?, ?)" [1, 333,  "1",  null,  null                                 ];
Command  "insert into T1 (C1, C2, C3, C4, C5) values (?, ?, ?, ?, ?)" [2, 333,  "2", "ぴよ", textsjisfile "..\\..\\doc\\hello.txt"];
Command  "insert into T1 (C1, C2, C3, C4, C5) values (?, ?, ?, ?, ?)" [3, 333,  "3", "ぴよ", textsjisfile "..\\..\\doc\\hello.txt"];
Command  "insert into T1 (C1, C2, C3, C4, C5) values (?, ?, ?, ?, ?)" [4, 333,  "4", "ぴよ", textsjisfile "..\\..\\doc\\hello.txt"];
Command  "insert into T1 (C1, C2, C3, C4, C5) values (?, ?, ?, ?, ?)" [1, 444,  "1", "ピヨ", textsjisfile "..\\..\\doc\\in_lab.txt"];
Command  "insert into T1 (C1, C2, C3, C4, C5) values (?, ?, ?, ?, ?)" [2, null, "2",  null,  null                                 ];
Command  "insert into T1 (C1, C2, C3, C4, C5) values (?, ?, ?, ?, ?)" [3, 444,  "3", "ピヨ", textsjisfile "..\\..\\doc\\in_lab.txt"];
Command  "insert into T1 (C1, C2, C3, C4, C5) values (?, ?, ?, ?, ?)" [4, 111,  "4", "ほげ", textsjisfile "..\\..\\doc\\lab.txt"   ];
Command  "insert into T1 (C1, C2, C3, C4, C5) values (?, ?, ?, ?, ?)" [1, null, "1", "ほげ", textsjisfile "..\\..\\doc\\lab.txt"   ];
Command  "insert into T1 (C1, C2, C3, C4, C5) values (?, ?, ?, ?, ?)" [2, 444,  "2",  null,  textsjisfile "..\\..\\doc\\lab.txt"   ];
Command  "insert into T1 (C1, C2, C3, C4, C5) values (?, ?, ?, ?, ?)" [3, 222,  "3", "ぴよ", null                                 ];


# --int, char
Command  "create table T2(C1 int, C2 nvarchar(4))";
Command  "create index I2_1 on T2(C1, C2)";
Command  "insert into T2 (C1, C2) values (?, ?)" [222,  "ホゲ"];
Command  "insert into T2 (C1, C2) values (?, ?)" [222,   null ];
Command  "insert into T2 (C1, C2) values (?, ?)" [null, "ピヨ"];
Command  "insert into T2 (C1, C2) values (?, ?)" [333,  "ホゲ"];
Command  "insert into T2 (C1, C2) values (?, ?)" [333,  "ピヨ"];
Command  "insert into T2 (C1, C2) values (?, ?)" [333,  "ぴよ"];
Command  "insert into T2 (C1, C2) values (?, ?)" [null,  null ];


# --サブクエリのwhere句がinの左辺を含む
# -- --T1.C2 in (.. where T1.C2)
Command  "select * from T1 where (T1.C2, T1.C2) in (select T2.C1, T2.C1 from T2 where T1.C2 is null)";

Command  "select * from T1 where (T1.C2, T1.C2) in (select T2.C1, T2.C1 from T2 where T1.C2 >= ?)" [333];
Command  "select * from T1 where (T1.C2, T1.C2) in (select T2.C1, T2.C1 from T2 where T1.C2 = T2.C1)";

# -- --T1.C4 in (.. where T1.C4)
Command  "select * from T1 where (T1.C4, T1.C4) in (select T2.C2, T2.C2 from T2 where T1.C4 is null)";

Command  "select * from T1 where (T1.C4, T1.C4) in (select T2.C2, T2.C2 from T2 where T1.C4 >= ?)" ["ほげ"];
Command  "select * from T1 where (T1.C4, T1.C4) in (select T2.C2, T2.C2 from T2 where T1.C4 = T2.C2)";

# -- --T1.C2, T1.C4 in (.. where T1.C2)
Command  "select * from T1 where (T1.C2, T1.C4) in (select T2.C1, T2.C2 from T2 where T1.C2 is null)";

Command  "select * from T1 where (T1.C2, T1.C4) in (select T2.C1, T2.C2 from T2 where T1.C2 >= ?)" [333];
Command  "select * from T1 where (T1.C2, T1.C4) in (select T2.C1, T2.C2 from T2 where T1.C2 = T2.C1)";

# -- --T1.C2, T1.C4 in (.. where T1.C4)
Command  "select * from T1 where (T1.C2, T1.C4) in (select T2.C1, T2.C2 from T2 where T1.C4 is null)";

Command  "select * from T1 where (T1.C2, T1.C4) in (select T2.C1, T2.C2 from T2 where T1.C4 >= ?)" ["ほげ"];
Command  "select * from T1 where (T1.C2, T1.C4) in (select T2.C1, T2.C2 from T2 where T1.C4 = T2.C2)";

# -- --T2.C1 in (.. where T2.C1)
Command  "select * from T2 where (T2.C1, T2.C1) in (select T1.C2, T1.C2 from T1 where T2.C1 is null)";

Command  "select * from T2 where (T2.C1, T2.C1) in (select T1.C2, T1.C2 from T1 where T2.C1 >= ?)" [333];
Command  "select * from T2 where (T2.C1, T2.C1) in (select T1.C2, T1.C2 from T1 where T2.C1 = T1.C2)";

# -- --T2.C2 in (.. where T2.C2)
Command  "select * from T2 where (T2.C2, T2.C2) in (select T1.C4, T1.C4 from T1 where T2.C2 is null)";

Command  "select * from T2 where (T2.C2, T2.C2) in (select T1.C4, T1.C4 from T1 where T2.C2 >= ?)" ["ほげ"];
Command  "select * from T2 where (T2.C2, T2.C2) in (select T1.C4, T1.C4 from T1 where T2.C2 = T1.C4)";

# -- --T2.C1, T2.C2 in (.. where T2.C1)
Command  "select * from T2 where (T2.C1, T2.C2) in (select T1.C2, T1.C4 from T1 where T2.C1 is null)";

Command  "select * from T2 where (T2.C1, T2.C2) in (select T1.C2, T1.C4 from T1 where T2.C1 >= ?)" [333];
Command  "select * from T2 where (T2.C1, T2.C2) in (select T1.C2, T1.C4 from T1 where T2.C1 = T1.C2)";

# -- --T2.C1, T2.C2 in (.. where T2.C2)
Command  "select * from T2 where (T2.C1, T2.C2) in (select T1.C2, T1.C4 from T1 where T2.C2 is null)";

Command  "select * from T2 where (T2.C1, T2.C2) in (select T1.C2, T1.C4 from T1 where T2.C2 >= ?)" ["ほげ"];
Command  "select * from T2 where (T2.C1, T2.C2) in (select T1.C2, T1.C4 from T1 where T2.C2 = T1.C4)";

Command  "drop table T2";


# --int, nvarchar(text型)
Command  "create table T2(C1 int, C2 nvarchar(448))";
Command  "create index I2_1 on T2(C1, C2)";
Command  "insert into T2 (C1, C2) values (?, ?)" [222,  textsjisfile "..\\..\\doc\\hello.txt"];
Command  "insert into T2 (C1, C2) values (?, ?)" [222,  null                                 ];
Command  "insert into T2 (C1, C2) values (?, ?)" [null, textsjisfile "..\\..\\doc\\ricoh.txt"];
Command  "insert into T2 (C1, C2) values (?, ?)" [333,  textsjisfile "..\\..\\doc\\hello.txt"];
Command  "insert into T2 (C1, C2) values (?, ?)" [333,  textsjisfile "..\\..\\doc\\ricoh.txt"];
Command  "insert into T2 (C1, C2) values (?, ?)" [333,  textsjisfile "..\\..\\doc\\in_lab.txt"];
Command  "insert into T2 (C1, C2) values (?, ?)" [null, null                                 ];


# --サブクエリのwhere句がinの左辺を含む
# -- --T1.C2 in (.. where T1.C2)
Command  "select * from T1 where (T1.C2, T1.C2) in (select T2.C1, T2.C1 from T2 where T1.C2 is null)";

Command  "select * from T1 where (T1.C2, T1.C2) in (select T2.C1, T2.C1 from T2 where T1.C2 >= ?)" [333];
Command  "select * from T1 where (T1.C2, T1.C2) in (select T2.C1, T2.C1 from T2 where T1.C2 = T2.C1)";

# -- --T1.C5 in (.. where T1.C5)
Command  "select * from T1 where (T1.C5, T1.C5) in (select T2.C2, T2.C2 from T2 where T1.C5 is null)";

Command  "select * from T1 where (T1.C5, T1.C5) in (select T2.C2, T2.C2 from T2 where T1.C5 like ?)" ["ソフトウェア研究%"];
Command  "select * from T1 where (T1.C5, T1.C5) in (select T2.C2, T2.C2 from T2 where T1.C5 = T2.C2)";

# -- --T1.C2, T1.C5 in (.. where T1.C2)
Command  "select * from T1 where (T1.C2, T1.C5) in (select T2.C1, T2.C2 from T2 where T1.C2 is null)";

Command  "select * from T1 where (T1.C2, T1.C5) in (select T2.C1, T2.C2 from T2 where T1.C2 >= ?)" [333];
Command  "select * from T1 where (T1.C2, T1.C5) in (select T2.C1, T2.C2 from T2 where T1.C2 = T2.C1)";

# -- --T1.C2, T1.C5 in (.. where T1.C5)
Command  "select * from T1 where (T1.C2, T1.C5) in (select T2.C1, T2.C2 from T2 where T1.C5 is null)";

Command  "select * from T1 where (T1.C2, T1.C5) in (select T2.C1, T2.C2 from T2 where T1.C5 like ?)" ["ソフトウェア研究%"];
Command  "select * from T1 where (T1.C2, T1.C5) in (select T2.C1, T2.C2 from T2 where T1.C5 = T2.C2)";

# -- --T2.C1 in (.. where T2.C1)
Command  "select * from T2 where (T2.C1, T2.C1) in (select T1.C2, T1.C2 from T1 where T2.C1 is null)";

Command  "select * from T2 where (T2.C1, T2.C1) in (select T1.C2, T1.C2 from T1 where T2.C1 >= ?)" [333];
Command  "select * from T2 where (T2.C1, T2.C1) in (select T1.C2, T1.C2 from T1 where T2.C1 = T1.C2)";

# -- --T2.C2 in (.. where T2.C2)
Command  "select * from T2 where (T2.C2, T2.C2) in (select T1.C2, T1.C2 from T1 where T2.C2 is null)";

Command  "select * from T2 where (T2.C2, T2.C2) in (select T1.C2, T1.C2 from T1 where T2.C2 like ?)" ["ソフトウェア研究%"];
Command  "select * from T2 where (T2.C2, T2.C2) in (select T1.C2, T1.C2 from T1 where T2.C2 = T1.C5)";

# -- --T2.C1, T2.C2 in (.. where T2.C1)
Command  "select * from T2 where (T2.C1, T2.C2) in (select T1.C2, T1.C5 from T1 where T2.C1 is null)";

Command  "select * from T2 where (T2.C1, T2.C2) in (select T1.C2, T1.C5 from T1 where T2.C1 >= ?)" [333];
Command  "select * from T2 where (T2.C1, T2.C2) in (select T1.C2, T1.C5 from T1 where T2.C1 = T1.C2)";

# -- --T2.C1, T2.C2 in (.. where T2.C2)
Command  "select * from T2 where (T2.C1, T2.C2) in (select T1.C2, T1.C5 from T1 where T2.C2 is null)";

Command  "select * from T2 where (T2.C1, T2.C2) in (select T1.C2, T1.C5 from T1 where T2.C2 like ?)" ["ソフトウェア研究%"];
Command  "select * from T2 where (T2.C1, T2.C2) in (select T1.C2, T1.C5 from T1 where T2.C2 = T1.C5)";

Command  "drop table T2";


# --char, nvarchar(text型)
Command  "create table T2(C1 nvarchar(4), C2 nvarchar(448))";
Command  "create index I2_1 on T2(C1, C2)";
Command  "insert into T2 (C1, C2) values (?, ?)" ["ホゲ", textsjisfile "..\\..\\doc\\hello.txt"];
Command  "insert into T2 (C1, C2) values (?, ?)" ["ホゲ", null                                 ];
Command  "insert into T2 (C1, C2) values (?, ?)" [ null,  textsjisfile "..\\..\\doc\\ricoh.txt"];
Command  "insert into T2 (C1, C2) values (?, ?)" ["ピヨ", textsjisfile "..\\..\\doc\\hello.txt"];
Command  "insert into T2 (C1, C2) values (?, ?)" ["ピヨ", textsjisfile "..\\..\\doc\\ricoh.txt"];
Command  "insert into T2 (C1, C2) values (?, ?)" ["ピヨ", textsjisfile "..\\..\\doc\\in_lab.txt"];
Command  "insert into T2 (C1, C2) values (?, ?)" [ null,  null                                 ];


# --サブクエリのwhere句がinの左辺を含む
# -- --T1.C4 in (.. where T1.C4)
Command  "select * from T1 where (T1.C4, T1.C4) in (select T2.C1, T2.C1 from T2 where T1.C4 is null)";

Command  "select * from T1 where (T1.C4, T1.C4) in (select T2.C1, T2.C1 from T2 where T1.C4 >= ?)" ["ほげ"];
Command  "select * from T1 where (T1.C4, T1.C4) in (select T2.C1, T2.C1 from T2 where T1.C4 = T2.C1)";

# -- --T1.C5 in (.. where T1.C5)
Command  "select * from T1 where (T1.C5, T1.C5) in (select T2.C2, T2.C2 from T2 where T1.C5 is null)";

Command  "select * from T1 where (T1.C5, T1.C5) in (select T2.C2, T2.C2 from T2 where T1.C5 like ?)" ["ソフトウェア研究%"];
Command  "select * from T1 where (T1.C5, T1.C5) in (select T2.C2, T2.C2 from T2 where T1.C5 = T2.C2)";

# -- --T1.C4, T1.C5 in (.. where T1.C4)
Command  "select * from T1 where (T1.C4, T1.C5) in (select T2.C1, T2.C2 from T2 where T1.C4 is null)";

Command  "select * from T1 where (T1.C4, T1.C5) in (select T2.C1, T2.C2 from T2 where T1.C4 >= ?)" ["ほげ"];
Command  "select * from T1 where (T1.C4, T1.C5) in (select T2.C1, T2.C2 from T2 where T1.C4 = T2.C1)";

# -- --T1.C4, T1.C5 in (.. where T1.C5)
Command  "select * from T1 where (T1.C4, T1.C5) in (select T2.C1, T2.C2 from T2 where T1.C5 is null)";

Command  "select * from T1 where (T1.C4, T1.C5) in (select T2.C1, T2.C2 from T2 where T1.C5 like ?)" ["ソフトウェア研究%"];
Command  "select * from T1 where (T1.C4, T1.C5) in (select T2.C1, T2.C2 from T2 where T1.C5 = T2.C2)";

# -- --T2.C1 in (.. where T2.C1)
Command  "select * from T2 where (T2.C1, T2.C1) in (select T1.C4, T1.C4 from T1 where T2.C1 is null)";

Command  "select * from T2 where (T2.C1, T2.C1) in (select T1.C4, T1.C4 from T1 where T2.C1 >= ?)" ["ほげ"];
Command  "select * from T2 where (T2.C1, T2.C1) in (select T1.C4, T1.C4 from T1 where T2.C1 = T1.C4)";

# -- --T2.C2 in (.. where T2.C2)
Command  "select * from T2 where (T2.C2, T2.C2) in (select T1.C5, T1.C5 from T1 where T2.C2 is null)";

Command  "select * from T2 where (T2.C2, T2.C2) in (select T1.C5, T1.C5 from T1 where T2.C2 like ?)" ["ソフトウェア研究%"];
Command  "select * from T2 where (T2.C2, T2.C2) in (select T1.C5, T1.C5 from T1 where T2.C2 = T1.C5)";

# -- --T2.C1, T2.C2 in (.. where T2.C1)
Command  "select * from T2 where (T2.C1, T2.C2) in (select T1.C4, T1.C5 from T1 where T2.C1 is null)";

Command  "select * from T2 where (T2.C1, T2.C2) in (select T1.C4, T1.C5 from T1 where T2.C1 >= ?)" ["ほげ"];
Command  "select * from T2 where (T2.C1, T2.C2) in (select T1.C4, T1.C5 from T1 where T2.C1 = T1.C4)";

# -- --T2.C1, T2.C2 in (.. where T2.C2)
Command  "select * from T2 where (T2.C1, T2.C2) in (select T1.C4, T1.C5 from T1 where T2.C2 is null)";

Command  "select * from T2 where (T2.C1, T2.C2) in (select T1.C4, T1.C5 from T1 where T2.C2 like ?)" ["ソフトウェア研究%"];
Command  "select * from T2 where (T2.C1, T2.C2) in (select T1.C4, T1.C5 from T1 where T2.C2 = T1.C5)";

Command  "drop table T2";


#boolean検索テスト
Command  "create table T2(C1 int, C2 nvarchar(4), C3 nvarchar(448))";
Command  "create index I2_1 on T2(C1, C2)";
Command  "create index I2_2 on T2(C1, C3)";
Command  "create index I2_3 on T2(C2, C3)";
Command  "insert into T2 (C1, C2, C3) values (?, ?, ?)" [222,  "ホゲ", textsjisfile "..\\..\\doc\\hello.txt"];
Command  "insert into T2 (C1, C2, C3) values (?, ?, ?)" [222,   null,  null                                 ];
Command  "insert into T2 (C1, C2, C3) values (?, ?, ?)" [null, "ホゲ", textsjisfile "..\\..\\doc\\ricoh.txt"];
Command  "insert into T2 (C1, C2, C3) values (?, ?, ?)" [333,  "ピヨ", textsjisfile "..\\..\\doc\\hello.txt"];
Command  "insert into T2 (C1, C2, C3) values (?, ?, ?)" [333,  "ピヨ", textsjisfile "..\\..\\doc\\ricoh.txt"];
Command  "insert into T2 (C1, C2, C3) values (?, ?, ?)" [333,  "ぴよ", textsjisfile "..\\..\\doc\\in_lab.txt"];
Command  "insert into T2 (C1, C2, C3) values (?, ?, ?)" [null,  null , null                                 ];


Command  "select * from T1 where (T1.C2, T1.C4) in (select T2.C1, T2.C2 from T2 where T1.C2 >= ? and T1.C4 >= ?)" [333, "ぴよ"];
Command  "select * from T1 where (T1.C2, T1.C5) in (select T2.C1, T2.C3 from T2 where T1.C2 >= ? and T1.C5 like ?)" [333, "株式会社リコー%"];
Command  "select * from T1 where (T1.C4, T1.C5) in (select T2.C2, T2.C3 from T2 where T1.C4 >= ? and T1.C5 like ?)" ["ぴよ", "株式会社リコー%"];

Command  "select * from T2 where (T2.C1, T2.C2) in (select T1.C2, T1.C4 from T1 where T2.C1 >= ? and T2.C2 >= ?)" [333, "ぴよ"];
Command  "select * from T2 where (T2.C1, T2.C3) in (select T1.C2, T1.C5 from T1 where T2.C1 >= ? and T2.C3 like ?)" [333, "株式会社リコー%"];
Command  "select * from T2 where (T2.C2, T2.C3) in (select T1.C4, T1.C5 from T1 where T2.C2 >= ? and T2.C3 like ?)" ["ぴよ", "株式会社リコー%"];

Command  "drop table T2";

Command  "drop table T1";


TerminateSession;
# DBの後始末
InitializeSession "";
Command  "drop database TESTDB";
TerminateSession;
Terminate;
End;
