OSDN Git Service

複数の問合せブロックに関する試験(R-2-1-*)を追加した。
authorTakashi Suzuki <suzuki.takashi@metrosystems.co.jp>
Wed, 15 Jan 2014 08:21:18 +0000 (17:21 +0900)
committerTakashi Suzuki <suzuki.takashi@metrosystems.co.jp>
Wed, 15 Jan 2014 09:37:50 +0000 (18:37 +0900)
ただし、不合格

expected/R_2-1-1.out [new file with mode: 0644]
expected/R_2-1-2.out [new file with mode: 0644]
expected/R_2-1-3.out [new file with mode: 0644]
expected/R_2-1-4.out [new file with mode: 0644]
expected/R_2-1-5.out [new file with mode: 0644]
expected/R_2-1-6.out [new file with mode: 0644]
expected/R_2-1-7.out [new file with mode: 0644]
expected/R_2-1-8.out [new file with mode: 0644]
expected/ut-R.out
sql/ut-R.sql

diff --git a/expected/R_2-1-1.out b/expected/R_2-1-1.out
new file mode 100644 (file)
index 0000000..9383f93
--- /dev/null
@@ -0,0 +1,96 @@
+                                                     QUERY PLAN                                                     
+--------------------------------------------------------------------------------------------------------------------
+ Aggregate  (cost=xxx rows=1 width=4)
+   InitPlan 1 (returns $1)
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=100 width=4)
+                 Join Filter: (b1t2.c1 = b1t1.c1)
+                 ->  Hash Join  (cost=xxx rows=100 width=12)
+                       Hash Cond: (b1t4.c1 = b1t2.c1)
+                       ->  Seq Scan on t4 b1t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=100 width=8)
+                             ->  Merge Join  (cost=xxx rows=100 width=8)
+                                   Merge Cond: (b1t3.c1 = b1t2.c1)
+                                   ->  Index Only Scan using t3_i1 on t3 b1t3  (cost=xxx rows=1100 width=4)
+                                   ->  Sort  (cost=xxx rows=100 width=4)
+                                         Sort Key: b1t2.c1
+                                         ->  Seq Scan on t2 b1t2  (cost=xxx rows=100 width=4)
+                 ->  Index Only Scan using t1_i1 on t1 b1t1  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b1t3.c1)
+   InitPlan 2 (returns $3)
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=100 width=4)
+                 ->  Hash Join  (cost=xxx rows=1000 width=12)
+                       Hash Cond: (b2t3.c1 = b2t1.c1)
+                       ->  Merge Join  (cost=xxx rows=1100 width=8)
+                             Merge Cond: (b2t3.c1 = b2t4.c1)
+                             ->  Index Only Scan using t3_i1 on t3 b2t3  (cost=xxx rows=1100 width=4)
+                             ->  Index Only Scan using t4_i1 on t4 b2t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=1000 width=4)
+                             ->  Seq Scan on t1 b2t1  (cost=xxx rows=1000 width=4)
+                 ->  Index Only Scan using t2_i1 on t2 b2t2  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b2t1.c1)
+   ->  Nested Loop  (cost=xxx rows=100 width=4)
+         Join Filter: (bmt1.c1 = bmt4.c1)
+         ->  Hash Join  (cost=xxx rows=100 width=12)
+               Hash Cond: (bmt3.c1 = bmt1.c1)
+               ->  Seq Scan on t3 bmt3  (cost=xxx rows=1100 width=4)
+               ->  Hash  (cost=xxx rows=100 width=8)
+                     ->  Merge Join  (cost=xxx rows=100 width=8)
+                           Merge Cond: (bmt1.c1 = bmt2.c1)
+                           ->  Index Only Scan using t1_i1 on t1 bmt1  (cost=xxx rows=1000 width=4)
+                           ->  Sort  (cost=xxx rows=100 width=4)
+                                 Sort Key: bmt2.c1
+                                 ->  Seq Scan on t2 bmt2  (cost=xxx rows=100 width=4)
+         ->  Index Only Scan using t4_i1 on t4 bmt4  (cost=xxx rows=1 width=4)
+               Index Cond: (c1 = bmt3.c1)
+(44 rows)
+
+                                                     QUERY PLAN                                                     
+--------------------------------------------------------------------------------------------------------------------
+ Aggregate  (cost=xxx rows=1 width=4)
+   InitPlan 1 (returns $1)
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=1 width=4)
+                 Join Filter: (b1t2.c1 = b1t1.c1)
+                 ->  Hash Join  (cost=xxx rows=1 width=12)
+                       Hash Cond: (b1t4.c1 = b1t2.c1)
+                       ->  Seq Scan on t4 b1t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=100 width=8)
+                             ->  Merge Join  (cost=xxx rows=1 width=8)
+                                   Merge Cond: (b1t3.c1 = b1t2.c1)
+                                   ->  Index Only Scan using t3_i1 on t3 b1t3  (cost=xxx rows=1100 width=4)
+                                   ->  Sort  (cost=xxx rows=100 width=4)
+                                         Sort Key: b1t2.c1
+                                         ->  Seq Scan on t2 b1t2  (cost=xxx rows=100 width=4)
+                 ->  Index Only Scan using t1_i1 on t1 b1t1  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b1t3.c1)
+   InitPlan 2 (returns $3)
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=1 width=4)
+                 ->  Hash Join  (cost=xxx rows=1 width=12)
+                       Hash Cond: (b2t3.c1 = b2t1.c1)
+                       ->  Merge Join  (cost=xxx rows=1 width=8)
+                             Merge Cond: (b2t3.c1 = b2t4.c1)
+                             ->  Index Only Scan using t3_i1 on t3 b2t3  (cost=xxx rows=1100 width=4)
+                             ->  Index Only Scan using t4_i1 on t4 b2t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=1000 width=4)
+                             ->  Seq Scan on t1 b2t1  (cost=xxx rows=1000 width=4)
+                 ->  Index Only Scan using t2_i1 on t2 b2t2  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b2t1.c1)
+   ->  Nested Loop  (cost=xxx rows=1 width=4)
+         Join Filter: (bmt1.c1 = bmt4.c1)
+         ->  Hash Join  (cost=xxx rows=1 width=12)
+               Hash Cond: (bmt3.c1 = bmt1.c1)
+               ->  Seq Scan on t3 bmt3  (cost=xxx rows=1100 width=4)
+               ->  Hash  (cost=xxx rows=100 width=8)
+                     ->  Merge Join  (cost=xxx rows=1 width=8)
+                           Merge Cond: (bmt1.c1 = bmt2.c1)
+                           ->  Index Only Scan using t1_i1 on t1 bmt1  (cost=xxx rows=1000 width=4)
+                           ->  Sort  (cost=xxx rows=100 width=4)
+                                 Sort Key: bmt2.c1
+                                 ->  Seq Scan on t2 bmt2  (cost=xxx rows=100 width=4)
+         ->  Index Only Scan using t4_i1 on t4 bmt4  (cost=xxx rows=1 width=4)
+               Index Cond: (c1 = bmt3.c1)
+(44 rows)
+
diff --git a/expected/R_2-1-2.out b/expected/R_2-1-2.out
new file mode 100644 (file)
index 0000000..8b5bd42
--- /dev/null
@@ -0,0 +1,124 @@
+                                                     QUERY PLAN                                                     
+--------------------------------------------------------------------------------------------------------------------
+ Aggregate  (cost=xxx rows=1 width=4)
+   InitPlan 1 (returns $1)
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=100 width=4)
+                 Join Filter: (b1t2.c1 = b1t1.c1)
+                 ->  Hash Join  (cost=xxx rows=100 width=12)
+                       Hash Cond: (b1t4.c1 = b1t2.c1)
+                       ->  Seq Scan on t4 b1t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=100 width=8)
+                             ->  Merge Join  (cost=xxx rows=100 width=8)
+                                   Merge Cond: (b1t3.c1 = b1t2.c1)
+                                   ->  Index Only Scan using t3_i1 on t3 b1t3  (cost=xxx rows=1100 width=4)
+                                   ->  Sort  (cost=xxx rows=100 width=4)
+                                         Sort Key: b1t2.c1
+                                         ->  Seq Scan on t2 b1t2  (cost=xxx rows=100 width=4)
+                 ->  Index Only Scan using t1_i1 on t1 b1t1  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b1t3.c1)
+   InitPlan 2 (returns $3)
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=100 width=4)
+                 ->  Hash Join  (cost=xxx rows=1000 width=12)
+                       Hash Cond: (b2t3.c1 = b2t1.c1)
+                       ->  Merge Join  (cost=xxx rows=1100 width=8)
+                             Merge Cond: (b2t3.c1 = b2t4.c1)
+                             ->  Index Only Scan using t3_i1 on t3 b2t3  (cost=xxx rows=1100 width=4)
+                             ->  Index Only Scan using t4_i1 on t4 b2t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=1000 width=4)
+                             ->  Seq Scan on t1 b2t1  (cost=xxx rows=1000 width=4)
+                 ->  Index Only Scan using t2_i1 on t2 b2t2  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b2t1.c1)
+   InitPlan 3 (returns $5)
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=100 width=4)
+                 Join Filter: (b3t1.c1 = b3t3.c1)
+                 ->  Hash Join  (cost=xxx rows=100 width=12)
+                       Hash Cond: (b3t1.c1 = b3t2.c1)
+                       ->  Merge Join  (cost=xxx rows=1000 width=8)
+                             Merge Cond: (b3t1.c1 = b3t4.c1)
+                             ->  Index Only Scan using t1_i1 on t1 b3t1  (cost=xxx rows=1000 width=4)
+                             ->  Index Only Scan using t4_i1 on t4 b3t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=100 width=4)
+                             ->  Seq Scan on t2 b3t2  (cost=xxx rows=100 width=4)
+                 ->  Index Only Scan using t3_i1 on t3 b3t3  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b3t4.c1)
+   ->  Nested Loop  (cost=xxx rows=100 width=4)
+         Join Filter: (bmt1.c1 = bmt4.c1)
+         ->  Hash Join  (cost=xxx rows=100 width=12)
+               Hash Cond: (bmt3.c1 = bmt1.c1)
+               ->  Seq Scan on t3 bmt3  (cost=xxx rows=1100 width=4)
+               ->  Hash  (cost=xxx rows=100 width=8)
+                     ->  Merge Join  (cost=xxx rows=100 width=8)
+                           Merge Cond: (bmt1.c1 = bmt2.c1)
+                           ->  Index Only Scan using t1_i1 on t1 bmt1  (cost=xxx rows=1000 width=4)
+                           ->  Sort  (cost=xxx rows=100 width=4)
+                                 Sort Key: bmt2.c1
+                                 ->  Seq Scan on t2 bmt2  (cost=xxx rows=100 width=4)
+         ->  Index Only Scan using t4_i1 on t4 bmt4  (cost=xxx rows=1 width=4)
+               Index Cond: (c1 = bmt3.c1)
+(58 rows)
+
+                                                     QUERY PLAN                                                     
+--------------------------------------------------------------------------------------------------------------------
+ Aggregate  (cost=xxx rows=1 width=4)
+   InitPlan 1 (returns $1)
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=1 width=4)
+                 Join Filter: (b1t2.c1 = b1t1.c1)
+                 ->  Hash Join  (cost=xxx rows=1 width=12)
+                       Hash Cond: (b1t4.c1 = b1t2.c1)
+                       ->  Seq Scan on t4 b1t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=100 width=8)
+                             ->  Merge Join  (cost=xxx rows=1 width=8)
+                                   Merge Cond: (b1t3.c1 = b1t2.c1)
+                                   ->  Index Only Scan using t3_i1 on t3 b1t3  (cost=xxx rows=1100 width=4)
+                                   ->  Sort  (cost=xxx rows=100 width=4)
+                                         Sort Key: b1t2.c1
+                                         ->  Seq Scan on t2 b1t2  (cost=xxx rows=100 width=4)
+                 ->  Index Only Scan using t1_i1 on t1 b1t1  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b1t3.c1)
+   InitPlan 2 (returns $3)
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=1 width=4)
+                 ->  Hash Join  (cost=xxx rows=1 width=12)
+                       Hash Cond: (b2t3.c1 = b2t1.c1)
+                       ->  Merge Join  (cost=xxx rows=1 width=8)
+                             Merge Cond: (b2t3.c1 = b2t4.c1)
+                             ->  Index Only Scan using t3_i1 on t3 b2t3  (cost=xxx rows=1100 width=4)
+                             ->  Index Only Scan using t4_i1 on t4 b2t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=1000 width=4)
+                             ->  Seq Scan on t1 b2t1  (cost=xxx rows=1000 width=4)
+                 ->  Index Only Scan using t2_i1 on t2 b2t2  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b2t1.c1)
+   InitPlan 3 (returns $5)
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=1 width=4)
+                 Join Filter: (b3t1.c1 = b3t3.c1)
+                 ->  Hash Join  (cost=xxx rows=1 width=12)
+                       Hash Cond: (b3t1.c1 = b3t2.c1)
+                       ->  Merge Join  (cost=xxx rows=1 width=8)
+                             Merge Cond: (b3t1.c1 = b3t4.c1)
+                             ->  Index Only Scan using t1_i1 on t1 b3t1  (cost=xxx rows=1000 width=4)
+                             ->  Index Only Scan using t4_i1 on t4 b3t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=100 width=4)
+                             ->  Seq Scan on t2 b3t2  (cost=xxx rows=100 width=4)
+                 ->  Index Only Scan using t3_i1 on t3 b3t3  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b3t4.c1)
+   ->  Nested Loop  (cost=xxx rows=1 width=4)
+         Join Filter: (bmt1.c1 = bmt4.c1)
+         ->  Hash Join  (cost=xxx rows=1 width=12)
+               Hash Cond: (bmt3.c1 = bmt1.c1)
+               ->  Seq Scan on t3 bmt3  (cost=xxx rows=1100 width=4)
+               ->  Hash  (cost=xxx rows=100 width=8)
+                     ->  Merge Join  (cost=xxx rows=1 width=8)
+                           Merge Cond: (bmt1.c1 = bmt2.c1)
+                           ->  Index Only Scan using t1_i1 on t1 bmt1  (cost=xxx rows=1000 width=4)
+                           ->  Sort  (cost=xxx rows=100 width=4)
+                                 Sort Key: bmt2.c1
+                                 ->  Seq Scan on t2 bmt2  (cost=xxx rows=100 width=4)
+         ->  Index Only Scan using t4_i1 on t4 bmt4  (cost=xxx rows=1 width=4)
+               Index Cond: (c1 = bmt3.c1)
+(58 rows)
+
diff --git a/expected/R_2-1-3.out b/expected/R_2-1-3.out
new file mode 100644 (file)
index 0000000..1c39755
--- /dev/null
@@ -0,0 +1,36 @@
+                                          QUERY PLAN                                           
+-----------------------------------------------------------------------------------------------
+ Aggregate  (cost=xxx rows=1 width=4)
+   ->  Merge Join  (cost=xxx rows=100 width=4)
+         Merge Cond: (bmt1.c1 = bmt2.c1)
+         ->  Index Only Scan using t1_i1 on t1 bmt1  (cost=xxx rows=1000 width=4)
+         ->  Sort  (cost=xxx rows=100 width=12)
+               Sort Key: bmt2.c1
+               ->  Hash Join  (cost=xxx rows=100 width=12)
+                     Hash Cond: (bmt3.c1 = bmt2.c1)
+                     ->  Hash Join  (cost=xxx rows=1100 width=8)
+                           Hash Cond: (bmt3.c1 = bmt4.c1)
+                           ->  Seq Scan on t3 bmt3  (cost=xxx rows=1100 width=4)
+                           ->  Hash  (cost=xxx rows=1100 width=4)
+                                 ->  Seq Scan on t4 bmt4  (cost=xxx rows=1100 width=4)
+                     ->  Hash  (cost=xxx rows=100 width=4)
+                           ->  Seq Scan on t2 bmt2  (cost=xxx rows=100 width=4)
+(15 rows)
+
+                                         QUERY PLAN                                         
+--------------------------------------------------------------------------------------------
+ Aggregate  (cost=xxx rows=1 width=4)
+   ->  Nested Loop  (cost=xxx rows=1 width=4)
+         Join Filter: (bmt2.c1 = bmt1.c1)
+         ->  Nested Loop  (cost=xxx rows=1 width=12)
+               ->  Hash Join  (cost=xxx rows=1 width=8)
+                     Hash Cond: (bmt3.c1 = bmt4.c1)
+                     ->  Seq Scan on t3 bmt3  (cost=xxx rows=1100 width=4)
+                     ->  Hash  (cost=xxx rows=1100 width=4)
+                           ->  Seq Scan on t4 bmt4  (cost=xxx rows=1100 width=4)
+               ->  Index Only Scan using t2_i1 on t2 bmt2  (cost=xxx rows=1 width=4)
+                     Index Cond: (c1 = bmt3.c1)
+         ->  Index Only Scan using t1_i1 on t1 bmt1  (cost=xxx rows=1 width=4)
+               Index Cond: (c1 = bmt3.c1)
+(13 rows)
+
diff --git a/expected/R_2-1-4.out b/expected/R_2-1-4.out
new file mode 100644 (file)
index 0000000..1c39755
--- /dev/null
@@ -0,0 +1,36 @@
+                                          QUERY PLAN                                           
+-----------------------------------------------------------------------------------------------
+ Aggregate  (cost=xxx rows=1 width=4)
+   ->  Merge Join  (cost=xxx rows=100 width=4)
+         Merge Cond: (bmt1.c1 = bmt2.c1)
+         ->  Index Only Scan using t1_i1 on t1 bmt1  (cost=xxx rows=1000 width=4)
+         ->  Sort  (cost=xxx rows=100 width=12)
+               Sort Key: bmt2.c1
+               ->  Hash Join  (cost=xxx rows=100 width=12)
+                     Hash Cond: (bmt3.c1 = bmt2.c1)
+                     ->  Hash Join  (cost=xxx rows=1100 width=8)
+                           Hash Cond: (bmt3.c1 = bmt4.c1)
+                           ->  Seq Scan on t3 bmt3  (cost=xxx rows=1100 width=4)
+                           ->  Hash  (cost=xxx rows=1100 width=4)
+                                 ->  Seq Scan on t4 bmt4  (cost=xxx rows=1100 width=4)
+                     ->  Hash  (cost=xxx rows=100 width=4)
+                           ->  Seq Scan on t2 bmt2  (cost=xxx rows=100 width=4)
+(15 rows)
+
+                                         QUERY PLAN                                         
+--------------------------------------------------------------------------------------------
+ Aggregate  (cost=xxx rows=1 width=4)
+   ->  Nested Loop  (cost=xxx rows=1 width=4)
+         Join Filter: (bmt2.c1 = bmt1.c1)
+         ->  Nested Loop  (cost=xxx rows=1 width=12)
+               ->  Hash Join  (cost=xxx rows=1 width=8)
+                     Hash Cond: (bmt3.c1 = bmt4.c1)
+                     ->  Seq Scan on t3 bmt3  (cost=xxx rows=1100 width=4)
+                     ->  Hash  (cost=xxx rows=1100 width=4)
+                           ->  Seq Scan on t4 bmt4  (cost=xxx rows=1100 width=4)
+               ->  Index Only Scan using t2_i1 on t2 bmt2  (cost=xxx rows=1 width=4)
+                     Index Cond: (c1 = bmt3.c1)
+         ->  Index Only Scan using t1_i1 on t1 bmt1  (cost=xxx rows=1 width=4)
+               Index Cond: (c1 = bmt3.c1)
+(13 rows)
+
diff --git a/expected/R_2-1-5.out b/expected/R_2-1-5.out
new file mode 100644 (file)
index 0000000..738d7b2
--- /dev/null
@@ -0,0 +1,98 @@
+                                                     QUERY PLAN                                                     
+--------------------------------------------------------------------------------------------------------------------
+ Aggregate  (cost=xxx rows=1 width=4)
+   InitPlan 1 (returns $1)
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=100 width=4)
+                 Join Filter: (b1t2.c1 = b1t1.c1)
+                 ->  Hash Join  (cost=xxx rows=100 width=12)
+                       Hash Cond: (b1t4.c1 = b1t2.c1)
+                       ->  Seq Scan on t4 b1t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=100 width=8)
+                             ->  Merge Join  (cost=xxx rows=100 width=8)
+                                   Merge Cond: (b1t3.c1 = b1t2.c1)
+                                   ->  Index Only Scan using t3_i1 on t3 b1t3  (cost=xxx rows=1100 width=4)
+                                   ->  Sort  (cost=xxx rows=100 width=4)
+                                         Sort Key: b1t2.c1
+                                         ->  Seq Scan on t2 b1t2  (cost=xxx rows=100 width=4)
+                 ->  Index Only Scan using t1_i1 on t1 b1t1  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b1t3.c1)
+   InitPlan 2 (returns $3)
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=100 width=4)
+                 ->  Hash Join  (cost=xxx rows=1000 width=12)
+                       Hash Cond: (b2t3.c1 = b2t1.c1)
+                       ->  Merge Join  (cost=xxx rows=1100 width=8)
+                             Merge Cond: (b2t3.c1 = b2t4.c1)
+                             ->  Index Only Scan using t3_i1 on t3 b2t3  (cost=xxx rows=1100 width=4)
+                             ->  Index Only Scan using t4_i1 on t4 b2t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=1000 width=4)
+                             ->  Seq Scan on t1 b2t1  (cost=xxx rows=1000 width=4)
+                 ->  Index Only Scan using t2_i1 on t2 b2t2  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b2t1.c1)
+   ->  Nested Loop  (cost=xxx rows=100 width=4)
+         Join Filter: (bmt1.c1 = bmt4.c1)
+         ->  Hash Join  (cost=xxx rows=100 width=12)
+               Hash Cond: (bmt3.c1 = bmt1.c1)
+               ->  Seq Scan on t3 bmt3  (cost=xxx rows=1100 width=4)
+               ->  Hash  (cost=xxx rows=100 width=8)
+                     ->  Merge Join  (cost=xxx rows=100 width=8)
+                           Merge Cond: (bmt1.c1 = bmt2.c1)
+                           ->  Index Only Scan using t1_i1 on t1 bmt1  (cost=xxx rows=998 width=4)
+                                 Filter: ((c1 <> $1) AND (c1 <> $3))
+                           ->  Sort  (cost=xxx rows=100 width=4)
+                                 Sort Key: bmt2.c1
+                                 ->  Seq Scan on t2 bmt2  (cost=xxx rows=100 width=4)
+         ->  Index Only Scan using t4_i1 on t4 bmt4  (cost=xxx rows=1 width=4)
+               Index Cond: (c1 = bmt3.c1)
+(45 rows)
+
+                                                     QUERY PLAN                                                     
+--------------------------------------------------------------------------------------------------------------------
+ Aggregate  (cost=xxx rows=1 width=4)
+   InitPlan 1 (returns $1)
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=1 width=4)
+                 Join Filter: (b1t2.c1 = b1t1.c1)
+                 ->  Hash Join  (cost=xxx rows=1 width=12)
+                       Hash Cond: (b1t4.c1 = b1t2.c1)
+                       ->  Seq Scan on t4 b1t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=100 width=8)
+                             ->  Merge Join  (cost=xxx rows=1 width=8)
+                                   Merge Cond: (b1t3.c1 = b1t2.c1)
+                                   ->  Index Only Scan using t3_i1 on t3 b1t3  (cost=xxx rows=1100 width=4)
+                                   ->  Sort  (cost=xxx rows=100 width=4)
+                                         Sort Key: b1t2.c1
+                                         ->  Seq Scan on t2 b1t2  (cost=xxx rows=100 width=4)
+                 ->  Index Only Scan using t1_i1 on t1 b1t1  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b1t3.c1)
+   InitPlan 2 (returns $3)
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=1 width=4)
+                 ->  Hash Join  (cost=xxx rows=1 width=12)
+                       Hash Cond: (b2t3.c1 = b2t1.c1)
+                       ->  Merge Join  (cost=xxx rows=1 width=8)
+                             Merge Cond: (b2t3.c1 = b2t4.c1)
+                             ->  Index Only Scan using t3_i1 on t3 b2t3  (cost=xxx rows=1100 width=4)
+                             ->  Index Only Scan using t4_i1 on t4 b2t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=1000 width=4)
+                             ->  Seq Scan on t1 b2t1  (cost=xxx rows=1000 width=4)
+                 ->  Index Only Scan using t2_i1 on t2 b2t2  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b2t1.c1)
+   ->  Nested Loop  (cost=xxx rows=1 width=4)
+         Join Filter: (bmt1.c1 = bmt4.c1)
+         ->  Hash Join  (cost=xxx rows=1 width=12)
+               Hash Cond: (bmt3.c1 = bmt1.c1)
+               ->  Seq Scan on t3 bmt3  (cost=xxx rows=1100 width=4)
+               ->  Hash  (cost=xxx rows=100 width=8)
+                     ->  Merge Join  (cost=xxx rows=1 width=8)
+                           Merge Cond: (bmt1.c1 = bmt2.c1)
+                           ->  Index Only Scan using t1_i1 on t1 bmt1  (cost=xxx rows=998 width=4)
+                                 Filter: ((c1 <> $1) AND (c1 <> $3))
+                           ->  Sort  (cost=xxx rows=100 width=4)
+                                 Sort Key: bmt2.c1
+                                 ->  Seq Scan on t2 bmt2  (cost=xxx rows=100 width=4)
+         ->  Index Only Scan using t4_i1 on t4 bmt4  (cost=xxx rows=1 width=4)
+               Index Cond: (c1 = bmt3.c1)
+(45 rows)
+
diff --git a/expected/R_2-1-6.out b/expected/R_2-1-6.out
new file mode 100644 (file)
index 0000000..8fe2e46
--- /dev/null
@@ -0,0 +1,126 @@
+                                                     QUERY PLAN                                                     
+--------------------------------------------------------------------------------------------------------------------
+ Aggregate  (cost=xxx rows=1 width=4)
+   InitPlan 1 (returns $1)
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=100 width=4)
+                 Join Filter: (b1t2.c1 = b1t1.c1)
+                 ->  Hash Join  (cost=xxx rows=100 width=12)
+                       Hash Cond: (b1t4.c1 = b1t2.c1)
+                       ->  Seq Scan on t4 b1t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=100 width=8)
+                             ->  Merge Join  (cost=xxx rows=100 width=8)
+                                   Merge Cond: (b1t3.c1 = b1t2.c1)
+                                   ->  Index Only Scan using t3_i1 on t3 b1t3  (cost=xxx rows=1100 width=4)
+                                   ->  Sort  (cost=xxx rows=100 width=4)
+                                         Sort Key: b1t2.c1
+                                         ->  Seq Scan on t2 b1t2  (cost=xxx rows=100 width=4)
+                 ->  Index Only Scan using t1_i1 on t1 b1t1  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b1t3.c1)
+   InitPlan 2 (returns $3)
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=100 width=4)
+                 ->  Hash Join  (cost=xxx rows=1000 width=12)
+                       Hash Cond: (b2t3.c1 = b2t1.c1)
+                       ->  Merge Join  (cost=xxx rows=1100 width=8)
+                             Merge Cond: (b2t3.c1 = b2t4.c1)
+                             ->  Index Only Scan using t3_i1 on t3 b2t3  (cost=xxx rows=1100 width=4)
+                             ->  Index Only Scan using t4_i1 on t4 b2t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=1000 width=4)
+                             ->  Seq Scan on t1 b2t1  (cost=xxx rows=1000 width=4)
+                 ->  Index Only Scan using t2_i1 on t2 b2t2  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b2t1.c1)
+   InitPlan 3 (returns $5)
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=100 width=4)
+                 Join Filter: (b3t1.c1 = b3t3.c1)
+                 ->  Hash Join  (cost=xxx rows=100 width=12)
+                       Hash Cond: (b3t1.c1 = b3t2.c1)
+                       ->  Merge Join  (cost=xxx rows=1000 width=8)
+                             Merge Cond: (b3t1.c1 = b3t4.c1)
+                             ->  Index Only Scan using t1_i1 on t1 b3t1  (cost=xxx rows=1000 width=4)
+                             ->  Index Only Scan using t4_i1 on t4 b3t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=100 width=4)
+                             ->  Seq Scan on t2 b3t2  (cost=xxx rows=100 width=4)
+                 ->  Index Only Scan using t3_i1 on t3 b3t3  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b3t4.c1)
+   ->  Nested Loop  (cost=xxx rows=100 width=4)
+         Join Filter: (bmt1.c1 = bmt4.c1)
+         ->  Hash Join  (cost=xxx rows=100 width=12)
+               Hash Cond: (bmt3.c1 = bmt1.c1)
+               ->  Seq Scan on t3 bmt3  (cost=xxx rows=1100 width=4)
+               ->  Hash  (cost=xxx rows=100 width=8)
+                     ->  Merge Join  (cost=xxx rows=100 width=8)
+                           Merge Cond: (bmt1.c1 = bmt2.c1)
+                           ->  Index Only Scan using t1_i1 on t1 bmt1  (cost=xxx rows=997 width=4)
+                                 Filter: ((c1 <> $1) AND (c1 <> $3) AND (c1 <> $5))
+                           ->  Sort  (cost=xxx rows=100 width=4)
+                                 Sort Key: bmt2.c1
+                                 ->  Seq Scan on t2 bmt2  (cost=xxx rows=100 width=4)
+         ->  Index Only Scan using t4_i1 on t4 bmt4  (cost=xxx rows=1 width=4)
+               Index Cond: (c1 = bmt3.c1)
+(59 rows)
+
+                                                     QUERY PLAN                                                     
+--------------------------------------------------------------------------------------------------------------------
+ Aggregate  (cost=xxx rows=1 width=4)
+   InitPlan 1 (returns $1)
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=1 width=4)
+                 Join Filter: (b1t2.c1 = b1t1.c1)
+                 ->  Hash Join  (cost=xxx rows=1 width=12)
+                       Hash Cond: (b1t4.c1 = b1t2.c1)
+                       ->  Seq Scan on t4 b1t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=100 width=8)
+                             ->  Merge Join  (cost=xxx rows=1 width=8)
+                                   Merge Cond: (b1t3.c1 = b1t2.c1)
+                                   ->  Index Only Scan using t3_i1 on t3 b1t3  (cost=xxx rows=1100 width=4)
+                                   ->  Sort  (cost=xxx rows=100 width=4)
+                                         Sort Key: b1t2.c1
+                                         ->  Seq Scan on t2 b1t2  (cost=xxx rows=100 width=4)
+                 ->  Index Only Scan using t1_i1 on t1 b1t1  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b1t3.c1)
+   InitPlan 2 (returns $3)
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=1 width=4)
+                 ->  Hash Join  (cost=xxx rows=1 width=12)
+                       Hash Cond: (b2t3.c1 = b2t1.c1)
+                       ->  Merge Join  (cost=xxx rows=1 width=8)
+                             Merge Cond: (b2t3.c1 = b2t4.c1)
+                             ->  Index Only Scan using t3_i1 on t3 b2t3  (cost=xxx rows=1100 width=4)
+                             ->  Index Only Scan using t4_i1 on t4 b2t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=1000 width=4)
+                             ->  Seq Scan on t1 b2t1  (cost=xxx rows=1000 width=4)
+                 ->  Index Only Scan using t2_i1 on t2 b2t2  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b2t1.c1)
+   InitPlan 3 (returns $5)
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=1 width=4)
+                 Join Filter: (b3t1.c1 = b3t3.c1)
+                 ->  Hash Join  (cost=xxx rows=1 width=12)
+                       Hash Cond: (b3t1.c1 = b3t2.c1)
+                       ->  Merge Join  (cost=xxx rows=1 width=8)
+                             Merge Cond: (b3t1.c1 = b3t4.c1)
+                             ->  Index Only Scan using t1_i1 on t1 b3t1  (cost=xxx rows=1000 width=4)
+                             ->  Index Only Scan using t4_i1 on t4 b3t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=100 width=4)
+                             ->  Seq Scan on t2 b3t2  (cost=xxx rows=100 width=4)
+                 ->  Index Only Scan using t3_i1 on t3 b3t3  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b3t4.c1)
+   ->  Nested Loop  (cost=xxx rows=1 width=4)
+         Join Filter: (bmt1.c1 = bmt4.c1)
+         ->  Hash Join  (cost=xxx rows=1 width=12)
+               Hash Cond: (bmt3.c1 = bmt1.c1)
+               ->  Seq Scan on t3 bmt3  (cost=xxx rows=1100 width=4)
+               ->  Hash  (cost=xxx rows=100 width=8)
+                     ->  Merge Join  (cost=xxx rows=1 width=8)
+                           Merge Cond: (bmt1.c1 = bmt2.c1)
+                           ->  Index Only Scan using t1_i1 on t1 bmt1  (cost=xxx rows=997 width=4)
+                                 Filter: ((c1 <> $1) AND (c1 <> $3) AND (c1 <> $5))
+                           ->  Sort  (cost=xxx rows=100 width=4)
+                                 Sort Key: bmt2.c1
+                                 ->  Seq Scan on t2 bmt2  (cost=xxx rows=100 width=4)
+         ->  Index Only Scan using t4_i1 on t4 bmt4  (cost=xxx rows=1 width=4)
+               Index Cond: (c1 = bmt3.c1)
+(59 rows)
+
diff --git a/expected/R_2-1-7.out b/expected/R_2-1-7.out
new file mode 100644 (file)
index 0000000..ec5eb00
--- /dev/null
@@ -0,0 +1,116 @@
+                                                     QUERY PLAN                                                     
+--------------------------------------------------------------------------------------------------------------------
+ Aggregate  (cost=xxx rows=1 width=4)
+   CTE c1
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=100 width=4)
+                 Join Filter: (b1t2.c1 = b1t1.c1)
+                 ->  Hash Join  (cost=xxx rows=100 width=12)
+                       Hash Cond: (b1t4.c1 = b1t2.c1)
+                       ->  Seq Scan on t4 b1t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=100 width=8)
+                             ->  Merge Join  (cost=xxx rows=100 width=8)
+                                   Merge Cond: (b1t3.c1 = b1t2.c1)
+                                   ->  Index Only Scan using t3_i1 on t3 b1t3  (cost=xxx rows=1100 width=4)
+                                   ->  Sort  (cost=xxx rows=100 width=4)
+                                         Sort Key: b1t2.c1
+                                         ->  Seq Scan on t2 b1t2  (cost=xxx rows=100 width=4)
+                 ->  Index Only Scan using t1_i1 on t1 b1t1  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b1t3.c1)
+   CTE c2
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=100 width=4)
+                 ->  Hash Join  (cost=xxx rows=1000 width=12)
+                       Hash Cond: (b2t3.c1 = b2t1.c1)
+                       ->  Merge Join  (cost=xxx rows=1100 width=8)
+                             Merge Cond: (b2t3.c1 = b2t4.c1)
+                             ->  Index Only Scan using t3_i1 on t3 b2t3  (cost=xxx rows=1100 width=4)
+                             ->  Index Only Scan using t4_i1 on t4 b2t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=1000 width=4)
+                             ->  Seq Scan on t1 b2t1  (cost=xxx rows=1000 width=4)
+                 ->  Index Only Scan using t2_i1 on t2 b2t2  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b2t1.c1)
+   ->  Hash Join  (cost=xxx rows=1 width=4)
+         Hash Cond: (bmt4.c1 = bmt1.c1)
+         ->  Seq Scan on t4 bmt4  (cost=xxx rows=1100 width=4)
+         ->  Hash  (cost=xxx rows=1 width=20)
+               ->  Merge Join  (cost=xxx rows=1 width=20)
+                     Merge Cond: (bmt3.c1 = bmt1.c1)
+                     ->  Index Only Scan using t3_i1 on t3 bmt3  (cost=xxx rows=1100 width=4)
+                     ->  Sort  (cost=xxx rows=1 width=16)
+                           Sort Key: bmt1.c1
+                           ->  Nested Loop  (cost=xxx rows=1 width=16)
+                                 ->  Hash Join  (cost=xxx rows=1 width=12)
+                                       Hash Cond: (bmt1.c1 = c1.c1)
+                                       ->  Seq Scan on t1 bmt1  (cost=xxx rows=1000 width=4)
+                                       ->  Hash  (cost=xxx rows=1 width=8)
+                                             ->  Merge Join  (cost=xxx rows=1 width=8)
+                                                   Merge Cond: (c1.c1 = c2.c1)
+                                                   ->  Sort  (cost=xxx rows=1 width=4)
+                                                         Sort Key: c1.c1
+                                                         ->  CTE Scan on c1  (cost=xxx rows=1 width=4)
+                                                   ->  Sort  (cost=xxx rows=1 width=4)
+                                                         Sort Key: c2.c1
+                                                         ->  CTE Scan on c2  (cost=xxx rows=1 width=4)
+                                 ->  Index Only Scan using t2_i1 on t2 bmt2  (cost=xxx rows=1 width=4)
+                                       Index Cond: (c1 = bmt1.c1)
+(54 rows)
+
+                                                     QUERY PLAN                                                     
+--------------------------------------------------------------------------------------------------------------------
+ Aggregate  (cost=xxx rows=1 width=4)
+   CTE c1
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=1 width=4)
+                 Join Filter: (b1t2.c1 = b1t1.c1)
+                 ->  Hash Join  (cost=xxx rows=1 width=12)
+                       Hash Cond: (b1t4.c1 = b1t2.c1)
+                       ->  Seq Scan on t4 b1t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=100 width=8)
+                             ->  Merge Join  (cost=xxx rows=1 width=8)
+                                   Merge Cond: (b1t3.c1 = b1t2.c1)
+                                   ->  Index Only Scan using t3_i1 on t3 b1t3  (cost=xxx rows=1100 width=4)
+                                   ->  Sort  (cost=xxx rows=100 width=4)
+                                         Sort Key: b1t2.c1
+                                         ->  Seq Scan on t2 b1t2  (cost=xxx rows=100 width=4)
+                 ->  Index Only Scan using t1_i1 on t1 b1t1  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b1t3.c1)
+   CTE c2
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=1 width=4)
+                 ->  Hash Join  (cost=xxx rows=1 width=12)
+                       Hash Cond: (b2t3.c1 = b2t1.c1)
+                       ->  Merge Join  (cost=xxx rows=1 width=8)
+                             Merge Cond: (b2t3.c1 = b2t4.c1)
+                             ->  Index Only Scan using t3_i1 on t3 b2t3  (cost=xxx rows=1100 width=4)
+                             ->  Index Only Scan using t4_i1 on t4 b2t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=1000 width=4)
+                             ->  Seq Scan on t1 b2t1  (cost=xxx rows=1000 width=4)
+                 ->  Index Only Scan using t2_i1 on t2 b2t2  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b2t1.c1)
+   ->  Hash Join  (cost=xxx rows=1 width=4)
+         Hash Cond: (bmt4.c1 = bmt1.c1)
+         ->  Seq Scan on t4 bmt4  (cost=xxx rows=1100 width=4)
+         ->  Hash  (cost=xxx rows=1 width=20)
+               ->  Merge Join  (cost=xxx rows=1 width=20)
+                     Merge Cond: (bmt3.c1 = bmt1.c1)
+                     ->  Index Only Scan using t3_i1 on t3 bmt3  (cost=xxx rows=1100 width=4)
+                     ->  Sort  (cost=xxx rows=1 width=16)
+                           Sort Key: bmt1.c1
+                           ->  Nested Loop  (cost=xxx rows=1 width=16)
+                                 ->  Hash Join  (cost=xxx rows=1 width=12)
+                                       Hash Cond: (bmt1.c1 = c1.c1)
+                                       ->  Seq Scan on t1 bmt1  (cost=xxx rows=1000 width=4)
+                                       ->  Hash  (cost=xxx rows=1 width=8)
+                                             ->  Merge Join  (cost=xxx rows=1 width=8)
+                                                   Merge Cond: (c1.c1 = c2.c1)
+                                                   ->  Sort  (cost=xxx rows=1 width=4)
+                                                         Sort Key: c1.c1
+                                                         ->  CTE Scan on c1  (cost=xxx rows=1 width=4)
+                                                   ->  Sort  (cost=xxx rows=1 width=4)
+                                                         Sort Key: c2.c1
+                                                         ->  CTE Scan on c2  (cost=xxx rows=1 width=4)
+                                 ->  Index Only Scan using t2_i1 on t2 bmt2  (cost=xxx rows=1 width=4)
+                                       Index Cond: (c1 = bmt1.c1)
+(54 rows)
+
diff --git a/expected/R_2-1-8.out b/expected/R_2-1-8.out
new file mode 100644 (file)
index 0000000..a3ad250
--- /dev/null
@@ -0,0 +1,156 @@
+                                                     QUERY PLAN                                                     
+--------------------------------------------------------------------------------------------------------------------
+ Aggregate  (cost=xxx rows=1 width=4)
+   CTE c1
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=100 width=4)
+                 Join Filter: (b1t2.c1 = b1t1.c1)
+                 ->  Hash Join  (cost=xxx rows=100 width=12)
+                       Hash Cond: (b1t4.c1 = b1t2.c1)
+                       ->  Seq Scan on t4 b1t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=100 width=8)
+                             ->  Merge Join  (cost=xxx rows=100 width=8)
+                                   Merge Cond: (b1t3.c1 = b1t2.c1)
+                                   ->  Index Only Scan using t3_i1 on t3 b1t3  (cost=xxx rows=1100 width=4)
+                                   ->  Sort  (cost=xxx rows=100 width=4)
+                                         Sort Key: b1t2.c1
+                                         ->  Seq Scan on t2 b1t2  (cost=xxx rows=100 width=4)
+                 ->  Index Only Scan using t1_i1 on t1 b1t1  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b1t3.c1)
+   CTE c2
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=100 width=4)
+                 ->  Hash Join  (cost=xxx rows=1000 width=12)
+                       Hash Cond: (b2t3.c1 = b2t1.c1)
+                       ->  Merge Join  (cost=xxx rows=1100 width=8)
+                             Merge Cond: (b2t3.c1 = b2t4.c1)
+                             ->  Index Only Scan using t3_i1 on t3 b2t3  (cost=xxx rows=1100 width=4)
+                             ->  Index Only Scan using t4_i1 on t4 b2t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=1000 width=4)
+                             ->  Seq Scan on t1 b2t1  (cost=xxx rows=1000 width=4)
+                 ->  Index Only Scan using t2_i1 on t2 b2t2  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b2t1.c1)
+   CTE c3
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=100 width=4)
+                 Join Filter: (b3t1.c1 = b3t3.c1)
+                 ->  Hash Join  (cost=xxx rows=100 width=12)
+                       Hash Cond: (b3t1.c1 = b3t2.c1)
+                       ->  Merge Join  (cost=xxx rows=1000 width=8)
+                             Merge Cond: (b3t1.c1 = b3t4.c1)
+                             ->  Index Only Scan using t1_i1 on t1 b3t1  (cost=xxx rows=1000 width=4)
+                             ->  Index Only Scan using t4_i1 on t4 b3t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=100 width=4)
+                             ->  Seq Scan on t2 b3t2  (cost=xxx rows=100 width=4)
+                 ->  Index Only Scan using t3_i1 on t3 b3t3  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b3t4.c1)
+   ->  Nested Loop  (cost=xxx rows=1 width=4)
+         Join Filter: (bmt1.c1 = bmt4.c1)
+         ->  Hash Join  (cost=xxx rows=1 width=24)
+               Hash Cond: (bmt3.c1 = bmt1.c1)
+               ->  Seq Scan on t3 bmt3  (cost=xxx rows=1100 width=4)
+               ->  Hash  (cost=xxx rows=1 width=20)
+                     ->  Merge Join  (cost=xxx rows=1 width=20)
+                           Merge Cond: (bmt1.c1 = bmt2.c1)
+                           ->  Sort  (cost=xxx rows=1 width=16)
+                                 Sort Key: bmt1.c1
+                                 ->  Nested Loop  (cost=xxx rows=1 width=16)
+                                       ->  Hash Join  (cost=xxx rows=1 width=12)
+                                             Hash Cond: (c2.c1 = c1.c1)
+                                             ->  Merge Join  (cost=xxx rows=1 width=8)
+                                                   Merge Cond: (c2.c1 = c3.c1)
+                                                   ->  Sort  (cost=xxx rows=1 width=4)
+                                                         Sort Key: c2.c1
+                                                         ->  CTE Scan on c2  (cost=xxx rows=1 width=4)
+                                                   ->  Sort  (cost=xxx rows=1 width=4)
+                                                         Sort Key: c3.c1
+                                                         ->  CTE Scan on c3  (cost=xxx rows=1 width=4)
+                                             ->  Hash  (cost=xxx rows=1 width=4)
+                                                   ->  CTE Scan on c1  (cost=xxx rows=1 width=4)
+                                       ->  Index Only Scan using t1_i1 on t1 bmt1  (cost=xxx rows=1 width=4)
+                                             Index Cond: (c1 = c1.c1)
+                           ->  Sort  (cost=xxx rows=100 width=4)
+                                 Sort Key: bmt2.c1
+                                 ->  Seq Scan on t2 bmt2  (cost=xxx rows=100 width=4)
+         ->  Index Only Scan using t4_i1 on t4 bmt4  (cost=xxx rows=1 width=4)
+               Index Cond: (c1 = bmt3.c1)
+(74 rows)
+
+                                                     QUERY PLAN                                                     
+--------------------------------------------------------------------------------------------------------------------
+ Aggregate  (cost=xxx rows=1 width=4)
+   CTE c1
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=1 width=4)
+                 Join Filter: (b1t2.c1 = b1t1.c1)
+                 ->  Hash Join  (cost=xxx rows=1 width=12)
+                       Hash Cond: (b1t4.c1 = b1t2.c1)
+                       ->  Seq Scan on t4 b1t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=100 width=8)
+                             ->  Merge Join  (cost=xxx rows=1 width=8)
+                                   Merge Cond: (b1t3.c1 = b1t2.c1)
+                                   ->  Index Only Scan using t3_i1 on t3 b1t3  (cost=xxx rows=1100 width=4)
+                                   ->  Sort  (cost=xxx rows=100 width=4)
+                                         Sort Key: b1t2.c1
+                                         ->  Seq Scan on t2 b1t2  (cost=xxx rows=100 width=4)
+                 ->  Index Only Scan using t1_i1 on t1 b1t1  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b1t3.c1)
+   CTE c2
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=1 width=4)
+                 ->  Hash Join  (cost=xxx rows=1 width=12)
+                       Hash Cond: (b2t3.c1 = b2t1.c1)
+                       ->  Merge Join  (cost=xxx rows=1 width=8)
+                             Merge Cond: (b2t3.c1 = b2t4.c1)
+                             ->  Index Only Scan using t3_i1 on t3 b2t3  (cost=xxx rows=1100 width=4)
+                             ->  Index Only Scan using t4_i1 on t4 b2t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=1000 width=4)
+                             ->  Seq Scan on t1 b2t1  (cost=xxx rows=1000 width=4)
+                 ->  Index Only Scan using t2_i1 on t2 b2t2  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b2t1.c1)
+   CTE c3
+     ->  Aggregate  (cost=xxx rows=1 width=4)
+           ->  Nested Loop  (cost=xxx rows=1 width=4)
+                 Join Filter: (b3t1.c1 = b3t3.c1)
+                 ->  Hash Join  (cost=xxx rows=1 width=12)
+                       Hash Cond: (b3t1.c1 = b3t2.c1)
+                       ->  Merge Join  (cost=xxx rows=1 width=8)
+                             Merge Cond: (b3t1.c1 = b3t4.c1)
+                             ->  Index Only Scan using t1_i1 on t1 b3t1  (cost=xxx rows=1000 width=4)
+                             ->  Index Only Scan using t4_i1 on t4 b3t4  (cost=xxx rows=1100 width=4)
+                       ->  Hash  (cost=xxx rows=100 width=4)
+                             ->  Seq Scan on t2 b3t2  (cost=xxx rows=100 width=4)
+                 ->  Index Only Scan using t3_i1 on t3 b3t3  (cost=xxx rows=1 width=4)
+                       Index Cond: (c1 = b3t4.c1)
+   ->  Nested Loop  (cost=xxx rows=1 width=4)
+         Join Filter: (bmt1.c1 = bmt4.c1)
+         ->  Hash Join  (cost=xxx rows=1 width=24)
+               Hash Cond: (bmt3.c1 = bmt1.c1)
+               ->  Seq Scan on t3 bmt3  (cost=xxx rows=1100 width=4)
+               ->  Hash  (cost=xxx rows=1 width=20)
+                     ->  Merge Join  (cost=xxx rows=1 width=20)
+                           Merge Cond: (bmt1.c1 = bmt2.c1)
+                           ->  Sort  (cost=xxx rows=1 width=16)
+                                 Sort Key: bmt1.c1
+                                 ->  Nested Loop  (cost=xxx rows=1 width=16)
+                                       ->  Hash Join  (cost=xxx rows=1 width=12)
+                                             Hash Cond: (c2.c1 = c1.c1)
+                                             ->  Merge Join  (cost=xxx rows=1 width=8)
+                                                   Merge Cond: (c2.c1 = c3.c1)
+                                                   ->  Sort  (cost=xxx rows=1 width=4)
+                                                         Sort Key: c2.c1
+                                                         ->  CTE Scan on c2  (cost=xxx rows=1 width=4)
+                                                   ->  Sort  (cost=xxx rows=1 width=4)
+                                                         Sort Key: c3.c1
+                                                         ->  CTE Scan on c3  (cost=xxx rows=1 width=4)
+                                             ->  Hash  (cost=xxx rows=1 width=4)
+                                                   ->  CTE Scan on c1  (cost=xxx rows=1 width=4)
+                                       ->  Index Only Scan using t1_i1 on t1 bmt1  (cost=xxx rows=1 width=4)
+                                             Index Cond: (c1 = c1.c1)
+                           ->  Sort  (cost=xxx rows=100 width=4)
+                                 Sort Key: bmt2.c1
+                                 ->  Seq Scan on t2 bmt2  (cost=xxx rows=100 width=4)
+         ->  Index Only Scan using t4_i1 on t4 bmt4  (cost=xxx rows=1 width=4)
+               Index Cond: (c1 = bmt3.c1)
+(74 rows)
+
index 2ca6fcf..4440157 100644 (file)
@@ -323,11 +323,11 @@ error hint:
 -- No. R-1-6-7
 \o results/R_1-6-7.out.log
 EXPLAIN SELECT * FROM s1.f1() t1, s1.f1() t2 WHERE t1.c1 = t2.c1;
-/*+Rows(t1 t2 #3)*/
+/*+Rows(t1 t2 #1)*/
 EXPLAIN SELECT * FROM s1.f1() t1, s1.f1() t2 WHERE t1.c1 = t2.c1;
 LOG:  pg_hint_plan:
 used hint:
-Rows(t1 t2 #3)
+Rows(t1 t2 #1)
 not used hint:
 duplication hint:
 error hint:
@@ -523,3 +523,680 @@ Rows(t1 t2 #notrows)
 \o
 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-7-3.out.log > results/R_1-7-3.out
 \! diff expected/R_1-7-3.out results/R_1-7-3.out
+----
+---- No. R-2-1 some complexity query blocks
+----
+-- No. R-2-1-1
+\o results/R_2-1-1.out.log
+/*+
+Leading(bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
+MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
+MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
+*/
+EXPLAIN
+SELECT max(bmt1.c1), (
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
+), (
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
+)
+                    FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
+;
+LOG:  pg_hint_plan:
+used hint:
+MergeJoin(b1t2 b1t3)
+MergeJoin(b2t3 b2t4)
+MergeJoin(bmt1 bmt2)
+HashJoin(b1t2 b1t3 b1t4)
+HashJoin(b2t1 b2t3 b2t4)
+HashJoin(bmt1 bmt2 bmt3)
+NestLoop(b1t1 b1t2 b1t3 b1t4)
+NestLoop(b2t1 b2t2 b2t3 b2t4)
+NestLoop(bmt1 bmt2 bmt3 bmt4)
+Leading(bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+not used hint:
+duplication hint:
+error hint:
+
+/*+
+Leading(bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
+MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
+MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
+Rows(bmt1 bmt2 #1)Rows(bmt1 bmt2 bmt3 #1)Rows(bmt1 bmt2 bmt3 bmt4 #1)
+Rows(b1t2 b1t3 #1)Rows(b1t2 b1t3 b1t4 #1)Rows(b1t2 b1t3 b1t4 b1t1 #1)
+Rows(b2t3 b2t4 #1)Rows(b2t3 b2t4 b2t1 #1)Rows(b2t3 b2t4 b2t1 b2t2 #1)
+*/
+EXPLAIN
+SELECT max(bmt1.c1), (
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
+), (
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1)
+                    FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
+;
+LOG:  pg_hint_plan:
+used hint:
+MergeJoin(b1t2 b1t3)
+MergeJoin(b2t3 b2t4)
+MergeJoin(bmt1 bmt2)
+HashJoin(b1t2 b1t3 b1t4)
+HashJoin(b2t1 b2t3 b2t4)
+HashJoin(bmt1 bmt2 bmt3)
+NestLoop(b1t1 b1t2 b1t3 b1t4)
+NestLoop(b2t1 b2t2 b2t3 b2t4)
+NestLoop(bmt1 bmt2 bmt3 bmt4)
+Leading(bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+Rows(b1t2 b1t3 #1)
+Rows(b2t3 b2t4 #1)
+Rows(bmt1 bmt2 #1)
+Rows(b1t2 b1t3 b1t4 #1)
+Rows(b2t1 b2t3 b2t4 #1)
+Rows(bmt1 bmt2 bmt3 #1)
+Rows(b1t1 b1t2 b1t3 b1t4 #1)
+Rows(b2t1 b2t2 b2t3 b2t4 #1)
+Rows(bmt1 bmt2 bmt3 bmt4 #1)
+not used hint:
+duplication hint:
+error hint:
+
+\o
+\! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-1.out.log > results/R_2-1-1.out
+\! diff expected/R_2-1-1.out results/R_2-1-1.out
+-- No. R-2-1-2
+\o results/R_2-1-2.out.log
+/*+
+Leading(bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+Leading(b3t4 b3t1 b3t2 b3t3)
+MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
+MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
+MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
+MergeJoin(b3t4 b3t1)HashJoin(b3t4 b3t1 b3t2)NestLoop(b3t1 b3t2 b3t3 b3t4)
+*/
+EXPLAIN
+SELECT max(bmt1.c1), (
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
+), (
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
+), (
+SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.c1 = b3t2.c1 AND b3t1.c1 = b3t3.c1 AND b3t1.c1 = b3t4.c1
+)
+                    FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
+;
+LOG:  pg_hint_plan:
+used hint:
+MergeJoin(b1t2 b1t3)
+MergeJoin(b2t3 b2t4)
+MergeJoin(b3t1 b3t4)
+MergeJoin(bmt1 bmt2)
+HashJoin(b1t2 b1t3 b1t4)
+HashJoin(b2t1 b2t3 b2t4)
+HashJoin(b3t1 b3t2 b3t4)
+HashJoin(bmt1 bmt2 bmt3)
+NestLoop(b1t1 b1t2 b1t3 b1t4)
+NestLoop(b2t1 b2t2 b2t3 b2t4)
+NestLoop(b3t1 b3t2 b3t3 b3t4)
+NestLoop(bmt1 bmt2 bmt3 bmt4)
+Leading(bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+Leading(b3t4 b3t1 b3t2 b3t3)
+not used hint:
+duplication hint:
+error hint:
+
+/*+
+Leading(bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+Leading(b3t4 b3t1 b3t2 b3t3)
+MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
+MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
+MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
+MergeJoin(b3t4 b3t1)HashJoin(b3t4 b3t1 b3t2)NestLoop(b3t1 b3t2 b3t3 b3t4)
+Rows(bmt1 bmt2 #1)Rows(bmt1 bmt2 bmt3 #1)Rows(bmt1 bmt2 bmt3 bmt4 #1)
+Rows(b1t2 b1t3 #1)Rows(b1t2 b1t3 b1t4 #1)Rows(b1t2 b1t3 b1t4 b1t1 #1)
+Rows(b2t3 b2t4 #1)Rows(b2t3 b2t4 b2t1 #1)Rows(b2t3 b2t4 b2t1 b2t2 #1)
+Rows(b3t4 b3t1 #1)Rows(b3t4 b3t1 b3t2 #1)Rows(b3t1 b3t2 b3t3 b3t4 #1)
+*/
+EXPLAIN
+SELECT max(bmt1.c1), (
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
+), (
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
+), (
+SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.c1 = b3t2.c1 AND b3t1.c1 = b3t3.c1 AND b3t1.c1 = b3t4.c1
+)
+                    FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
+;
+LOG:  pg_hint_plan:
+used hint:
+MergeJoin(b1t2 b1t3)
+MergeJoin(b2t3 b2t4)
+MergeJoin(b3t1 b3t4)
+MergeJoin(bmt1 bmt2)
+HashJoin(b1t2 b1t3 b1t4)
+HashJoin(b2t1 b2t3 b2t4)
+HashJoin(b3t1 b3t2 b3t4)
+HashJoin(bmt1 bmt2 bmt3)
+NestLoop(b1t1 b1t2 b1t3 b1t4)
+NestLoop(b2t1 b2t2 b2t3 b2t4)
+NestLoop(b3t1 b3t2 b3t3 b3t4)
+NestLoop(bmt1 bmt2 bmt3 bmt4)
+Leading(bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+Leading(b3t4 b3t1 b3t2 b3t3)
+Rows(b1t2 b1t3 #1)
+Rows(b2t3 b2t4 #1)
+Rows(b3t1 b3t4 #1)
+Rows(bmt1 bmt2 #1)
+Rows(b1t2 b1t3 b1t4 #1)
+Rows(b2t1 b2t3 b2t4 #1)
+Rows(b3t1 b3t2 b3t4 #1)
+Rows(bmt1 bmt2 bmt3 #1)
+Rows(b1t1 b1t2 b1t3 b1t4 #1)
+Rows(b2t1 b2t2 b2t3 b2t4 #1)
+Rows(b3t1 b3t2 b3t3 b3t4 #1)
+Rows(bmt1 bmt2 bmt3 bmt4 #1)
+not used hint:
+duplication hint:
+error hint:
+
+\o
+\! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-2.out.log > results/R_2-1-2.out
+\! diff expected/R_2-1-2.out results/R_2-1-2.out
+-- No. R-2-1-3
+\o results/R_2-1-3.out.log
+/*+
+Leading(bmt4 bmt3 bmt2 bmt1)
+*/
+EXPLAIN SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = sbmt3.c1 AND bmt1.c1 = sbmt4.c1;
+LOG:  pg_hint_plan:
+used hint:
+Leading(bmt4 bmt3 bmt2 bmt1)
+not used hint:
+duplication hint:
+error hint:
+
+/*+
+Leading(bmt4 bmt3 bmt2 bmt1)
+Rows(bmt4 bmt3 #1)Rows(bmt4 bmt3 bmt2 #1)Rows(bmt1 bmt2 bmt3 bmt4 #1)
+*/
+EXPLAIN SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = sbmt3.c1 AND bmt1.c1 = sbmt4.c1;
+LOG:  pg_hint_plan:
+used hint:
+Leading(bmt4 bmt3 bmt2 bmt1)
+Rows(bmt3 bmt4 #1)
+Rows(bmt2 bmt3 bmt4 #1)
+Rows(bmt1 bmt2 bmt3 bmt4 #1)
+not used hint:
+duplication hint:
+error hint:
+
+\o
+\! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-3.out.log > results/R_2-1-3.out
+\! diff expected/R_2-1-3.out results/R_2-1-3.out
+-- No. R-2-1-4
+\o results/R_2-1-4.out.log
+/*+
+Leading(bmt4 bmt3 bmt2 bmt1)
+*/
+EXPLAIN SELECT max(bmt1.c1) FROM s1.t1 bmt1, (SELECT ctid, * FROM s1.t2 bmt2) sbmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.c1 = sbmt2.c1 AND bmt1.c1 = sbmt3.c1 AND bmt1.c1 = sbmt4.c1;
+LOG:  pg_hint_plan:
+used hint:
+Leading(bmt4 bmt3 bmt2 bmt1)
+not used hint:
+duplication hint:
+error hint:
+
+/*+
+Leading(bmt4 bmt3 bmt2 bmt1)
+Rows(bmt4 bmt3 #1)Rows(bmt4 bmt3 bmt2 #1)Rows(bmt1 bmt2 bmt3 bmt4 #1)
+*/
+EXPLAIN SELECT max(bmt1.c1) FROM s1.t1 bmt1, (SELECT ctid, * FROM s1.t2 bmt2) sbmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.c1 = sbmt2.c1 AND bmt1.c1 = sbmt3.c1 AND bmt1.c1 = sbmt4.c1;
+LOG:  pg_hint_plan:
+used hint:
+Leading(bmt4 bmt3 bmt2 bmt1)
+Rows(bmt3 bmt4 #1)
+Rows(bmt2 bmt3 bmt4 #1)
+Rows(bmt1 bmt2 bmt3 bmt4 #1)
+not used hint:
+duplication hint:
+error hint:
+
+\o
+\! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-4.out.log > results/R_2-1-4.out
+\! diff expected/R_2-1-4.out results/R_2-1-4.out
+-- No. R-2-1-5
+\o results/R_2-1-5.out.log
+/*+
+Leading(bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
+MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
+MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
+*/
+EXPLAIN
+SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
+AND bmt1.c1 <> (
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
+) AND bmt1.c1 <> (
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
+)
+;
+LOG:  pg_hint_plan:
+used hint:
+MergeJoin(b1t2 b1t3)
+MergeJoin(b2t3 b2t4)
+MergeJoin(bmt1 bmt2)
+HashJoin(b1t2 b1t3 b1t4)
+HashJoin(b2t1 b2t3 b2t4)
+HashJoin(bmt1 bmt2 bmt3)
+NestLoop(b1t1 b1t2 b1t3 b1t4)
+NestLoop(b2t1 b2t2 b2t3 b2t4)
+NestLoop(bmt1 bmt2 bmt3 bmt4)
+Leading(bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+not used hint:
+duplication hint:
+error hint:
+
+/*+
+Leading(bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
+MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
+MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
+Rows(bmt1 bmt2 #1)Rows(bmt1 bmt2 bmt3 #1)Rows(bmt1 bmt2 bmt3 bmt4 #1)
+Rows(b1t2 b1t3 #1)Rows(b1t2 b1t3 b1t4 #1)Rows(b1t2 b1t3 b1t4 b1t1 #1)
+Rows(b2t3 b2t4 #1)Rows(b2t3 b2t4 b2t1 #1)Rows(b2t3 b2t4 b2t1 b2t2 #1)
+*/
+EXPLAIN
+SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
+AND bmt1.c1 <> (
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
+) AND bmt1.c1 <> (
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
+)
+;
+LOG:  pg_hint_plan:
+used hint:
+MergeJoin(b1t2 b1t3)
+MergeJoin(b2t3 b2t4)
+MergeJoin(bmt1 bmt2)
+HashJoin(b1t2 b1t3 b1t4)
+HashJoin(b2t1 b2t3 b2t4)
+HashJoin(bmt1 bmt2 bmt3)
+NestLoop(b1t1 b1t2 b1t3 b1t4)
+NestLoop(b2t1 b2t2 b2t3 b2t4)
+NestLoop(bmt1 bmt2 bmt3 bmt4)
+Leading(bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+Rows(b1t2 b1t3 #1)
+Rows(b2t3 b2t4 #1)
+Rows(bmt1 bmt2 #1)
+Rows(b1t2 b1t3 b1t4 #1)
+Rows(b2t1 b2t3 b2t4 #1)
+Rows(bmt1 bmt2 bmt3 #1)
+Rows(b1t1 b1t2 b1t3 b1t4 #1)
+Rows(b2t1 b2t2 b2t3 b2t4 #1)
+Rows(bmt1 bmt2 bmt3 bmt4 #1)
+not used hint:
+duplication hint:
+error hint:
+
+\o
+\! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-5.out.log > results/R_2-1-5.out
+\! diff expected/R_2-1-5.out results/R_2-1-5.out
+-- No. R-2-1-6
+\o results/R_2-1-6.out.log
+/*+
+Leading(bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+Leading(b3t4 b3t1 b3t2 b3t3)
+MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
+MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
+MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
+MergeJoin(b3t4 b3t1)HashJoin(b3t4 b3t1 b3t2)NestLoop(b3t1 b3t2 b3t3 b3t4)
+*/
+EXPLAIN
+SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
+  AND bmt1.c1 <> (
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
+) AND bmt1.c1 <> (
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
+) AND bmt1.c1 <> (
+SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.c1 = b3t2.c1 AND b3t1.c1 = b3t3.c1 AND b3t1.c1 = b3t4.c1
+)
+;
+LOG:  pg_hint_plan:
+used hint:
+MergeJoin(b1t2 b1t3)
+MergeJoin(b2t3 b2t4)
+MergeJoin(b3t1 b3t4)
+MergeJoin(bmt1 bmt2)
+HashJoin(b1t2 b1t3 b1t4)
+HashJoin(b2t1 b2t3 b2t4)
+HashJoin(b3t1 b3t2 b3t4)
+HashJoin(bmt1 bmt2 bmt3)
+NestLoop(b1t1 b1t2 b1t3 b1t4)
+NestLoop(b2t1 b2t2 b2t3 b2t4)
+NestLoop(b3t1 b3t2 b3t3 b3t4)
+NestLoop(bmt1 bmt2 bmt3 bmt4)
+Leading(bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+Leading(b3t4 b3t1 b3t2 b3t3)
+not used hint:
+duplication hint:
+error hint:
+
+/*+
+Leading(bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+Leading(b3t4 b3t1 b3t2 b3t3)
+MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
+MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
+MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
+MergeJoin(b3t4 b3t1)HashJoin(b3t4 b3t1 b3t2)NestLoop(b3t1 b3t2 b3t3 b3t4)
+Rows(bmt1 bmt2 #1)Rows(bmt1 bmt2 bmt3 #1)Rows(bmt1 bmt2 bmt3 bmt4 #1)
+Rows(b1t2 b1t3 #1)Rows(b1t2 b1t3 b1t4 #1)Rows(b1t2 b1t3 b1t4 b1t1 #1)
+Rows(b2t3 b2t4 #1)Rows(b2t3 b2t4 b2t1 #1)Rows(b2t3 b2t4 b2t1 b2t2 #1)
+Rows(b3t4 b3t1 #1)Rows(b3t4 b3t1 b3t2 #1)Rows(b3t1 b3t2 b3t3 b3t4 #1)
+*/
+EXPLAIN
+SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
+  AND bmt1.c1 <> (
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
+) AND bmt1.c1 <> (
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
+) AND bmt1.c1 <> (
+SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.c1 = b3t2.c1 AND b3t1.c1 = b3t3.c1 AND b3t1.c1 = b3t4.c1
+)
+;
+LOG:  pg_hint_plan:
+used hint:
+MergeJoin(b1t2 b1t3)
+MergeJoin(b2t3 b2t4)
+MergeJoin(b3t1 b3t4)
+MergeJoin(bmt1 bmt2)
+HashJoin(b1t2 b1t3 b1t4)
+HashJoin(b2t1 b2t3 b2t4)
+HashJoin(b3t1 b3t2 b3t4)
+HashJoin(bmt1 bmt2 bmt3)
+NestLoop(b1t1 b1t2 b1t3 b1t4)
+NestLoop(b2t1 b2t2 b2t3 b2t4)
+NestLoop(b3t1 b3t2 b3t3 b3t4)
+NestLoop(bmt1 bmt2 bmt3 bmt4)
+Leading(bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+Leading(b3t4 b3t1 b3t2 b3t3)
+Rows(b1t2 b1t3 #1)
+Rows(b2t3 b2t4 #1)
+Rows(b3t1 b3t4 #1)
+Rows(bmt1 bmt2 #1)
+Rows(b1t2 b1t3 b1t4 #1)
+Rows(b2t1 b2t3 b2t4 #1)
+Rows(b3t1 b3t2 b3t4 #1)
+Rows(bmt1 bmt2 bmt3 #1)
+Rows(b1t1 b1t2 b1t3 b1t4 #1)
+Rows(b2t1 b2t2 b2t3 b2t4 #1)
+Rows(b3t1 b3t2 b3t3 b3t4 #1)
+Rows(bmt1 bmt2 bmt3 bmt4 #1)
+not used hint:
+duplication hint:
+error hint:
+
+\o
+\! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-6.out.log > results/R_2-1-6.out
+\! diff expected/R_2-1-6.out results/R_2-1-6.out
+-- No. R-2-1-7
+\o results/R_2-1-7.out.log
+/*+
+Leading(c2 c1 bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+MergeJoin(c2 c1)HashJoin(c2 c1 bmt1)NestLoop(c2 c1 bmt1 bmt2)MergeJoin(c2 c1 bmt1 bmt2 bmt3)HashJoin(c2 c1 bmt1 bmt2 bmt3 bmt4)
+MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
+MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
+*/
+EXPLAIN
+WITH c1 (c1) AS (
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
+)
+, c2 (c1) AS (
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
+)
+SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4
+, c1, c2
+                                                                        WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
+AND bmt1.c1 = c1.c1
+AND bmt1.c1 = c2.c1
+;
+LOG:  pg_hint_plan:
+used hint:
+MergeJoin(b1t2 b1t3)
+MergeJoin(b2t3 b2t4)
+MergeJoin(c1 c2)
+HashJoin(b1t2 b1t3 b1t4)
+HashJoin(b2t1 b2t3 b2t4)
+HashJoin(bmt1 c1 c2)
+NestLoop(b1t1 b1t2 b1t3 b1t4)
+NestLoop(b2t1 b2t2 b2t3 b2t4)
+NestLoop(bmt1 bmt2 c1 c2)
+MergeJoin(bmt1 bmt2 bmt3 c1 c2)
+HashJoin(bmt1 bmt2 bmt3 bmt4 c1 c2)
+Leading(c2 c1 bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+not used hint:
+duplication hint:
+error hint:
+
+/*+
+Leading(c2 c1 bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+MergeJoin(c2 c1)HashJoin(c2 c1 bmt1)NestLoop(c2 c1 bmt1 bmt2)MergeJoin(c2 c1 bmt1 bmt2 bmt3)HashJoin(c2 c1 bmt1 bmt2 bmt3 bmt4)
+MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
+MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
+Rows(c2 c1 #1)Rows(c2 c1 bmt1 #1)Rows(c2 c1 bmt1 bmt2 #1)Rows(c2 c1 bmt1 bmt2 bmt3 #1)Rows(c2 c1 bmt1 bmt2 bmt3 bmt4 #1)
+Rows(b1t2 b1t3 #1)Rows(b1t2 b1t3 b1t4 #1)Rows(b1t2 b1t3 b1t4 b1t1 #1)
+Rows(b2t3 b2t4 #1)Rows(b2t3 b2t4 b2t1 #1)Rows(b2t3 b2t4 b2t1 b2t2 #1)
+*/
+EXPLAIN
+WITH c1 (c1) AS (
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
+)
+, c2 (c1) AS (
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
+)
+SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4
+, c1, c2
+                                                                        WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
+AND bmt1.c1 = c1.c1
+AND bmt1.c1 = c2.c1
+;
+LOG:  pg_hint_plan:
+used hint:
+MergeJoin(b1t2 b1t3)
+MergeJoin(b2t3 b2t4)
+MergeJoin(c1 c2)
+HashJoin(b1t2 b1t3 b1t4)
+HashJoin(b2t1 b2t3 b2t4)
+HashJoin(bmt1 c1 c2)
+NestLoop(b1t1 b1t2 b1t3 b1t4)
+NestLoop(b2t1 b2t2 b2t3 b2t4)
+NestLoop(bmt1 bmt2 c1 c2)
+MergeJoin(bmt1 bmt2 bmt3 c1 c2)
+HashJoin(bmt1 bmt2 bmt3 bmt4 c1 c2)
+Leading(c2 c1 bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+Rows(b1t2 b1t3 #1)
+Rows(b2t3 b2t4 #1)
+Rows(c1 c2 #1)
+Rows(b1t2 b1t3 b1t4 #1)
+Rows(b2t1 b2t3 b2t4 #1)
+Rows(bmt1 c1 c2 #1)
+Rows(b1t1 b1t2 b1t3 b1t4 #1)
+Rows(b2t1 b2t2 b2t3 b2t4 #1)
+Rows(bmt1 bmt2 c1 c2 #1)
+Rows(bmt1 bmt2 bmt3 c1 c2 #1)
+Rows(bmt1 bmt2 bmt3 bmt4 c1 c2 #1)
+not used hint:
+duplication hint:
+error hint:
+
+\o
+\! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-7.out.log > results/R_2-1-7.out
+\! diff expected/R_2-1-7.out results/R_2-1-7.out
+-- No. R-2-1-8
+\o results/R_2-1-8.out.log
+/*+
+Leading(c3 c2 c1 bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+Leading(b3t4 b3t1 b3t2 b3t3)
+MergeJoin(c3 c2)HashJoin(c3 c2 c1)NestLoop(c3 c2 c1 bmt1)MergeJoin(c3 c2 c1 bmt1 bmt2)HashJoin(c3 c2 c1 bmt1 bmt2 bmt3)NestLoop(c3 c2 c1 bmt1 bmt2 bmt3 bmt4)
+MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
+MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
+MergeJoin(b3t4 b3t1)HashJoin(b3t4 b3t1 b3t2)NestLoop(b3t1 b3t2 b3t3 b3t4)
+*/
+EXPLAIN
+WITH c1 (c1) AS (
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
+)
+, c2 (c1) AS (
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
+)
+, c3 (c1) AS (
+SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.c1 = b3t2.c1 AND b3t1.c1 = b3t3.c1 AND b3t1.c1 = b3t4.c1
+)
+SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4
+, c1, c2, c3
+                                                                        WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
+AND bmt1.c1 = c1.c1
+AND bmt1.c1 = c2.c1
+AND bmt1.c1 = c3.c1
+;
+LOG:  pg_hint_plan:
+used hint:
+MergeJoin(b1t2 b1t3)
+MergeJoin(b2t3 b2t4)
+MergeJoin(b3t1 b3t4)
+MergeJoin(c2 c3)
+HashJoin(b1t2 b1t3 b1t4)
+HashJoin(b2t1 b2t3 b2t4)
+HashJoin(b3t1 b3t2 b3t4)
+HashJoin(c1 c2 c3)
+NestLoop(b1t1 b1t2 b1t3 b1t4)
+NestLoop(b2t1 b2t2 b2t3 b2t4)
+NestLoop(b3t1 b3t2 b3t3 b3t4)
+NestLoop(bmt1 c1 c2 c3)
+MergeJoin(bmt1 bmt2 c1 c2 c3)
+HashJoin(bmt1 bmt2 bmt3 c1 c2 c3)
+NestLoop(bmt1 bmt2 bmt3 bmt4 c1 c2 c3)
+Leading(c3 c2 c1 bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+Leading(b3t4 b3t1 b3t2 b3t3)
+not used hint:
+duplication hint:
+error hint:
+
+/*+
+Leading(c3 c2 c1 bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+Leading(b3t4 b3t1 b3t2 b3t3)
+MergeJoin(c3 c2)HashJoin(c3 c2 c1)NestLoop(c3 c2 c1 bmt1)MergeJoin(c3 c2 c1 bmt1 bmt2)HashJoin(c3 c2 c1 bmt1 bmt2 bmt3)NestLoop(c3 c2 c1 bmt1 bmt2 bmt3 bmt4)
+MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
+MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
+MergeJoin(b3t4 b3t1)HashJoin(b3t4 b3t1 b3t2)NestLoop(b3t1 b3t2 b3t3 b3t4)
+Rows(c3 c2 #1)Rows(c3 c2 c1 #1)Rows(c3 c2 c1 bmt1 #1)Rows(c3 c2 c1 bmt1 bmt2 #1)Rows(c3 c2 c1 bmt1 bmt2 bmt3 #1)Rows(c3 c2 c1 bmt1 bmt2 bmt3 bmt4 #1)
+Rows(b1t2 b1t3 #1)Rows(b1t2 b1t3 b1t4 #1)Rows(b1t2 b1t3 b1t4 b1t1 #1)
+Rows(b2t3 b2t4 #1)Rows(b2t3 b2t4 b2t1 #1)Rows(b2t3 b2t4 b2t1 b2t2 #1)
+Rows(b3t4 b3t1 #1)Rows(b3t4 b3t1 b3t2 #1)Rows(b3t1 b3t2 b3t3 b3t4 #1)
+*/
+EXPLAIN
+WITH c1 (c1) AS (
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
+)
+, c2 (c1) AS (
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
+)
+, c3 (c1) AS (
+SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.c1 = b3t2.c1 AND b3t1.c1 = b3t3.c1 AND b3t1.c1 = b3t4.c1
+)
+SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4
+, c1, c2, c3
+                                                                        WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
+AND bmt1.c1 = c1.c1
+AND bmt1.c1 = c2.c1
+AND bmt1.c1 = c3.c1
+;
+LOG:  pg_hint_plan:
+used hint:
+MergeJoin(b1t2 b1t3)
+MergeJoin(b2t3 b2t4)
+MergeJoin(b3t1 b3t4)
+MergeJoin(c2 c3)
+HashJoin(b1t2 b1t3 b1t4)
+HashJoin(b2t1 b2t3 b2t4)
+HashJoin(b3t1 b3t2 b3t4)
+HashJoin(c1 c2 c3)
+NestLoop(b1t1 b1t2 b1t3 b1t4)
+NestLoop(b2t1 b2t2 b2t3 b2t4)
+NestLoop(b3t1 b3t2 b3t3 b3t4)
+NestLoop(bmt1 c1 c2 c3)
+MergeJoin(bmt1 bmt2 c1 c2 c3)
+HashJoin(bmt1 bmt2 bmt3 c1 c2 c3)
+NestLoop(bmt1 bmt2 bmt3 bmt4 c1 c2 c3)
+Leading(c3 c2 c1 bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+Leading(b3t4 b3t1 b3t2 b3t3)
+Rows(b1t2 b1t3 #1)
+Rows(b2t3 b2t4 #1)
+Rows(b3t1 b3t4 #1)
+Rows(c2 c3 #1)
+Rows(b1t2 b1t3 b1t4 #1)
+Rows(b2t1 b2t3 b2t4 #1)
+Rows(b3t1 b3t2 b3t4 #1)
+Rows(c1 c2 c3 #1)
+Rows(b1t1 b1t2 b1t3 b1t4 #1)
+Rows(b2t1 b2t2 b2t3 b2t4 #1)
+Rows(b3t1 b3t2 b3t3 b3t4 #1)
+Rows(bmt1 c1 c2 c3 #1)
+Rows(bmt1 bmt2 c1 c2 c3 #1)
+Rows(bmt1 bmt2 bmt3 c1 c2 c3 #1)
+Rows(bmt1 bmt2 bmt3 bmt4 c1 c2 c3 #1)
+not used hint:
+duplication hint:
+error hint:
+
+\o
+\! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-8.out.log > results/R_2-1-8.out
+\! diff expected/R_2-1-8.out results/R_2-1-8.out
+----
+---- No. R-2-2 the number of the tables per quiry block
+----
+-- No. R-2-2-1
index 7532d63..2647252 100644 (file)
@@ -203,7 +203,7 @@ EXPLAIN SELECT * FROM pg_catalog.pg_class t1, pg_catalog.pg_class t2 WHERE t1.oi
 -- No. R-1-6-7
 \o results/R_1-6-7.out.log
 EXPLAIN SELECT * FROM s1.f1() t1, s1.f1() t2 WHERE t1.c1 = t2.c1;
-/*+Rows(t1 t2 #3)*/
+/*+Rows(t1 t2 #1)*/
 EXPLAIN SELECT * FROM s1.f1() t1, s1.f1() t2 WHERE t1.c1 = t2.c1;
 \o
 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-6-7.out.log > results/R_1-6-7.out
@@ -292,13 +292,22 @@ EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
 ----
 
 -- No. R-2-1-1
-EXPLAIN (COSTS false)
+\o results/R_2-1-1.out.log
+/*+
+Leading(bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
+MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
+MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
+*/
+EXPLAIN
 SELECT max(bmt1.c1), (
-SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
 ), (
-SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
 )
-                    FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
+                    FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
 ;
 /*+
 Leading(bmt1 bmt2 bmt3 bmt4)
@@ -307,26 +316,42 @@ Leading(b2t3 b2t4 b2t1 b2t2)
 MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
+Rows(bmt1 bmt2 #1)Rows(bmt1 bmt2 bmt3 #1)Rows(bmt1 bmt2 bmt3 bmt4 #1)
+Rows(b1t2 b1t3 #1)Rows(b1t2 b1t3 b1t4 #1)Rows(b1t2 b1t3 b1t4 b1t1 #1)
+Rows(b2t3 b2t4 #1)Rows(b2t3 b2t4 b2t1 #1)Rows(b2t3 b2t4 b2t1 b2t2 #1)
 */
-EXPLAIN (COSTS false)
+EXPLAIN
 SELECT max(bmt1.c1), (
-SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
 ), (
-SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
-)
-                    FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1)
+                    FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
 ;
+\o
+\! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-1.out.log > results/R_2-1-1.out
+\! diff expected/R_2-1-1.out results/R_2-1-1.out
 
 -- No. R-2-1-2
-EXPLAIN (COSTS false)
+\o results/R_2-1-2.out.log
+/*+
+Leading(bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+Leading(b3t4 b3t1 b3t2 b3t3)
+MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
+MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
+MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
+MergeJoin(b3t4 b3t1)HashJoin(b3t4 b3t1 b3t2)NestLoop(b3t1 b3t2 b3t3 b3t4)
+*/
+EXPLAIN
 SELECT max(bmt1.c1), (
-SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
 ), (
-SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
 ), (
-SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)' AND b3t1.c1 = b3t3.c1 AND b3t3.ctid = '(1,1)' AND b3t1.c1 = b3t4.c1 AND b3t4.ctid = '(1,1)'
+SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.c1 = b3t2.c1 AND b3t1.c1 = b3t3.c1 AND b3t1.c1 = b3t4.c1
 )
-                    FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
+                    FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
 ;
 /*+
 Leading(bmt1 bmt2 bmt3 bmt4)
@@ -337,41 +362,71 @@ MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
 MergeJoin(b3t4 b3t1)HashJoin(b3t4 b3t1 b3t2)NestLoop(b3t1 b3t2 b3t3 b3t4)
+Rows(bmt1 bmt2 #1)Rows(bmt1 bmt2 bmt3 #1)Rows(bmt1 bmt2 bmt3 bmt4 #1)
+Rows(b1t2 b1t3 #1)Rows(b1t2 b1t3 b1t4 #1)Rows(b1t2 b1t3 b1t4 b1t1 #1)
+Rows(b2t3 b2t4 #1)Rows(b2t3 b2t4 b2t1 #1)Rows(b2t3 b2t4 b2t1 b2t2 #1)
+Rows(b3t4 b3t1 #1)Rows(b3t4 b3t1 b3t2 #1)Rows(b3t1 b3t2 b3t3 b3t4 #1)
 */
-EXPLAIN (COSTS false)
+EXPLAIN
 SELECT max(bmt1.c1), (
-SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
 ), (
-SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
 ), (
-SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)' AND b3t1.c1 = b3t3.c1 AND b3t3.ctid = '(1,1)' AND b3t1.c1 = b3t4.c1 AND b3t4.ctid = '(1,1)'
+SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.c1 = b3t2.c1 AND b3t1.c1 = b3t3.c1 AND b3t1.c1 = b3t4.c1
 )
-                    FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
+                    FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
 ;
+\o
+\! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-2.out.log > results/R_2-1-2.out
+\! diff expected/R_2-1-2.out results/R_2-1-2.out
 
 -- No. R-2-1-3
-EXPLAIN SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = sbmt3.c1 AND sbmt3.ctid = '(1,1)' AND bmt1.c1 = sbmt4.c1 AND sbmt4.ctid = '(1,1)';
+\o results/R_2-1-3.out.log
+/*+
+Leading(bmt4 bmt3 bmt2 bmt1)
+*/
+EXPLAIN SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = sbmt3.c1 AND bmt1.c1 = sbmt4.c1;
 /*+
 Leading(bmt4 bmt3 bmt2 bmt1)
-MergeJoin(bmt4 bmt3)HashJoin(bmt4 bmt3 bmt2)NestLoop(bmt1 bmt2 bmt3 bmt4)
+Rows(bmt4 bmt3 #1)Rows(bmt4 bmt3 bmt2 #1)Rows(bmt1 bmt2 bmt3 bmt4 #1)
 */
-EXPLAIN SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = sbmt3.c1 AND sbmt3.ctid = '(1,1)' AND bmt1.c1 = sbmt4.c1 AND sbmt4.ctid = '(1,1)';
+EXPLAIN SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = sbmt3.c1 AND bmt1.c1 = sbmt4.c1;
+\o
+\! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-3.out.log > results/R_2-1-3.out
+\! diff expected/R_2-1-3.out results/R_2-1-3.out
 
 -- No. R-2-1-4
-EXPLAIN SELECT max(bmt1.c1) FROM s1.t1 bmt1, (SELECT ctid, * FROM s1.t2 bmt2) sbmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = sbmt2.c1 AND sbmt2.ctid = '(1,1)' AND bmt1.c1 = sbmt3.c1 AND sbmt3.ctid = '(1,1)' AND bmt1.c1 = sbmt4.c1 AND sbmt4.ctid = '(1,1)';
+\o results/R_2-1-4.out.log
+/*+
+Leading(bmt4 bmt3 bmt2 bmt1)
+*/
+EXPLAIN SELECT max(bmt1.c1) FROM s1.t1 bmt1, (SELECT ctid, * FROM s1.t2 bmt2) sbmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.c1 = sbmt2.c1 AND bmt1.c1 = sbmt3.c1 AND bmt1.c1 = sbmt4.c1;
 /*+
 Leading(bmt4 bmt3 bmt2 bmt1)
-MergeJoin(bmt4 bmt3)HashJoin(bmt4 bmt3 bmt2)NestLoop(bmt1 bmt2 bmt3 bmt4)
+Rows(bmt4 bmt3 #1)Rows(bmt4 bmt3 bmt2 #1)Rows(bmt1 bmt2 bmt3 bmt4 #1)
 */
-EXPLAIN SELECT max(bmt1.c1) FROM s1.t1 bmt1, (SELECT ctid, * FROM s1.t2 bmt2) sbmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = sbmt2.c1 AND sbmt2.ctid = '(1,1)' AND bmt1.c1 = sbmt3.c1 AND sbmt3.ctid = '(1,1)' AND bmt1.c1 = sbmt4.c1 AND sbmt4.ctid = '(1,1)';
+EXPLAIN SELECT max(bmt1.c1) FROM s1.t1 bmt1, (SELECT ctid, * FROM s1.t2 bmt2) sbmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.c1 = sbmt2.c1 AND bmt1.c1 = sbmt3.c1 AND bmt1.c1 = sbmt4.c1;
+\o
+\! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-4.out.log > results/R_2-1-4.out
+\! diff expected/R_2-1-4.out results/R_2-1-4.out
 
 -- No. R-2-1-5
-EXPLAIN (COSTS false)
-SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
-  AND bmt1.c1 <> (
-SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
+\o results/R_2-1-5.out.log
+/*+
+Leading(bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
+MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
+MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
+*/
+EXPLAIN
+SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
+AND bmt1.c1 <> (
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
 ) AND bmt1.c1 <> (
-SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
 )
 ;
 /*+
@@ -381,25 +436,42 @@ Leading(b2t3 b2t4 b2t1 b2t2)
 MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
+Rows(bmt1 bmt2 #1)Rows(bmt1 bmt2 bmt3 #1)Rows(bmt1 bmt2 bmt3 bmt4 #1)
+Rows(b1t2 b1t3 #1)Rows(b1t2 b1t3 b1t4 #1)Rows(b1t2 b1t3 b1t4 b1t1 #1)
+Rows(b2t3 b2t4 #1)Rows(b2t3 b2t4 b2t1 #1)Rows(b2t3 b2t4 b2t1 b2t2 #1)
 */
-EXPLAIN (COSTS false)
-SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
-  AND bmt1.c1 <> (
-SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
+EXPLAIN
+SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
+AND bmt1.c1 <> (
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
 ) AND bmt1.c1 <> (
-SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
 )
 ;
+\o
+\! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-5.out.log > results/R_2-1-5.out
+\! diff expected/R_2-1-5.out results/R_2-1-5.out
 
 -- No. R-2-1-6
-EXPLAIN (COSTS false)
-SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
+\o results/R_2-1-6.out.log
+/*+
+Leading(bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+Leading(b3t4 b3t1 b3t2 b3t3)
+MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
+MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
+MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
+MergeJoin(b3t4 b3t1)HashJoin(b3t4 b3t1 b3t2)NestLoop(b3t1 b3t2 b3t3 b3t4)
+*/
+EXPLAIN
+SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
   AND bmt1.c1 <> (
-SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
 ) AND bmt1.c1 <> (
-SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
 ) AND bmt1.c1 <> (
-SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)' AND b3t1.c1 = b3t3.c1 AND b3t3.ctid = '(1,1)' AND b3t1.c1 = b3t4.c1 AND b3t4.ctid = '(1,1)'
+SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.c1 = b3t2.c1 AND b3t1.c1 = b3t3.c1 AND b3t1.c1 = b3t4.c1
 )
 ;
 /*+
@@ -411,29 +483,45 @@ MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
 MergeJoin(b3t4 b3t1)HashJoin(b3t4 b3t1 b3t2)NestLoop(b3t1 b3t2 b3t3 b3t4)
+Rows(bmt1 bmt2 #1)Rows(bmt1 bmt2 bmt3 #1)Rows(bmt1 bmt2 bmt3 bmt4 #1)
+Rows(b1t2 b1t3 #1)Rows(b1t2 b1t3 b1t4 #1)Rows(b1t2 b1t3 b1t4 b1t1 #1)
+Rows(b2t3 b2t4 #1)Rows(b2t3 b2t4 b2t1 #1)Rows(b2t3 b2t4 b2t1 b2t2 #1)
+Rows(b3t4 b3t1 #1)Rows(b3t4 b3t1 b3t2 #1)Rows(b3t1 b3t2 b3t3 b3t4 #1)
 */
-EXPLAIN (COSTS false)
-SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
+EXPLAIN
+SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
   AND bmt1.c1 <> (
-SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
 ) AND bmt1.c1 <> (
-SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
 ) AND bmt1.c1 <> (
-SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)' AND b3t1.c1 = b3t3.c1 AND b3t3.ctid = '(1,1)' AND b3t1.c1 = b3t4.c1 AND b3t4.ctid = '(1,1)'
+SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.c1 = b3t2.c1 AND b3t1.c1 = b3t3.c1 AND b3t1.c1 = b3t4.c1
 )
 ;
+\o
+\! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-6.out.log > results/R_2-1-6.out
+\! diff expected/R_2-1-6.out results/R_2-1-6.out
 
 -- No. R-2-1-7
-EXPLAIN (COSTS false)
+\o results/R_2-1-7.out.log
+/*+
+Leading(c2 c1 bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+MergeJoin(c2 c1)HashJoin(c2 c1 bmt1)NestLoop(c2 c1 bmt1 bmt2)MergeJoin(c2 c1 bmt1 bmt2 bmt3)HashJoin(c2 c1 bmt1 bmt2 bmt3 bmt4)
+MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
+MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
+*/
+EXPLAIN
 WITH c1 (c1) AS (
-SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
 )
 , c2 (c1) AS (
-SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
 )
 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4
 , c1, c2
-                                                                        WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
+                                                                        WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
 AND bmt1.c1 = c1.c1
 AND bmt1.c1 = c2.c1
 ;
@@ -444,35 +532,52 @@ Leading(b2t3 b2t4 b2t1 b2t2)
 MergeJoin(c2 c1)HashJoin(c2 c1 bmt1)NestLoop(c2 c1 bmt1 bmt2)MergeJoin(c2 c1 bmt1 bmt2 bmt3)HashJoin(c2 c1 bmt1 bmt2 bmt3 bmt4)
 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
+Rows(c2 c1 #1)Rows(c2 c1 bmt1 #1)Rows(c2 c1 bmt1 bmt2 #1)Rows(c2 c1 bmt1 bmt2 bmt3 #1)Rows(c2 c1 bmt1 bmt2 bmt3 bmt4 #1)
+Rows(b1t2 b1t3 #1)Rows(b1t2 b1t3 b1t4 #1)Rows(b1t2 b1t3 b1t4 b1t1 #1)
+Rows(b2t3 b2t4 #1)Rows(b2t3 b2t4 b2t1 #1)Rows(b2t3 b2t4 b2t1 b2t2 #1)
 */
-EXPLAIN (COSTS false)
+EXPLAIN
 WITH c1 (c1) AS (
-SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
 )
 , c2 (c1) AS (
-SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
 )
 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4
 , c1, c2
-                                                                        WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
+                                                                        WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
 AND bmt1.c1 = c1.c1
 AND bmt1.c1 = c2.c1
 ;
+\o
+\! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-7.out.log > results/R_2-1-7.out
+\! diff expected/R_2-1-7.out results/R_2-1-7.out
 
 -- No. R-2-1-8
-EXPLAIN (COSTS false)
+\o results/R_2-1-8.out.log
+/*+
+Leading(c3 c2 c1 bmt1 bmt2 bmt3 bmt4)
+Leading(b1t2 b1t3 b1t4 b1t1)
+Leading(b2t3 b2t4 b2t1 b2t2)
+Leading(b3t4 b3t1 b3t2 b3t3)
+MergeJoin(c3 c2)HashJoin(c3 c2 c1)NestLoop(c3 c2 c1 bmt1)MergeJoin(c3 c2 c1 bmt1 bmt2)HashJoin(c3 c2 c1 bmt1 bmt2 bmt3)NestLoop(c3 c2 c1 bmt1 bmt2 bmt3 bmt4)
+MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
+MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
+MergeJoin(b3t4 b3t1)HashJoin(b3t4 b3t1 b3t2)NestLoop(b3t1 b3t2 b3t3 b3t4)
+*/
+EXPLAIN
 WITH c1 (c1) AS (
-SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
 )
 , c2 (c1) AS (
-SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
 )
 , c3 (c1) AS (
-SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)' AND b3t1.c1 = b3t3.c1 AND b3t3.ctid = '(1,1)' AND b3t1.c1 = b3t4.c1 AND b3t4.ctid = '(1,1)'
+SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.c1 = b3t2.c1 AND b3t1.c1 = b3t3.c1 AND b3t1.c1 = b3t4.c1
 )
 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4
 , c1, c2, c3
-                                                                        WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
+                                                                        WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
 AND bmt1.c1 = c1.c1
 AND bmt1.c1 = c2.c1
 AND bmt1.c1 = c3.c1
@@ -486,348 +591,34 @@ MergeJoin(c3 c2)HashJoin(c3 c2 c1)NestLoop(c3 c2 c1 bmt1)MergeJoin(c3 c2 c1 bmt1
 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
 MergeJoin(b3t4 b3t1)HashJoin(b3t4 b3t1 b3t2)NestLoop(b3t1 b3t2 b3t3 b3t4)
+Rows(c3 c2 #1)Rows(c3 c2 c1 #1)Rows(c3 c2 c1 bmt1 #1)Rows(c3 c2 c1 bmt1 bmt2 #1)Rows(c3 c2 c1 bmt1 bmt2 bmt3 #1)Rows(c3 c2 c1 bmt1 bmt2 bmt3 bmt4 #1)
+Rows(b1t2 b1t3 #1)Rows(b1t2 b1t3 b1t4 #1)Rows(b1t2 b1t3 b1t4 b1t1 #1)
+Rows(b2t3 b2t4 #1)Rows(b2t3 b2t4 b2t1 #1)Rows(b2t3 b2t4 b2t1 b2t2 #1)
+Rows(b3t4 b3t1 #1)Rows(b3t4 b3t1 b3t2 #1)Rows(b3t1 b3t2 b3t3 b3t4 #1)
 */
-EXPLAIN (COSTS false)
+EXPLAIN
 WITH c1 (c1) AS (
-SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
+SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
 )
 , c2 (c1) AS (
-SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
+SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
 )
 , c3 (c1) AS (
-SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)' AND b3t1.c1 = b3t3.c1 AND b3t3.ctid = '(1,1)' AND b3t1.c1 = b3t4.c1 AND b3t4.ctid = '(1,1)'
+SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.c1 = b3t2.c1 AND b3t1.c1 = b3t3.c1 AND b3t1.c1 = b3t4.c1
 )
 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4
 , c1, c2, c3
-                                                                        WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
+                                                                        WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
 AND bmt1.c1 = c1.c1
 AND bmt1.c1 = c2.c1
 AND bmt1.c1 = c3.c1
 ;
+\o
+\! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-8.out.log > results/R_2-1-8.out
+\! diff expected/R_2-1-8.out results/R_2-1-8.out
 
 ----
 ---- No. R-2-2 the number of the tables per quiry block
 ----
 
 -- No. R-2-2-1
-EXPLAIN (COSTS false)
-WITH c1 (c1) AS (
-SELECT max(b1t1.c1) FROM s1.t1 b1t1 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = 1
-)
-SELECT max(bmt1.c1), (
-SELECT max(b2t1.c1) FROM s1.t1 b2t1 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = 1
-)
-                    FROM s1.t1 bmt1, c1 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = 1
-AND bmt1.c1 = c1.c1
-AND bmt1.c1 <> (
-SELECT max(b3t1.c1) FROM s1.t1 b3t1 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = 1
-)
-;
-/*+
-Leading(c1 bmt1)
-HashJoin(bmt1 c1)
-HashJoin(b1t1 c1)
-HashJoin(b2t1 c1)
-HashJoin(b3t1 c1)
-*/
-EXPLAIN (COSTS false)
-WITH c1 (c1) AS (
-SELECT max(b1t1.c1) FROM s1.t1 b1t1 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = 1
-)
-SELECT max(bmt1.c1), (
-SELECT max(b2t1.c1) FROM s1.t1 b2t1 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = 1
-)
-                    FROM s1.t1 bmt1, c1 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = 1
-AND bmt1.c1 = c1.c1
-AND bmt1.c1 <> (
-SELECT max(b3t1.c1) FROM s1.t1 b3t1 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = 1
-)
-;
-
--- No. R-2-2-2
-EXPLAIN (COSTS false)
-WITH c1 (c1) AS (
-SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)'
-)
-SELECT max(bmt1.c1), (
-SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)'
-)
-                    FROM s1.t1 bmt1, s1.t2 bmt2, c1 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)'
-AND bmt1.c1 = c1.c1
-AND bmt1.c1 <> (
-SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)'
-)
-;
-/*+
-Leading(c1 bmt2 bmt1)
-Leading(b1t2 b1t1)
-Leading(b2t2 b2t1)
-Leading(b3t2 b3t1)
-MergeJoin(c1 bmt2)
-HashJoin(c1 bmt1 bmt2)
-MergeJoin(b1t1 b1t2)
-MergeJoin(b2t1 b2t2)
-MergeJoin(b3t1 b3t2)
-*/
-EXPLAIN (COSTS false)
-WITH c1 (c1) AS (
-SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)'
-)
-SELECT max(bmt1.c1), (
-SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)'
-)
-                    FROM s1.t1 bmt1, s1.t2 bmt2, c1 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)'
-AND bmt1.c1 = c1.c1
-AND bmt1.c1 <> (
-SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)'
-)
-;
-
--- No. R-2-2-3
-EXPLAIN (COSTS false)
-WITH c1 (c1) AS (
-SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
-)
-SELECT max(bmt1.c1), (
-SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
-)
-                    FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4, c1 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)' AND bmt1.c1 = c1.c1
-AND bmt1.c1 <> (
-SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)' AND b3t1.c1 = b3t3.c1 AND b3t3.ctid = '(1,1)' AND b3t1.c1 = b3t4.c1 AND b3t4.ctid = '(1,1)'
-)
-;
-/*+
-Leading(c1 bmt4 bmt3 bmt2 bmt1)
-Leading(b1t4 b1t3 b1t2 b1t1) 
-Leading(b2t4 b2t3 b2t2 b2t1)
-Leading(b3t4 b3t3 b3t2 b3t1)
-MergeJoin(c1 bmt4)
-HashJoin(c1 bmt4 bmt3)
-NestLoop(c1 bmt4 bmt3 bmt2)
-MergeJoin(c1 bmt4 bmt3 bmt2 bmt1)
-HashJoin(b1t4 b1t3)
-NestLoop(b1t4 b1t3 b1t2)
-MergeJoin(b1t4 b1t3 b1t2 b1t1)
-HashJoin(b2t4 b2t3)
-NestLoop(b2t4 b2t3 b2t2)
-MergeJoin(b2t4 b2t3 b2t2 b2t1)
-HashJoin(b3t4 b3t3)
-NestLoop(b3t4 b3t3 b3t2)
-MergeJoin(b3t4 b3t3 b3t2 b3t1)
-*/
-EXPLAIN (COSTS false)
-WITH c1 (c1) AS (
-SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
-)
-SELECT max(bmt1.c1), (
-SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
-)
-                    FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4, c1 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)' AND bmt1.c1 = c1.c1
-AND bmt1.c1 <> (
-SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)' AND b3t1.c1 = b3t3.c1 AND b3t3.ctid = '(1,1)' AND b3t1.c1 = b3t4.c1 AND b3t4.ctid = '(1,1)'
-)
-;
-
--- No. R-2-2-4
-EXPLAIN (COSTS false)
-WITH c1 (c1) AS (
-SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
-)
-SELECT max(bmt1.c1), (
-SELECT max(b2t1.c1) FROM s1.t1 b2t1 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = 1
-)
-                    FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4, c1 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)' AND bmt1.c1 = c1.c1
-AND bmt1.c1 <> (
-SELECT max(b3t1.c1) FROM s1.t1 b3t1 WHERE b3t1.ctid = '(1,1)'
-)
-;
-/*+
-Leading(c1 bmt4 bmt3 bmt2 bmt1)
-Leading(b1t4 b1t3 b1t2 b1t1)
-MergeJoin(c1 bmt4)
-HashJoin(c1 bmt4 bmt3)
-NestLoop(c1 bmt4 bmt3 bmt2)
-MergeJoin(c1 bmt4 bmt3 bmt2 bmt1)
-MergeJoin(b1t4 b1t3)
-HashJoin(b1t4 b1t3 b1t2)
-NestLoop(b1t4 b1t3 b1t2 b1t1)
-*/
-EXPLAIN (COSTS false)
-WITH c1 (c1) AS (
-SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = b1t2.c1 AND b1t2.ctid = '(1,1)' AND b1t1.c1 = b1t3.c1 AND b1t3.ctid = '(1,1)' AND b1t1.c1 = b1t4.c1 AND b1t4.ctid = '(1,1)'
-)
-SELECT max(bmt1.c1), (
-SELECT max(b2t1.c1) FROM s1.t1 b2t1 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = 1
-)
-                    FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4, c1 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)' AND bmt1.c1 = c1.c1
-AND bmt1.c1 <> (
-SELECT max(b3t1.c1) FROM s1.t1 b3t1 WHERE b3t1.ctid = '(1,1)'
-)
-;
-
-----
----- No. R-2-3 RULE or VIEW
-----
-
--- No. R-2-3-1
-EXPLAIN UPDATE s1.r1 SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
-/*+
-Leading(t4 t3 t2 t1 r1)
-MergeJoin(t4 t3 t2 t1 r1)
-HashJoin(t4 t3 t2 t1)
-NestLoop(t4 t3 t2)
-MergeJoin(t4 t3)
-*/
-EXPLAIN UPDATE s1.r1 SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
-EXPLAIN UPDATE s1.r1_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
-/*+
-Leading(b1t4 b1t3 b1t2 b1t1 r1_)
-MergeJoin(b1t4 b1t3 b1t2 b1t1 r1_)
-HashJoin(b1t4 b1t3 b1t2 b1t1)
-NestLoop(b1t4 b1t3 b1t2)
-MergeJoin(b1t4 b1t3)
-*/
-EXPLAIN UPDATE s1.r1_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
-
--- No. R-2-3-2
-EXPLAIN UPDATE s1.r2 SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
-/*+
-Leading(t4 t3 t2 t1 r2)
-MergeJoin(t4 t3 t2 t1 r2)
-HashJoin(t4 t3 t2 t1)
-NestLoop(t4 t3 t2)
-MergeJoin(t4 t3)
-*/
-EXPLAIN UPDATE s1.r2 SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
-EXPLAIN UPDATE s1.r2_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
-/*+
-Leading(b1t1 b1t2 b1t3 b1t4 r2_)
-Leading(b2t1 b2t2 b2t3 b2t4 r2_)
-MergeJoin(b1t1 b1t2)
-HashJoin(b1t1 b1t2 b1t3)
-NestLoop(b1t1 b1t2 b1t3 b1t4)
-MergeJoin(b1t1 b1t2 b1t3 b1t4 r2_)
-MergeJoin(b2t1 b2t2)
-HashJoin(b2t1 b2t2 b2t3)
-NestLoop(b2t1 b2t2 b2t3 b2t4)
-MergeJoin(b2t1 b2t2 b2t3 b2t4 r2_)
-*/
-EXPLAIN UPDATE s1.r2_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
-
--- No. R-2-3-3
-EXPLAIN UPDATE s1.r3 SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
-/*+
-Leading(t4 t3 t2 t1 r3)
-MergeJoin(t4 t3 t2 t1 r3)
-HashJoin(t4 t3 t2 t1)
-NestLoop(t4 t3 t2)
-MergeJoin(t4 t3)
-*/
-EXPLAIN UPDATE s1.r3 SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
-EXPLAIN UPDATE s1.r3_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
-/*+
-Leading(b1t1 b1t2 b1t3 b1t4 r3_)
-Leading(b2t1 b2t2 b2t3 b2t4 r3_)
-Leading(b3t1 b3t2 b3t3 b3t4 r3_)
-MergeJoin(b1t1 b1t2)
-HashJoin(b1t1 b1t2 b1t3)
-NestLoop(b1t1 b1t2 b1t3 b1t4)
-MergeJoin(b1t1 b1t2 b1t3 b1t4 r3_)
-MergeJoin(b2t1 b2t2)
-HashJoin(b2t1 b2t2 b2t3)
-NestLoop(b2t1 b2t2 b2t3 b2t4)
-MergeJoin(b2t1 b2t2 b2t3 b2t4 r3_)
-MergeJoin(b3t1 b3t2)
-HashJoin(b3t1 b3t2 b3t3)
-NestLoop(b3t1 b3t2 b3t3 b3t4)
-MergeJoin(b3t1 b3t2 b3t3 b3t4 r3_)
-*/
-EXPLAIN UPDATE s1.r3_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
-
--- No. R-2-3-4
-EXPLAIN SELECT * FROM s1.v1 v1, s1.v1 v2 WHERE v1.c1 = v2.c1;
-/*+(v1t1 v1t1)*/
-EXPLAIN SELECT * FROM s1.v1 v1, s1.v1 v2 WHERE v1.c1 = v2.c1;
-
--- No. R-2-3-5
-EXPLAIN SELECT * FROM s1.v1 v1, s1.v1_ v2 WHERE v1.c1 = v2.c1;
-/*+(v1t1 v1t1_)*/
-EXPLAIN SELECT * FROM s1.v1 v1, s1.v1_ v2 WHERE v1.c1 = v2.c1;
-
--- No. R-2-3-6
-EXPLAIN SELECT * FROM s1.r4 t1, s1.r4 t2 WHERE t1.c1 = t2.c1;
-/*+(r4t1 r4t1)*/
-EXPLAIN SELECT * FROM s1.r4 t1, s1.r4 t2 WHERE t1.c1 = t2.c1;
-
--- No. R-2-3-7
-EXPLAIN SELECT * FROM s1.r4 t1, s1.r5 t2 WHERE t1.c1 = t2.c1;
-/*+(r4t1 r5t1)*/
-EXPLAIN SELECT * FROM s1.r4 t1, s1.r5 t2 WHERE t1.c1 = t2.c1;
-
-----
----- No. R-2-4 VALUES clause
-----
-
--- No. R-2-4-1
-EXPLAIN SELECT * FROM s1.t1, s1.t2, (VALUES(1,1,1,'1')) AS t3 (c1, c2, c3, c4) WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1;
-/*+ Leading(t3 t1 t2) (t3 t1)(t3 t1 t2)*/
-EXPLAIN SELECT * FROM s1.t1, s1.t2, (VALUES(1,1,1,'1')) AS t3 (c1, c2, c3, c4) WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1;
-/*+ Leading(*VALUES* t1 t2) (*VALUES* t1)(*VALUES* t1 t2)*/
-EXPLAIN SELECT * FROM s1.t1, s1.t2, (VALUES(1,1,1,'1')) AS t3 (c1, c2, c3, c4) WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1;
-
--- No. R-2-4-2
-EXPLAIN SELECT * FROM s1.t1, s1.t2, (VALUES(1,1,1,'1')) AS t3 (c1, c2, c3, c4), (VALUES(1,1,1,'1'), (2,2,2,'2')) AS t4 (c1, c2, c3, c4) WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
-/*+ Leading(t4 t3 t2 t1) (t4 t3)(t4 t3 t2)(t4 t3 t2 t1)*/
-EXPLAIN SELECT * FROM s1.t1, s1.t2, (VALUES(1,1,1,'1')) AS t3 (c1, c2, c3, c4), (VALUES(1,1,1,'1'), (2,2,2,'2')) AS t4 (c1, c2, c3, c4) WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
-/*+ Leading(*VALUES* t3 t2 t1) (t4 t3)(*VALUES* t3 t2)(*VALUES* t3 t2 t1)*/
-EXPLAIN SELECT * FROM s1.t1, s1.t2, (VALUES(1,1,1,'1')) AS t3 (c1, c2, c3, c4), (VALUES(1,1,1,'1'), (2,2,2,'2')) AS t4 (c1, c2, c3, c4) WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
-
-----
----- No. R-2-5
-----
-
-----
----- No. R-3-1 
-----
-
-----
----- No. R-3-2 join inherit tables
-----
-EXPLAIN SELECT * FROM s1.p1, s1.p2 WHERE p1.c1 = p2.c1;
-
--- No. R-3-2-1
-/*+(p1 p2)*/
-EXPLAIN SELECT * FROM s1.p1, s1.p2 WHERE p1.c1 = p2.c1;
-
--- No. R-3-2-2
-/*+(p1c1 p2c1)*/
-EXPLAIN SELECT * FROM s1.p1, s1.p2 WHERE p1.c1 = p2.c1;
-
-----
----- No. R-3-5 conflict join method hint
-----
-EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
-
--- No. R-3-5-1
-/*+(t1 t2)(t1 t2)*/
-EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
-
--- No. R-3-5-2
-/*+(t1 t2)(t1 t2)(t1 t2)*/
-EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
-
--- No. R-3-5-3
-/*+(t1 t2)(t2 t1)*/
-EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
-
--- No. R-3-5-4
-/*+(t2 t1)(t1 t2)(t2 t1)*/
-EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
-
-----
----- No. R-3-6 hint state output
-----
-
--- No. R-3-6-1
-/*+(t1 t2)*/
-SELECT * FROM s1.t1, s1.t2 WHERE false;