OSDN Git Service

Merge branch 'ut_suzuki' of git://moomin/pg_hint_plan into ut_suzuki
[pghintplan/pg_hint_plan.git] / expected / ut-L.out
1 LOAD 'pg_hint_plan';
2 SET pg_hint_plan.enable TO on;
3 SET pg_hint_plan.debug_print TO on;
4 SET client_min_messages TO LOG;
5 SET search_path TO public;
6 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
7                    QUERY PLAN                   
8 ------------------------------------------------
9  Merge Join
10    Merge Cond: (t1.c1 = t2.c1)
11    ->  Merge Join
12          Merge Cond: (t1.c1 = t4.c1)
13          ->  Merge Join
14                Merge Cond: (t1.c1 = t3.c1)
15                ->  Index Scan using t1_i1 on t1
16                ->  Index Scan using t3_i1 on t3
17          ->  Index Scan using t4_i1 on t4
18    ->  Sort
19          Sort Key: t2.c1
20          ->  Seq Scan on t2
21 (12 rows)
22
23 ----
24 ---- No. L-1-1 specified pattern of the object name
25 ----
26 -- No. L-1-1-1
27 /*+Leading(t4 t2 t3 t1)*/
28 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
29 LOG:  pg_hint_plan:
30 used hint:
31 Leading(t4 t2 t3 t1)
32 not used hint:
33 duplication hint:
34 error hint:
35
36                       QUERY PLAN                      
37 ------------------------------------------------------
38  Merge Join
39    Merge Cond: (t1.c1 = t2.c1)
40    ->  Index Scan using t1_i1 on t1
41    ->  Sort
42          Sort Key: t2.c1
43          ->  Hash Join
44                Hash Cond: (t3.c1 = t2.c1)
45                ->  Seq Scan on t3
46                ->  Hash
47                      ->  Hash Join
48                            Hash Cond: (t4.c1 = t2.c1)
49                            ->  Seq Scan on t4
50                            ->  Hash
51                                  ->  Seq Scan on t2
52 (14 rows)
53
54 -- No. L-1-1-2
55 /*+Leading(t4 t2 t3 t1)*/
56 EXPLAIN (COSTS false) SELECT * FROM s1.t1 t_1, s1.t2 t_2, s1.t3 t_3, s1.t4 t_4 WHERE t_1.c1 = t_2.c1 AND t_1.c1 = t_3.c1 AND t_1.c1 = t_4.c1;
57 LOG:  pg_hint_plan:
58 used hint:
59 not used hint:
60 Leading(t4 t2 t3 t1)
61 duplication hint:
62 error hint:
63
64                      QUERY PLAN                     
65 ----------------------------------------------------
66  Merge Join
67    Merge Cond: (t_1.c1 = t_2.c1)
68    ->  Merge Join
69          Merge Cond: (t_1.c1 = t_4.c1)
70          ->  Merge Join
71                Merge Cond: (t_1.c1 = t_3.c1)
72                ->  Index Scan using t1_i1 on t1 t_1
73                ->  Index Scan using t3_i1 on t3 t_3
74          ->  Index Scan using t4_i1 on t4 t_4
75    ->  Sort
76          Sort Key: t_2.c1
77          ->  Seq Scan on t2 t_2
78 (12 rows)
79
80 -- No. L-1-1-3
81 /*+Leading(t_4 t_2 t_3 t_1)*/
82 EXPLAIN (COSTS false) SELECT * FROM s1.t1 t_1, s1.t2 t_2, s1.t3 t_3, s1.t4 t_4 WHERE t_1.c1 = t_2.c1 AND t_1.c1 = t_3.c1 AND t_1.c1 = t_4.c1;
83 LOG:  pg_hint_plan:
84 used hint:
85 Leading(t_4 t_2 t_3 t_1)
86 not used hint:
87 duplication hint:
88 error hint:
89
90                        QUERY PLAN                       
91 --------------------------------------------------------
92  Merge Join
93    Merge Cond: (t_1.c1 = t_2.c1)
94    ->  Index Scan using t1_i1 on t1 t_1
95    ->  Sort
96          Sort Key: t_2.c1
97          ->  Hash Join
98                Hash Cond: (t_3.c1 = t_2.c1)
99                ->  Seq Scan on t3 t_3
100                ->  Hash
101                      ->  Hash Join
102                            Hash Cond: (t_4.c1 = t_2.c1)
103                            ->  Seq Scan on t4 t_4
104                            ->  Hash
105                                  ->  Seq Scan on t2 t_2
106 (14 rows)
107
108 ----
109 ---- No. L-1-2 specified schema name in the hint option
110 ----
111 -- No. L-1-2-1
112 /*+Leading(t4 t2 t3 t1)*/
113 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
114 LOG:  pg_hint_plan:
115 used hint:
116 Leading(t4 t2 t3 t1)
117 not used hint:
118 duplication hint:
119 error hint:
120
121                       QUERY PLAN                      
122 ------------------------------------------------------
123  Merge Join
124    Merge Cond: (t1.c1 = t2.c1)
125    ->  Index Scan using t1_i1 on t1
126    ->  Sort
127          Sort Key: t2.c1
128          ->  Hash Join
129                Hash Cond: (t3.c1 = t2.c1)
130                ->  Seq Scan on t3
131                ->  Hash
132                      ->  Hash Join
133                            Hash Cond: (t4.c1 = t2.c1)
134                            ->  Seq Scan on t4
135                            ->  Hash
136                                  ->  Seq Scan on t2
137 (14 rows)
138
139 -- No. L-1-2-2
140 /*+Leading(s1.t4 s1.t2 s1.t3 s1.t1)*/
141 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
142 LOG:  pg_hint_plan:
143 used hint:
144 not used hint:
145 Leading(s1.t4 s1.t2 s1.t3 s1.t1)
146 duplication hint:
147 error hint:
148
149                    QUERY PLAN                   
150 ------------------------------------------------
151  Merge Join
152    Merge Cond: (t1.c1 = t2.c1)
153    ->  Merge Join
154          Merge Cond: (t1.c1 = t4.c1)
155          ->  Merge Join
156                Merge Cond: (t1.c1 = t3.c1)
157                ->  Index Scan using t1_i1 on t1
158                ->  Index Scan using t3_i1 on t3
159          ->  Index Scan using t4_i1 on t4
160    ->  Sort
161          Sort Key: t2.c1
162          ->  Seq Scan on t2
163 (12 rows)
164
165 ----
166 ---- No. L-1-3 table doesn't exist in the hint option
167 ----
168 -- No. L-1-3-1
169 /*+Leading(t4 t2 t3 t1)*/
170 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
171 LOG:  pg_hint_plan:
172 used hint:
173 Leading(t4 t2 t3 t1)
174 not used hint:
175 duplication hint:
176 error hint:
177
178                       QUERY PLAN                      
179 ------------------------------------------------------
180  Merge Join
181    Merge Cond: (t1.c1 = t2.c1)
182    ->  Index Scan using t1_i1 on t1
183    ->  Sort
184          Sort Key: t2.c1
185          ->  Hash Join
186                Hash Cond: (t3.c1 = t2.c1)
187                ->  Seq Scan on t3
188                ->  Hash
189                      ->  Hash Join
190                            Hash Cond: (t4.c1 = t2.c1)
191                            ->  Seq Scan on t4
192                            ->  Hash
193                                  ->  Seq Scan on t2
194 (14 rows)
195
196 -- No. L-1-3-1
197 /*+Leading(t5 t2 t3 t1)*/
198 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
199 LOG:  pg_hint_plan:
200 used hint:
201 Leading(t5 t2 t3 t1)
202 not used hint:
203 duplication hint:
204 error hint:
205
206                    QUERY PLAN                   
207 ------------------------------------------------
208  Nested Loop
209    ->  Merge Join
210          Merge Cond: (t1.c1 = t2.c1)
211          ->  Index Scan using t1_i1 on t1
212          ->  Sort
213                Sort Key: t2.c1
214                ->  Hash Join
215                      Hash Cond: (t3.c1 = t2.c1)
216                      ->  Seq Scan on t3
217                      ->  Hash
218                            ->  Seq Scan on t2
219    ->  Index Scan using t4_i1 on t4
220          Index Cond: (c1 = t1.c1)
221 (13 rows)
222
223 ----
224 ---- No. L-1-4 conflict table name
225 ----
226 -- No. L-1-4-1
227 /*+Leading(t4 t2 t3 t1)*/
228 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
229 LOG:  pg_hint_plan:
230 used hint:
231 Leading(t4 t2 t3 t1)
232 not used hint:
233 duplication hint:
234 error hint:
235
236                       QUERY PLAN                      
237 ------------------------------------------------------
238  Merge Join
239    Merge Cond: (t1.c1 = t2.c1)
240    ->  Index Scan using t1_i1 on t1
241    ->  Sort
242          Sort Key: t2.c1
243          ->  Hash Join
244                Hash Cond: (t3.c1 = t2.c1)
245                ->  Seq Scan on t3
246                ->  Hash
247                      ->  Hash Join
248                            Hash Cond: (t4.c1 = t2.c1)
249                            ->  Seq Scan on t4
250                            ->  Hash
251                                  ->  Seq Scan on t2
252 (14 rows)
253
254 -- No. L-1-4-2
255 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s2.t1 WHERE s1.t1.c1 = t2.c1 AND s1.t1.c1 = t3.c1 AND s1.t1.c1 = s2.t1.c1;
256                    QUERY PLAN                   
257 ------------------------------------------------
258  Merge Join
259    Merge Cond: (s1.t1.c1 = s2.t1.c1)
260    ->  Merge Join
261          Merge Cond: (s1.t1.c1 = t2.c1)
262          ->  Merge Join
263                Merge Cond: (s1.t1.c1 = t3.c1)
264                ->  Index Scan using t1_i1 on t1
265                ->  Index Scan using t3_i1 on t3
266          ->  Index Scan using t2_i1 on t2
267    ->  Sort
268          Sort Key: s2.t1.c1
269          ->  Seq Scan on t1
270 (12 rows)
271
272 /*+Leading(t1 t2 t3 t1)*/
273 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s2.t1 WHERE s1.t1.c1 = t2.c1 AND s1.t1.c1 = t3.c1 AND s1.t1.c1 = s2.t1.c1;
274 INFO:  hint syntax error at or near "Leading(t1 t2 t3 t1)"
275 DETAIL:  Relation name "t1" is ambiguous.
276 LOG:  pg_hint_plan:
277 used hint:
278 not used hint:
279 Leading(t1 t2 t3 t1)
280 duplication hint:
281 error hint:
282
283                    QUERY PLAN                   
284 ------------------------------------------------
285  Merge Join
286    Merge Cond: (s1.t1.c1 = s2.t1.c1)
287    ->  Merge Join
288          Merge Cond: (s1.t1.c1 = t2.c1)
289          ->  Merge Join
290                Merge Cond: (s1.t1.c1 = t3.c1)
291                ->  Index Scan using t1_i1 on t1
292                ->  Index Scan using t3_i1 on t3
293          ->  Index Scan using t2_i1 on t2
294    ->  Sort
295          Sort Key: s2.t1.c1
296          ->  Seq Scan on t1
297 (12 rows)
298
299 /*+Leading(s1.t1 t2 t3 s2.t1)*/
300 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s2.t1 WHERE s1.t1.c1 = t2.c1 AND s1.t1.c1 = t3.c1 AND s1.t1.c1 = s2.t1.c1;
301 LOG:  pg_hint_plan:
302 used hint:
303 Leading(s1.t1 t2 t3 s2.t1)
304 not used hint:
305 duplication hint:
306 error hint:
307
308                    QUERY PLAN                   
309 ------------------------------------------------
310  Nested Loop
311    ->  Nested Loop
312          ->  Merge Join
313                Merge Cond: (t3.c1 = t2.c1)
314                ->  Index Scan using t3_i1 on t3
315                ->  Sort
316                      Sort Key: t2.c1
317                      ->  Seq Scan on t2
318          ->  Index Scan using t1_pkey on t1
319                Index Cond: (c1 = t2.c1)
320    ->  Index Scan using t1_i1 on t1
321          Index Cond: (c1 = t2.c1)
322 (12 rows)
323
324 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s2.t1 s2t1 WHERE s1.t1.c1 = t2.c1 AND s1.t1.c1 = t3.c1 AND s1.t1.c1 = s2t1.c1;
325                    QUERY PLAN                   
326 ------------------------------------------------
327  Merge Join
328    Merge Cond: (t1.c1 = s2t1.c1)
329    ->  Merge Join
330          Merge Cond: (t1.c1 = t2.c1)
331          ->  Merge Join
332                Merge Cond: (t1.c1 = t3.c1)
333                ->  Index Scan using t1_i1 on t1
334                ->  Index Scan using t3_i1 on t3
335          ->  Index Scan using t2_i1 on t2
336    ->  Sort
337          Sort Key: s2t1.c1
338          ->  Seq Scan on t1 s2t1
339 (12 rows)
340
341 /*+Leading(s2t1 t1 t3 t2)*/
342 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s2.t1 s2t1 WHERE s1.t1.c1 = t2.c1 AND s1.t1.c1 = t3.c1 AND s1.t1.c1 = s2t1.c1;
343 LOG:  pg_hint_plan:
344 used hint:
345 Leading(s2t1 t1 t3 t2)
346 not used hint:
347 duplication hint:
348 error hint:
349
350                       QUERY PLAN                       
351 -------------------------------------------------------
352  Merge Join
353    Merge Cond: (t1.c1 = t2.c1)
354    ->  Merge Join
355          Merge Cond: (t1.c1 = t3.c1)
356          ->  Merge Join
357                Merge Cond: (t1.c1 = s2t1.c1)
358                ->  Index Scan using t1_i1 on t1
359                ->  Index Scan using t1_pkey on t1 s2t1
360          ->  Index Scan using t3_i1 on t3
361    ->  Sort
362          Sort Key: t2.c1
363          ->  Seq Scan on t2
364 (12 rows)
365
366 -- No. L-1-4-3
367 EXPLAIN (COSTS false) SELECT *, (SELECT max(t1.c1) FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1) FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
368                           QUERY PLAN                           
369 ---------------------------------------------------------------
370  Merge Join
371    Merge Cond: (s1.t1.c1 = s1.t2.c1)
372    InitPlan 1 (returns $0)
373      ->  Aggregate
374            ->  Merge Join
375                  Merge Cond: (s1.t1.c1 = s1.t2.c1)
376                  ->  Merge Join
377                        Merge Cond: (s1.t1.c1 = s1.t4.c1)
378                        ->  Merge Join
379                              Merge Cond: (s1.t1.c1 = s1.t3.c1)
380                              ->  Index Scan using t1_i1 on t1
381                              ->  Index Scan using t3_i1 on t3
382                        ->  Index Scan using t4_i1 on t4
383                  ->  Sort
384                        Sort Key: s1.t2.c1
385                        ->  Seq Scan on t2
386    ->  Merge Join
387          Merge Cond: (s1.t1.c1 = s1.t4.c1)
388          ->  Merge Join
389                Merge Cond: (s1.t1.c1 = s1.t3.c1)
390                ->  Index Scan using t1_i1 on t1
391                ->  Index Scan using t3_i1 on t3
392          ->  Index Scan using t4_i1 on t4
393    ->  Sort
394          Sort Key: s1.t2.c1
395          ->  Seq Scan on t2
396 (26 rows)
397
398 /*+Leading(t4 t2 t3 t1)*/
399 EXPLAIN (COSTS false) SELECT *, (SELECT max(t1.c1) FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1) FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
400 LOG:  pg_hint_plan:
401 used hint:
402 Leading(t4 t2 t3 t1)
403 not used hint:
404 duplication hint:
405 error hint:
406
407                                 QUERY PLAN                                
408 --------------------------------------------------------------------------
409  Merge Join
410    Merge Cond: (s1.t1.c1 = s1.t2.c1)
411    InitPlan 1 (returns $0)
412      ->  Aggregate
413            ->  Merge Join
414                  Merge Cond: (s1.t1.c1 = s1.t2.c1)
415                  ->  Index Scan using t1_i1 on t1
416                  ->  Sort
417                        Sort Key: s1.t2.c1
418                        ->  Hash Join
419                              Hash Cond: (s1.t3.c1 = s1.t2.c1)
420                              ->  Seq Scan on t3
421                              ->  Hash
422                                    ->  Hash Join
423                                          Hash Cond: (s1.t4.c1 = s1.t2.c1)
424                                          ->  Seq Scan on t4
425                                          ->  Hash
426                                                ->  Seq Scan on t2
427    ->  Index Scan using t1_i1 on t1
428    ->  Sort
429          Sort Key: s1.t2.c1
430          ->  Hash Join
431                Hash Cond: (s1.t3.c1 = s1.t2.c1)
432                ->  Seq Scan on t3
433                ->  Hash
434                      ->  Hash Join
435                            Hash Cond: (s1.t4.c1 = s1.t2.c1)
436                            ->  Seq Scan on t4
437                            ->  Hash
438                                  ->  Seq Scan on t2
439 (30 rows)
440
441 /*+Leading(st1 st2 st3 st4 t4 t2 t3 t1)*/
442 EXPLAIN (COSTS false) SELECT *, (SELECT max(st1.c1) FROM s1.t1 st1, s1.t2 st2, s1.t3 st3, s1.t4 st4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1) FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
443 LOG:  pg_hint_plan:
444 used hint:
445 Leading(st1 st2 st3 st4 t4 t2 t3 t1)
446 not used hint:
447 duplication hint:
448 error hint:
449
450                                          QUERY PLAN                                         
451 --------------------------------------------------------------------------------------------
452  Merge Join
453    Merge Cond: (t1.c1 = t2.c1)
454    ->  Index Scan using t1_i1 on t1
455    ->  Sort
456          Sort Key: t2.c1
457          ->  Hash Join
458                Hash Cond: (t3.c1 = t2.c1)
459                ->  Seq Scan on t3
460                ->  Hash
461                      ->  Hash Join
462                            Hash Cond: (t4.c1 = t2.c1)
463                            ->  Seq Scan on t4
464                            ->  Hash
465                                  ->  Seq Scan on t2
466    SubPlan 1
467      ->  Aggregate
468            ->  Result
469                  One-Time Filter: ((t1.c1 = t2.c1) AND (t1.c1 = t3.c1) AND (t1.c1 = t4.c1))
470                  ->  Nested Loop
471                        ->  Nested Loop
472                              ->  Nested Loop
473                                    ->  Seq Scan on t1 st1
474                                    ->  Materialize
475                                          ->  Seq Scan on t2 st2
476                              ->  Materialize
477                                    ->  Seq Scan on t3 st3
478                        ->  Materialize
479                              ->  Seq Scan on t4 st4
480 (28 rows)
481
482 ----
483 ---- No. L-1-5 conflict table name
484 ----
485 -- No. L-1-5-1
486 /*+Leading(t4 t2 t3 t1)*/
487 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
488 LOG:  pg_hint_plan:
489 used hint:
490 Leading(t4 t2 t3 t1)
491 not used hint:
492 duplication hint:
493 error hint:
494
495                       QUERY PLAN                      
496 ------------------------------------------------------
497  Merge Join
498    Merge Cond: (t1.c1 = t2.c1)
499    ->  Index Scan using t1_i1 on t1
500    ->  Sort
501          Sort Key: t2.c1
502          ->  Hash Join
503                Hash Cond: (t3.c1 = t2.c1)
504                ->  Seq Scan on t3
505                ->  Hash
506                      ->  Hash Join
507                            Hash Cond: (t4.c1 = t2.c1)
508                            ->  Seq Scan on t4
509                            ->  Hash
510                                  ->  Seq Scan on t2
511 (14 rows)
512
513 -- No. L-1-5-2
514 /*+Leading(t4 t2 t3 t1 t4)*/
515 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
516 LOG:  pg_hint_plan:
517 used hint:
518 Leading(t4 t2 t3 t1 t4)
519 not used hint:
520 duplication hint:
521 error hint:
522
523                       QUERY PLAN                      
524 ------------------------------------------------------
525  Merge Join
526    Merge Cond: (t1.c1 = t2.c1)
527    ->  Index Scan using t1_i1 on t1
528    ->  Sort
529          Sort Key: t2.c1
530          ->  Hash Join
531                Hash Cond: (t3.c1 = t2.c1)
532                ->  Seq Scan on t3
533                ->  Hash
534                      ->  Hash Join
535                            Hash Cond: (t4.c1 = t2.c1)
536                            ->  Seq Scan on t4
537                            ->  Hash
538                                  ->  Seq Scan on t2
539 (14 rows)
540
541 /*+Leading(t4 t2 t3 t4)*/
542 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
543 INFO:  hint syntax error at or near "Leading(t4 t2 t3 t4)"
544 DETAIL:  Relation name "t4" is duplicate.
545 LOG:  pg_hint_plan:
546 used hint:
547 not used hint:
548 duplication hint:
549 error hint:
550 Leading(t4 t2 t3 t4)
551
552                    QUERY PLAN                   
553 ------------------------------------------------
554  Merge Join
555    Merge Cond: (t1.c1 = t2.c1)
556    ->  Merge Join
557          Merge Cond: (t1.c1 = t4.c1)
558          ->  Merge Join
559                Merge Cond: (t1.c1 = t3.c1)
560                ->  Index Scan using t1_i1 on t1
561                ->  Index Scan using t3_i1 on t3
562          ->  Index Scan using t4_i1 on t4
563    ->  Sort
564          Sort Key: t2.c1
565          ->  Seq Scan on t2
566 (12 rows)
567
568 -- No. L-1-5-3
569 /*+Leading(t4 t2 t3 t1 t4 t2 t3 t1)*/
570 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
571 LOG:  pg_hint_plan:
572 used hint:
573 Leading(t4 t2 t3 t1 t4 t2 t3 t1)
574 not used hint:
575 duplication hint:
576 error hint:
577
578                       QUERY PLAN                      
579 ------------------------------------------------------
580  Merge Join
581    Merge Cond: (t1.c1 = t2.c1)
582    ->  Index Scan using t1_i1 on t1
583    ->  Sort
584          Sort Key: t2.c1
585          ->  Hash Join
586                Hash Cond: (t3.c1 = t2.c1)
587                ->  Seq Scan on t3
588                ->  Hash
589                      ->  Hash Join
590                            Hash Cond: (t4.c1 = t2.c1)
591                            ->  Seq Scan on t4
592                            ->  Hash
593                                  ->  Seq Scan on t2
594 (14 rows)
595
596 /*+Leading(t4 t2 t2 t4)*/
597 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
598 INFO:  hint syntax error at or near "Leading(t4 t2 t2 t4)"
599 DETAIL:  Relation name "t2" is duplicate.
600 LOG:  pg_hint_plan:
601 used hint:
602 not used hint:
603 duplication hint:
604 error hint:
605 Leading(t4 t2 t2 t4)
606
607                    QUERY PLAN                   
608 ------------------------------------------------
609  Merge Join
610    Merge Cond: (t1.c1 = t2.c1)
611    ->  Merge Join
612          Merge Cond: (t1.c1 = t4.c1)
613          ->  Merge Join
614                Merge Cond: (t1.c1 = t3.c1)
615                ->  Index Scan using t1_i1 on t1
616                ->  Index Scan using t3_i1 on t3
617          ->  Index Scan using t4_i1 on t4
618    ->  Sort
619          Sort Key: t2.c1
620          ->  Seq Scan on t2
621 (12 rows)
622
623 ----
624 ---- No. L-1-6 object type for the hint
625 ----
626 -- No. L-1-6-1
627 /*+Leading(t4 t2 t3 t1)*/
628 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
629 LOG:  pg_hint_plan:
630 used hint:
631 Leading(t4 t2 t3 t1)
632 not used hint:
633 duplication hint:
634 error hint:
635
636                       QUERY PLAN                      
637 ------------------------------------------------------
638  Merge Join
639    Merge Cond: (t1.c1 = t2.c1)
640    ->  Index Scan using t1_i1 on t1
641    ->  Sort
642          Sort Key: t2.c1
643          ->  Hash Join
644                Hash Cond: (t3.c1 = t2.c1)
645                ->  Seq Scan on t3
646                ->  Hash
647                      ->  Hash Join
648                            Hash Cond: (t4.c1 = t2.c1)
649                            ->  Seq Scan on t4
650                            ->  Hash
651                                  ->  Seq Scan on t2
652 (14 rows)
653
654 -- No. L-1-6-2
655 EXPLAIN (COSTS false) SELECT * FROM s1.p1 t1, s1.p1 t2, s1.p1 t3, s1.p1 t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
656                     QUERY PLAN                     
657 ---------------------------------------------------
658  Hash Join
659    Hash Cond: (t1.c1 = t4.c1)
660    ->  Hash Join
661          Hash Cond: (t1.c1 = t3.c1)
662          ->  Hash Join
663                Hash Cond: (t1.c1 = t2.c1)
664                ->  Append
665                      ->  Seq Scan on p1 t1
666                      ->  Seq Scan on p1c1 t1
667                      ->  Seq Scan on p1c2 t1
668                      ->  Seq Scan on p1c3 t1
669                ->  Hash
670                      ->  Append
671                            ->  Seq Scan on p1 t2
672                            ->  Seq Scan on p1c1 t2
673                            ->  Seq Scan on p1c2 t2
674                            ->  Seq Scan on p1c3 t2
675          ->  Hash
676                ->  Append
677                      ->  Seq Scan on p1 t3
678                      ->  Seq Scan on p1c1 t3
679                      ->  Seq Scan on p1c2 t3
680                      ->  Seq Scan on p1c3 t3
681    ->  Hash
682          ->  Append
683                ->  Seq Scan on p1 t4
684                ->  Seq Scan on p1c1 t4
685                ->  Seq Scan on p1c2 t4
686                ->  Seq Scan on p1c3 t4
687 (29 rows)
688
689 /*+Leading(t4 t3 t2 t1)*/
690 EXPLAIN (COSTS false) SELECT * FROM s1.p1 t1, s1.p1 t2, s1.p1 t3, s1.p1 t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
691 LOG:  pg_hint_plan:
692 used hint:
693 Leading(t4 t3 t2 t1)
694 not used hint:
695 duplication hint:
696 error hint:
697
698                     QUERY PLAN                     
699 ---------------------------------------------------
700  Hash Join
701    Hash Cond: (t2.c1 = t1.c1)
702    ->  Hash Join
703          Hash Cond: (t3.c1 = t2.c1)
704          ->  Hash Join
705                Hash Cond: (t3.c1 = t4.c1)
706                ->  Append
707                      ->  Seq Scan on p1 t3
708                      ->  Seq Scan on p1c1 t3
709                      ->  Seq Scan on p1c2 t3
710                      ->  Seq Scan on p1c3 t3
711                ->  Hash
712                      ->  Append
713                            ->  Seq Scan on p1 t4
714                            ->  Seq Scan on p1c1 t4
715                            ->  Seq Scan on p1c2 t4
716                            ->  Seq Scan on p1c3 t4
717          ->  Hash
718                ->  Append
719                      ->  Seq Scan on p1 t2
720                      ->  Seq Scan on p1c1 t2
721                      ->  Seq Scan on p1c2 t2
722                      ->  Seq Scan on p1c3 t2
723    ->  Hash
724          ->  Append
725                ->  Seq Scan on p1 t1
726                ->  Seq Scan on p1c1 t1
727                ->  Seq Scan on p1c2 t1
728                ->  Seq Scan on p1c3 t1
729 (29 rows)
730
731 -- No. L-1-6-3
732 EXPLAIN (COSTS false) SELECT * FROM s1.ul1 t1, s1.ul1 t2, s1.ul1 t3, s1.ul1 t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
733                  QUERY PLAN                 
734 --------------------------------------------
735  Hash Join
736    Hash Cond: (t1.c1 = t4.c1)
737    ->  Hash Join
738          Hash Cond: (t1.c1 = t3.c1)
739          ->  Hash Join
740                Hash Cond: (t1.c1 = t2.c1)
741                ->  Seq Scan on ul1 t1
742                ->  Hash
743                      ->  Seq Scan on ul1 t2
744          ->  Hash
745                ->  Seq Scan on ul1 t3
746    ->  Hash
747          ->  Seq Scan on ul1 t4
748 (13 rows)
749
750 /*+Leading(t4 t3 t2 t1)*/
751 EXPLAIN (COSTS false) SELECT * FROM s1.ul1 t1, s1.ul1 t2, s1.ul1 t3, s1.ul1 t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
752 LOG:  pg_hint_plan:
753 used hint:
754 Leading(t4 t3 t2 t1)
755 not used hint:
756 duplication hint:
757 error hint:
758
759                  QUERY PLAN                 
760 --------------------------------------------
761  Hash Join
762    Hash Cond: (t2.c1 = t1.c1)
763    ->  Hash Join
764          Hash Cond: (t3.c1 = t2.c1)
765          ->  Hash Join
766                Hash Cond: (t3.c1 = t4.c1)
767                ->  Seq Scan on ul1 t3
768                ->  Hash
769                      ->  Seq Scan on ul1 t4
770          ->  Hash
771                ->  Seq Scan on ul1 t2
772    ->  Hash
773          ->  Seq Scan on ul1 t1
774 (13 rows)
775
776 -- No. L-1-6-4
777 CREATE TEMP TABLE tm1 (LIKE s1.t1 INCLUDING ALL);
778 NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "tm1_pkey" for table "tm1"
779 EXPLAIN (COSTS false) SELECT * FROM tm1 t1, tm1 t2, tm1 t3, tm1 t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
780                  QUERY PLAN                 
781 --------------------------------------------
782  Hash Join
783    Hash Cond: (t1.c1 = t4.c1)
784    ->  Hash Join
785          Hash Cond: (t1.c1 = t3.c1)
786          ->  Hash Join
787                Hash Cond: (t1.c1 = t2.c1)
788                ->  Seq Scan on tm1 t1
789                ->  Hash
790                      ->  Seq Scan on tm1 t2
791          ->  Hash
792                ->  Seq Scan on tm1 t3
793    ->  Hash
794          ->  Seq Scan on tm1 t4
795 (13 rows)
796
797 /*+Leading(t4 t3 t2 t1)*/
798 EXPLAIN (COSTS false) SELECT * FROM tm1 t1, tm1 t2, tm1 t3, tm1 t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
799 LOG:  pg_hint_plan:
800 used hint:
801 Leading(t4 t3 t2 t1)
802 not used hint:
803 duplication hint:
804 error hint:
805
806                  QUERY PLAN                 
807 --------------------------------------------
808  Hash Join
809    Hash Cond: (t2.c1 = t1.c1)
810    ->  Hash Join
811          Hash Cond: (t3.c1 = t2.c1)
812          ->  Hash Join
813                Hash Cond: (t3.c1 = t4.c1)
814                ->  Seq Scan on tm1 t3
815                ->  Hash
816                      ->  Seq Scan on tm1 t4
817          ->  Hash
818                ->  Seq Scan on tm1 t2
819    ->  Hash
820          ->  Seq Scan on tm1 t1
821 (13 rows)
822
823 -- No. L-1-6-5
824 EXPLAIN (COSTS false) SELECT * FROM pg_catalog.pg_class t1, pg_catalog.pg_class t2, pg_catalog.pg_class t3, pg_catalog.pg_class t4 WHERE t1.oid = t2.oid AND t1.oid = t3.oid AND t1.oid = t4.oid;
825                    QUERY PLAN                    
826 -------------------------------------------------
827  Hash Join
828    Hash Cond: (t1.oid = t4.oid)
829    ->  Hash Join
830          Hash Cond: (t1.oid = t3.oid)
831          ->  Hash Join
832                Hash Cond: (t1.oid = t2.oid)
833                ->  Seq Scan on pg_class t1
834                ->  Hash
835                      ->  Seq Scan on pg_class t2
836          ->  Hash
837                ->  Seq Scan on pg_class t3
838    ->  Hash
839          ->  Seq Scan on pg_class t4
840 (13 rows)
841
842 /*+Leading(t4 t3 t2 t1)*/
843 EXPLAIN (COSTS false) SELECT * FROM pg_catalog.pg_class t1, pg_catalog.pg_class t2, pg_catalog.pg_class t3, pg_catalog.pg_class t4 WHERE t1.oid = t2.oid AND t1.oid = t3.oid AND t1.oid = t4.oid;
844 LOG:  pg_hint_plan:
845 used hint:
846 Leading(t4 t3 t2 t1)
847 not used hint:
848 duplication hint:
849 error hint:
850
851                    QUERY PLAN                    
852 -------------------------------------------------
853  Hash Join
854    Hash Cond: (t2.oid = t1.oid)
855    ->  Hash Join
856          Hash Cond: (t3.oid = t2.oid)
857          ->  Hash Join
858                Hash Cond: (t3.oid = t4.oid)
859                ->  Seq Scan on pg_class t3
860                ->  Hash
861                      ->  Seq Scan on pg_class t4
862          ->  Hash
863                ->  Seq Scan on pg_class t2
864    ->  Hash
865          ->  Seq Scan on pg_class t1
866 (13 rows)
867
868 -- No. L-1-6-6
869 -- refer fdw.sql
870 -- No. L-1-6-7
871 EXPLAIN (COSTS false) SELECT * FROM s1.f1() t1, s1.f1() t2, s1.f1() t3, s1.f1() t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
872                  QUERY PLAN                 
873 --------------------------------------------
874  Nested Loop
875    Join Filter: (t1.c1 = t4.c1)
876    ->  Nested Loop
877          Join Filter: (t1.c1 = t3.c1)
878          ->  Nested Loop
879                Join Filter: (t1.c1 = t2.c1)
880                ->  Function Scan on f1 t1
881                ->  Function Scan on f1 t2
882          ->  Function Scan on f1 t3
883    ->  Function Scan on f1 t4
884 (10 rows)
885
886 /*+Leading(t4 t3 t2 t1)*/
887 EXPLAIN (COSTS false) SELECT * FROM s1.f1() t1, s1.f1() t2, s1.f1() t3, s1.f1() t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
888 LOG:  pg_hint_plan:
889 used hint:
890 Leading(t4 t3 t2 t1)
891 not used hint:
892 duplication hint:
893 error hint:
894
895                  QUERY PLAN                 
896 --------------------------------------------
897  Nested Loop
898    Join Filter: (t2.c1 = t1.c1)
899    ->  Nested Loop
900          Join Filter: (t3.c1 = t2.c1)
901          ->  Nested Loop
902                Join Filter: (t3.c1 = t4.c1)
903                ->  Function Scan on f1 t3
904                ->  Function Scan on f1 t4
905          ->  Function Scan on f1 t2
906    ->  Function Scan on f1 t1
907 (10 rows)
908
909 -- No. L-1-6-8
910 EXPLAIN (COSTS false) SELECT * FROM (VALUES(1,1,1,'1')) AS t1 (c1, c2, c3, c4), (VALUES(1,1,1,'1'), (2,2,2,'2')) AS t2 (c1, c2, c3, c4), (VALUES(1,1,1,'1'), (2,2,2,'2'), (3,3,3,'3')) AS t3 (c1, c2, c3, c4), (VALUES(1,1,1,'1'), (2,2,2,'2'), (3,3,3,'3'), (4,4,4,'4')) AS t4  (c1, c2, c3, c4) WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
911                                 QUERY PLAN                                
912 --------------------------------------------------------------------------
913  Nested Loop
914    Join Filter: ("*VALUES*".column1 = "*VALUES*".column1)
915    ->  Hash Join
916          Hash Cond: ("*VALUES*".column1 = "*VALUES*".column1)
917          ->  Values Scan on "*VALUES*"
918          ->  Hash
919                ->  Hash Join
920                      Hash Cond: ("*VALUES*".column1 = "*VALUES*".column1)
921                      ->  Values Scan on "*VALUES*"
922                      ->  Hash
923                            ->  Values Scan on "*VALUES*"
924    ->  Values Scan on "*VALUES*"
925 (12 rows)
926
927 /*+Leading(t4 t3 t2 t1)*/
928 EXPLAIN (COSTS false) SELECT * FROM (VALUES(1,1,1,'1')) AS t1 (c1, c2, c3, c4), (VALUES(1,1,1,'1'), (2,2,2,'2')) AS t2 (c1, c2, c3, c4), (VALUES(1,1,1,'1'), (2,2,2,'2'), (3,3,3,'3')) AS t3 (c1, c2, c3, c4), (VALUES(1,1,1,'1'), (2,2,2,'2'), (3,3,3,'3'), (4,4,4,'4')) AS t4  (c1, c2, c3, c4) WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
929 LOG:  pg_hint_plan:
930 used hint:
931 not used hint:
932 Leading(t4 t3 t2 t1)
933 duplication hint:
934 error hint:
935
936                                 QUERY PLAN                                
937 --------------------------------------------------------------------------
938  Nested Loop
939    Join Filter: ("*VALUES*".column1 = "*VALUES*".column1)
940    ->  Hash Join
941          Hash Cond: ("*VALUES*".column1 = "*VALUES*".column1)
942          ->  Values Scan on "*VALUES*"
943          ->  Hash
944                ->  Hash Join
945                      Hash Cond: ("*VALUES*".column1 = "*VALUES*".column1)
946                      ->  Values Scan on "*VALUES*"
947                      ->  Hash
948                            ->  Values Scan on "*VALUES*"
949    ->  Values Scan on "*VALUES*"
950 (12 rows)
951
952 -- No. L-1-6-9
953 EXPLAIN (COSTS false) WITH c1(c1) AS (SELECT st1.c1 FROM s1.t1 st1, s1.t1 st2, s1.t1 st3, s1.t1 st4 WHERE st1.c1 = st2.c1 AND st1.c1 = st3.c1 AND st1.c1 = st4.c1) SELECT * FROM c1 ct1, c1 ct2, c1 ct3, c1 ct4 WHERE ct1.c1 = ct2.c1 AND ct1.c1 = ct3.c1 AND ct1.c1 = ct4.c1;
954                      QUERY PLAN                     
955 ----------------------------------------------------
956  Merge Join
957    Merge Cond: (ct1.c1 = ct3.c1)
958    CTE c1
959      ->  Hash Join
960            Hash Cond: (st1.c1 = st4.c1)
961            ->  Hash Join
962                  Hash Cond: (st1.c1 = st3.c1)
963                  ->  Hash Join
964                        Hash Cond: (st1.c1 = st2.c1)
965                        ->  Seq Scan on t1 st1
966                        ->  Hash
967                              ->  Seq Scan on t1 st2
968                  ->  Hash
969                        ->  Seq Scan on t1 st3
970            ->  Hash
971                  ->  Seq Scan on t1 st4
972    ->  Merge Join
973          Merge Cond: (ct1.c1 = ct2.c1)
974          ->  Sort
975                Sort Key: ct1.c1
976                ->  CTE Scan on c1 ct1
977          ->  Sort
978                Sort Key: ct2.c1
979                ->  CTE Scan on c1 ct2
980    ->  Materialize
981          ->  Merge Join
982                Merge Cond: (ct3.c1 = ct4.c1)
983                ->  Sort
984                      Sort Key: ct3.c1
985                      ->  CTE Scan on c1 ct3
986                ->  Sort
987                      Sort Key: ct4.c1
988                      ->  CTE Scan on c1 ct4
989 (33 rows)
990
991 /*+Leading(ct4 ct3 ct2 ct1 st4 st3 st2 st1)*/
992 EXPLAIN (COSTS false) WITH c1(c1) AS (SELECT st1.c1 FROM s1.t1 st1, s1.t1 st2, s1.t1 st3, s1.t1 st4 WHERE st1.c1 = st2.c1 AND st1.c1 = st3.c1 AND st1.c1 = st4.c1) SELECT * FROM c1 ct1, c1 ct2, c1 ct3, c1 ct4 WHERE ct1.c1 = ct2.c1 AND ct1.c1 = ct3.c1 AND ct1.c1 = ct4.c1;
993 LOG:  pg_hint_plan:
994 used hint:
995 Leading(ct4 ct3 ct2 ct1 st4 st3 st2 st1)
996 not used hint:
997 duplication hint:
998 error hint:
999
1000                        QUERY PLAN                        
1001 ---------------------------------------------------------
1002  Merge Join
1003    Merge Cond: (ct1.c1 = ct2.c1)
1004    CTE c1
1005      ->  Hash Join
1006            Hash Cond: (st2.c1 = st1.c1)
1007            ->  Hash Join
1008                  Hash Cond: (st3.c1 = st2.c1)
1009                  ->  Hash Join
1010                        Hash Cond: (st3.c1 = st4.c1)
1011                        ->  Seq Scan on t1 st3
1012                        ->  Hash
1013                              ->  Seq Scan on t1 st4
1014                  ->  Hash
1015                        ->  Seq Scan on t1 st2
1016            ->  Hash
1017                  ->  Seq Scan on t1 st1
1018    ->  Sort
1019          Sort Key: ct1.c1
1020          ->  CTE Scan on c1 ct1
1021    ->  Materialize
1022          ->  Merge Join
1023                Merge Cond: (ct2.c1 = ct3.c1)
1024                ->  Sort
1025                      Sort Key: ct2.c1
1026                      ->  CTE Scan on c1 ct2
1027                ->  Materialize
1028                      ->  Merge Join
1029                            Merge Cond: (ct3.c1 = ct4.c1)
1030                            ->  Sort
1031                                  Sort Key: ct3.c1
1032                                  ->  CTE Scan on c1 ct3
1033                            ->  Sort
1034                                  Sort Key: ct4.c1
1035                                  ->  CTE Scan on c1 ct4
1036 (34 rows)
1037
1038 -- No. L-1-6-10
1039 EXPLAIN (COSTS false) SELECT * FROM s1.v1 t1, s1.v1 t2, s1.v1 t3, s1.v1 t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
1040                   QUERY PLAN                  
1041 ----------------------------------------------
1042  Hash Join
1043    Hash Cond: (v1t1.c1 = v1t1.c1)
1044    ->  Hash Join
1045          Hash Cond: (v1t1.c1 = v1t1.c1)
1046          ->  Hash Join
1047                Hash Cond: (v1t1.c1 = v1t1.c1)
1048                ->  Seq Scan on t1 v1t1
1049                ->  Hash
1050                      ->  Seq Scan on t1 v1t1
1051          ->  Hash
1052                ->  Seq Scan on t1 v1t1
1053    ->  Hash
1054          ->  Seq Scan on t1 v1t1
1055 (13 rows)
1056
1057 /*+Leading(t4 t3 t2 t1)*/
1058 EXPLAIN (COSTS false) SELECT * FROM s1.v1 t1, s1.v1 t2, s1.v1 t3, s1.v1 t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
1059 LOG:  pg_hint_plan:
1060 used hint:
1061 not used hint:
1062 Leading(t4 t3 t2 t1)
1063 duplication hint:
1064 error hint:
1065
1066                   QUERY PLAN                  
1067 ----------------------------------------------
1068  Hash Join
1069    Hash Cond: (v1t1.c1 = v1t1.c1)
1070    ->  Hash Join
1071          Hash Cond: (v1t1.c1 = v1t1.c1)
1072          ->  Hash Join
1073                Hash Cond: (v1t1.c1 = v1t1.c1)
1074                ->  Seq Scan on t1 v1t1
1075                ->  Hash
1076                      ->  Seq Scan on t1 v1t1
1077          ->  Hash
1078                ->  Seq Scan on t1 v1t1
1079    ->  Hash
1080          ->  Seq Scan on t1 v1t1
1081 (13 rows)
1082
1083 EXPLAIN (COSTS false) SELECT * FROM s1.v1 t1, s1.v1_ t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
1084                  QUERY PLAN                  
1085 ---------------------------------------------
1086  Hash Join
1087    Hash Cond: (v1t1.c1 = t4.c1)
1088    ->  Hash Join
1089          Hash Cond: (v1t1.c1 = v1t1_.c1)
1090          ->  Hash Join
1091                Hash Cond: (t3.c1 = v1t1.c1)
1092                ->  Seq Scan on t3
1093                ->  Hash
1094                      ->  Seq Scan on t1 v1t1
1095          ->  Hash
1096                ->  Seq Scan on t1 v1t1_
1097    ->  Hash
1098          ->  Seq Scan on t4
1099 (13 rows)
1100
1101 /*+Leading(t4 v1t1_ v1t1 t3)*/
1102 EXPLAIN (COSTS false) SELECT * FROM s1.v1 t1, s1.v1_ t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
1103 LOG:  pg_hint_plan:
1104 used hint:
1105 Leading(t4 v1t1_ v1t1 t3)
1106 not used hint:
1107 duplication hint:
1108 error hint:
1109
1110                   QUERY PLAN                  
1111 ----------------------------------------------
1112  Hash Join
1113    Hash Cond: (v1t1.c1 = t3.c1)
1114    ->  Hash Join
1115          Hash Cond: (v1t1_.c1 = v1t1.c1)
1116          ->  Hash Join
1117                Hash Cond: (t4.c1 = v1t1_.c1)
1118                ->  Seq Scan on t4
1119                ->  Hash
1120                      ->  Seq Scan on t1 v1t1_
1121          ->  Hash
1122                ->  Seq Scan on t1 v1t1
1123    ->  Hash
1124          ->  Seq Scan on t3
1125 (13 rows)
1126
1127 -- No. L-1-6-11
1128 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, (SELECT t4.c1 FROM s1.t4) st4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = st4.c1;
1129                    QUERY PLAN                   
1130 ------------------------------------------------
1131  Merge Join
1132    Merge Cond: (t1.c1 = t2.c1)
1133    ->  Merge Join
1134          Merge Cond: (t1.c1 = t4.c1)
1135          ->  Merge Join
1136                Merge Cond: (t1.c1 = t3.c1)
1137                ->  Index Scan using t1_i1 on t1
1138                ->  Index Scan using t3_i1 on t3
1139          ->  Index Scan using t4_i1 on t4
1140    ->  Sort
1141          Sort Key: t2.c1
1142          ->  Seq Scan on t2
1143 (12 rows)
1144
1145 /*+Leading(st4 t2 t3 t1)*/
1146 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, (SELECT t4.c1 FROM s1.t4) st4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = st4.c1;
1147 LOG:  pg_hint_plan:
1148 used hint:
1149 Leading(st4 t2 t3 t1)
1150 not used hint:
1151 duplication hint:
1152 error hint:
1153
1154                    QUERY PLAN                   
1155 ------------------------------------------------
1156  Nested Loop
1157    ->  Merge Join
1158          Merge Cond: (t1.c1 = t2.c1)
1159          ->  Index Scan using t1_i1 on t1
1160          ->  Sort
1161                Sort Key: t2.c1
1162                ->  Hash Join
1163                      Hash Cond: (t3.c1 = t2.c1)
1164                      ->  Seq Scan on t3
1165                      ->  Hash
1166                            ->  Seq Scan on t2
1167    ->  Index Scan using t4_i1 on t4
1168          Index Cond: (c1 = t1.c1)
1169 (13 rows)
1170
1171 /*+Leading(t4 t2 t3 t1)*/
1172 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, (SELECT t4.c1 FROM s1.t4) st4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = st4.c1;
1173 LOG:  pg_hint_plan:
1174 used hint:
1175 Leading(t4 t2 t3 t1)
1176 not used hint:
1177 duplication hint:
1178 error hint:
1179
1180                       QUERY PLAN                      
1181 ------------------------------------------------------
1182  Merge Join
1183    Merge Cond: (t1.c1 = t2.c1)
1184    ->  Index Scan using t1_i1 on t1
1185    ->  Sort
1186          Sort Key: t2.c1
1187          ->  Hash Join
1188                Hash Cond: (t3.c1 = t2.c1)
1189                ->  Seq Scan on t3
1190                ->  Hash
1191                      ->  Hash Join
1192                            Hash Cond: (t4.c1 = t2.c1)
1193                            ->  Seq Scan on t4
1194                            ->  Hash
1195                                  ->  Seq Scan on t2
1196 (14 rows)
1197
1198 ----
1199 ---- No. L-2-1 complexity query block
1200 ----
1201 -- No. L-2-1-1
1202 EXPLAIN (COSTS false)
1203 SELECT max(bmt1.c1), (
1204 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)'
1205 ), (
1206 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)'
1207 )
1208                     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)'
1209 ;
1210                             QUERY PLAN                             
1211 -------------------------------------------------------------------
1212  Aggregate
1213    InitPlan 1 (returns $0)
1214      ->  Aggregate
1215            ->  Nested Loop
1216                  Join Filter: (b1t1.c1 = b1t4.c1)
1217                  ->  Nested Loop
1218                        Join Filter: (b1t1.c1 = b1t3.c1)
1219                        ->  Nested Loop
1220                              Join Filter: (b1t1.c1 = b1t2.c1)
1221                              ->  Tid Scan on t1 b1t1
1222                                    TID Cond: (ctid = '(1,1)'::tid)
1223                              ->  Seq Scan on t2 b1t2
1224                                    Filter: (ctid = '(1,1)'::tid)
1225                        ->  Tid Scan on t3 b1t3
1226                              TID Cond: (ctid = '(1,1)'::tid)
1227                  ->  Tid Scan on t4 b1t4
1228                        TID Cond: (ctid = '(1,1)'::tid)
1229    InitPlan 2 (returns $1)
1230      ->  Aggregate
1231            ->  Nested Loop
1232                  Join Filter: (b2t1.c1 = b2t4.c1)
1233                  ->  Nested Loop
1234                        Join Filter: (b2t1.c1 = b2t3.c1)
1235                        ->  Nested Loop
1236                              Join Filter: (b2t1.c1 = b2t2.c1)
1237                              ->  Tid Scan on t1 b2t1
1238                                    TID Cond: (ctid = '(1,1)'::tid)
1239                              ->  Seq Scan on t2 b2t2
1240                                    Filter: (ctid = '(1,1)'::tid)
1241                        ->  Tid Scan on t3 b2t3
1242                              TID Cond: (ctid = '(1,1)'::tid)
1243                  ->  Tid Scan on t4 b2t4
1244                        TID Cond: (ctid = '(1,1)'::tid)
1245    ->  Nested Loop
1246          Join Filter: (bmt1.c1 = bmt4.c1)
1247          ->  Nested Loop
1248                Join Filter: (bmt1.c1 = bmt3.c1)
1249                ->  Nested Loop
1250                      Join Filter: (bmt1.c1 = bmt2.c1)
1251                      ->  Tid Scan on t1 bmt1
1252                            TID Cond: (ctid = '(1,1)'::tid)
1253                      ->  Seq Scan on t2 bmt2
1254                            Filter: (ctid = '(1,1)'::tid)
1255                ->  Tid Scan on t3 bmt3
1256                      TID Cond: (ctid = '(1,1)'::tid)
1257          ->  Tid Scan on t4 bmt4
1258                TID Cond: (ctid = '(1,1)'::tid)
1259 (47 rows)
1260
1261 /*+
1262 Leading(bmt1 bmt2 bmt3 bmt4 b1t2 b1t3 b1t4 b1t1 b2t3 b2t4 b2t1 b2t2)
1263 */
1264 EXPLAIN (COSTS false)
1265 SELECT max(bmt1.c1), (
1266 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)'
1267 ), (
1268 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)'
1269 )
1270                     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)'
1271 ;
1272 LOG:  pg_hint_plan:
1273 used hint:
1274 Leading(bmt1 bmt2 bmt3 bmt4 b1t2 b1t3 b1t4 b1t1 b2t3 b2t4 b2t1 b2t2)
1275 not used hint:
1276 duplication hint:
1277 error hint:
1278
1279                             QUERY PLAN                             
1280 -------------------------------------------------------------------
1281  Aggregate
1282    InitPlan 1 (returns $0)
1283      ->  Aggregate
1284            ->  Nested Loop
1285                  Join Filter: (b1t2.c1 = b1t1.c1)
1286                  ->  Nested Loop
1287                        Join Filter: (b1t2.c1 = b1t4.c1)
1288                        ->  Nested Loop
1289                              Join Filter: (b1t2.c1 = b1t3.c1)
1290                              ->  Seq Scan on t2 b1t2
1291                                    Filter: (ctid = '(1,1)'::tid)
1292                              ->  Tid Scan on t3 b1t3
1293                                    TID Cond: (ctid = '(1,1)'::tid)
1294                        ->  Tid Scan on t4 b1t4
1295                              TID Cond: (ctid = '(1,1)'::tid)
1296                  ->  Tid Scan on t1 b1t1
1297                        TID Cond: (ctid = '(1,1)'::tid)
1298    InitPlan 2 (returns $1)
1299      ->  Aggregate
1300            ->  Nested Loop
1301                  Join Filter: (b2t1.c1 = b2t2.c1)
1302                  ->  Nested Loop
1303                        Join Filter: (b2t3.c1 = b2t1.c1)
1304                        ->  Nested Loop
1305                              Join Filter: (b2t3.c1 = b2t4.c1)
1306                              ->  Tid Scan on t3 b2t3
1307                                    TID Cond: (ctid = '(1,1)'::tid)
1308                              ->  Tid Scan on t4 b2t4
1309                                    TID Cond: (ctid = '(1,1)'::tid)
1310                        ->  Tid Scan on t1 b2t1
1311                              TID Cond: (ctid = '(1,1)'::tid)
1312                  ->  Seq Scan on t2 b2t2
1313                        Filter: (ctid = '(1,1)'::tid)
1314    ->  Nested Loop
1315          Join Filter: (bmt1.c1 = bmt4.c1)
1316          ->  Nested Loop
1317                Join Filter: (bmt1.c1 = bmt3.c1)
1318                ->  Nested Loop
1319                      Join Filter: (bmt1.c1 = bmt2.c1)
1320                      ->  Tid Scan on t1 bmt1
1321                            TID Cond: (ctid = '(1,1)'::tid)
1322                      ->  Seq Scan on t2 bmt2
1323                            Filter: (ctid = '(1,1)'::tid)
1324                ->  Tid Scan on t3 bmt3
1325                      TID Cond: (ctid = '(1,1)'::tid)
1326          ->  Tid Scan on t4 bmt4
1327                TID Cond: (ctid = '(1,1)'::tid)
1328 (47 rows)
1329
1330 -- No. L-2-1-2
1331 EXPLAIN (COSTS false)
1332 SELECT max(bmt1.c1), (
1333 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)'
1334 ), (
1335 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)'
1336 ), (
1337 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)'
1338 )
1339                     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)'
1340 ;
1341                             QUERY PLAN                             
1342 -------------------------------------------------------------------
1343  Aggregate
1344    InitPlan 1 (returns $0)
1345      ->  Aggregate
1346            ->  Nested Loop
1347                  Join Filter: (b1t1.c1 = b1t4.c1)
1348                  ->  Nested Loop
1349                        Join Filter: (b1t1.c1 = b1t3.c1)
1350                        ->  Nested Loop
1351                              Join Filter: (b1t1.c1 = b1t2.c1)
1352                              ->  Tid Scan on t1 b1t1
1353                                    TID Cond: (ctid = '(1,1)'::tid)
1354                              ->  Seq Scan on t2 b1t2
1355                                    Filter: (ctid = '(1,1)'::tid)
1356                        ->  Tid Scan on t3 b1t3
1357                              TID Cond: (ctid = '(1,1)'::tid)
1358                  ->  Tid Scan on t4 b1t4
1359                        TID Cond: (ctid = '(1,1)'::tid)
1360    InitPlan 2 (returns $1)
1361      ->  Aggregate
1362            ->  Nested Loop
1363                  Join Filter: (b2t1.c1 = b2t4.c1)
1364                  ->  Nested Loop
1365                        Join Filter: (b2t1.c1 = b2t3.c1)
1366                        ->  Nested Loop
1367                              Join Filter: (b2t1.c1 = b2t2.c1)
1368                              ->  Tid Scan on t1 b2t1
1369                                    TID Cond: (ctid = '(1,1)'::tid)
1370                              ->  Seq Scan on t2 b2t2
1371                                    Filter: (ctid = '(1,1)'::tid)
1372                        ->  Tid Scan on t3 b2t3
1373                              TID Cond: (ctid = '(1,1)'::tid)
1374                  ->  Tid Scan on t4 b2t4
1375                        TID Cond: (ctid = '(1,1)'::tid)
1376    InitPlan 3 (returns $2)
1377      ->  Aggregate
1378            ->  Nested Loop
1379                  Join Filter: (b3t1.c1 = b3t4.c1)
1380                  ->  Nested Loop
1381                        Join Filter: (b3t1.c1 = b3t3.c1)
1382                        ->  Nested Loop
1383                              Join Filter: (b3t1.c1 = b3t2.c1)
1384                              ->  Tid Scan on t1 b3t1
1385                                    TID Cond: (ctid = '(1,1)'::tid)
1386                              ->  Seq Scan on t2 b3t2
1387                                    Filter: (ctid = '(1,1)'::tid)
1388                        ->  Tid Scan on t3 b3t3
1389                              TID Cond: (ctid = '(1,1)'::tid)
1390                  ->  Tid Scan on t4 b3t4
1391                        TID Cond: (ctid = '(1,1)'::tid)
1392    ->  Nested Loop
1393          Join Filter: (bmt1.c1 = bmt4.c1)
1394          ->  Nested Loop
1395                Join Filter: (bmt1.c1 = bmt3.c1)
1396                ->  Nested Loop
1397                      Join Filter: (bmt1.c1 = bmt2.c1)
1398                      ->  Tid Scan on t1 bmt1
1399                            TID Cond: (ctid = '(1,1)'::tid)
1400                      ->  Seq Scan on t2 bmt2
1401                            Filter: (ctid = '(1,1)'::tid)
1402                ->  Tid Scan on t3 bmt3
1403                      TID Cond: (ctid = '(1,1)'::tid)
1404          ->  Tid Scan on t4 bmt4
1405                TID Cond: (ctid = '(1,1)'::tid)
1406 (63 rows)
1407
1408 /*+
1409 Leading(bmt1 bmt2 bmt3 bmt4 b1t2 b1t3 b1t4 b1t1 b2t3 b2t4 b2t1 b2t2 b3t4 b3t1 b3t2 b3t3)
1410 */
1411 EXPLAIN (COSTS false)
1412 SELECT max(bmt1.c1), (
1413 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)'
1414 ), (
1415 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)'
1416 ), (
1417 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)'
1418 )
1419                     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)'
1420 ;
1421 LOG:  pg_hint_plan:
1422 used hint:
1423 Leading(bmt1 bmt2 bmt3 bmt4 b1t2 b1t3 b1t4 b1t1 b2t3 b2t4 b2t1 b2t2 b3t4 b3t1 b3t2 b3t3)
1424 not used hint:
1425 duplication hint:
1426 error hint:
1427
1428                             QUERY PLAN                             
1429 -------------------------------------------------------------------
1430  Aggregate
1431    InitPlan 1 (returns $0)
1432      ->  Aggregate
1433            ->  Nested Loop
1434                  Join Filter: (b1t2.c1 = b1t1.c1)
1435                  ->  Nested Loop
1436                        Join Filter: (b1t2.c1 = b1t4.c1)
1437                        ->  Nested Loop
1438                              Join Filter: (b1t2.c1 = b1t3.c1)
1439                              ->  Seq Scan on t2 b1t2
1440                                    Filter: (ctid = '(1,1)'::tid)
1441                              ->  Tid Scan on t3 b1t3
1442                                    TID Cond: (ctid = '(1,1)'::tid)
1443                        ->  Tid Scan on t4 b1t4
1444                              TID Cond: (ctid = '(1,1)'::tid)
1445                  ->  Tid Scan on t1 b1t1
1446                        TID Cond: (ctid = '(1,1)'::tid)
1447    InitPlan 2 (returns $1)
1448      ->  Aggregate
1449            ->  Nested Loop
1450                  Join Filter: (b2t1.c1 = b2t2.c1)
1451                  ->  Nested Loop
1452                        Join Filter: (b2t3.c1 = b2t1.c1)
1453                        ->  Nested Loop
1454                              Join Filter: (b2t3.c1 = b2t4.c1)
1455                              ->  Tid Scan on t3 b2t3
1456                                    TID Cond: (ctid = '(1,1)'::tid)
1457                              ->  Tid Scan on t4 b2t4
1458                                    TID Cond: (ctid = '(1,1)'::tid)
1459                        ->  Tid Scan on t1 b2t1
1460                              TID Cond: (ctid = '(1,1)'::tid)
1461                  ->  Seq Scan on t2 b2t2
1462                        Filter: (ctid = '(1,1)'::tid)
1463    InitPlan 3 (returns $2)
1464      ->  Aggregate
1465            ->  Nested Loop
1466                  Join Filter: (b3t1.c1 = b3t3.c1)
1467                  ->  Nested Loop
1468                        Join Filter: (b3t1.c1 = b3t2.c1)
1469                        ->  Nested Loop
1470                              Join Filter: (b3t1.c1 = b3t4.c1)
1471                              ->  Tid Scan on t1 b3t1
1472                                    TID Cond: (ctid = '(1,1)'::tid)
1473                              ->  Tid Scan on t4 b3t4
1474                                    TID Cond: (ctid = '(1,1)'::tid)
1475                        ->  Seq Scan on t2 b3t2
1476                              Filter: (ctid = '(1,1)'::tid)
1477                  ->  Tid Scan on t3 b3t3
1478                        TID Cond: (ctid = '(1,1)'::tid)
1479    ->  Nested Loop
1480          Join Filter: (bmt1.c1 = bmt4.c1)
1481          ->  Nested Loop
1482                Join Filter: (bmt1.c1 = bmt3.c1)
1483                ->  Nested Loop
1484                      Join Filter: (bmt1.c1 = bmt2.c1)
1485                      ->  Tid Scan on t1 bmt1
1486                            TID Cond: (ctid = '(1,1)'::tid)
1487                      ->  Seq Scan on t2 bmt2
1488                            Filter: (ctid = '(1,1)'::tid)
1489                ->  Tid Scan on t3 bmt3
1490                      TID Cond: (ctid = '(1,1)'::tid)
1491          ->  Tid Scan on t4 bmt4
1492                TID Cond: (ctid = '(1,1)'::tid)
1493 (63 rows)
1494
1495 -- No. L-2-1-3
1496 EXPLAIN (COSTS false) 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)';
1497                         QUERY PLAN                         
1498 -----------------------------------------------------------
1499  Aggregate
1500    ->  Nested Loop
1501          Join Filter: (bmt1.c1 = bmt4.c1)
1502          ->  Nested Loop
1503                Join Filter: (bmt1.c1 = bmt3.c1)
1504                ->  Nested Loop
1505                      Join Filter: (bmt1.c1 = bmt2.c1)
1506                      ->  Tid Scan on t1 bmt1
1507                            TID Cond: (ctid = '(1,1)'::tid)
1508                      ->  Seq Scan on t2 bmt2
1509                            Filter: (ctid = '(1,1)'::tid)
1510                ->  Tid Scan on t3 bmt3
1511                      TID Cond: (ctid = '(1,1)'::tid)
1512          ->  Tid Scan on t4 bmt4
1513                TID Cond: (ctid = '(1,1)'::tid)
1514 (15 rows)
1515
1516 /*+
1517 Leading(bmt4 bmt3 bmt2 bmt1)
1518 */
1519 EXPLAIN (COSTS false) 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)';
1520 LOG:  pg_hint_plan:
1521 used hint:
1522 Leading(bmt4 bmt3 bmt2 bmt1)
1523 not used hint:
1524 duplication hint:
1525 error hint:
1526
1527                         QUERY PLAN                         
1528 -----------------------------------------------------------
1529  Aggregate
1530    ->  Nested Loop
1531          Join Filter: (bmt2.c1 = bmt1.c1)
1532          ->  Nested Loop
1533                Join Filter: (bmt3.c1 = bmt2.c1)
1534                ->  Nested Loop
1535                      Join Filter: (bmt3.c1 = bmt4.c1)
1536                      ->  Tid Scan on t3 bmt3
1537                            TID Cond: (ctid = '(1,1)'::tid)
1538                      ->  Tid Scan on t4 bmt4
1539                            TID Cond: (ctid = '(1,1)'::tid)
1540                ->  Seq Scan on t2 bmt2
1541                      Filter: (ctid = '(1,1)'::tid)
1542          ->  Tid Scan on t1 bmt1
1543                TID Cond: (ctid = '(1,1)'::tid)
1544 (15 rows)
1545
1546 -- No. L-2-1-4
1547 EXPLAIN (COSTS false) 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)';
1548                         QUERY PLAN                         
1549 -----------------------------------------------------------
1550  Aggregate
1551    ->  Nested Loop
1552          Join Filter: (bmt1.c1 = bmt4.c1)
1553          ->  Nested Loop
1554                Join Filter: (bmt1.c1 = bmt3.c1)
1555                ->  Nested Loop
1556                      Join Filter: (bmt1.c1 = bmt2.c1)
1557                      ->  Tid Scan on t1 bmt1
1558                            TID Cond: (ctid = '(1,1)'::tid)
1559                      ->  Seq Scan on t2 bmt2
1560                            Filter: (ctid = '(1,1)'::tid)
1561                ->  Tid Scan on t3 bmt3
1562                      TID Cond: (ctid = '(1,1)'::tid)
1563          ->  Tid Scan on t4 bmt4
1564                TID Cond: (ctid = '(1,1)'::tid)
1565 (15 rows)
1566
1567 /*+
1568 Leading(bmt4 bmt3 bmt2 bmt1)
1569 */
1570 EXPLAIN (COSTS false) 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)';
1571 LOG:  pg_hint_plan:
1572 used hint:
1573 Leading(bmt4 bmt3 bmt2 bmt1)
1574 not used hint:
1575 duplication hint:
1576 error hint:
1577
1578                         QUERY PLAN                         
1579 -----------------------------------------------------------
1580  Aggregate
1581    ->  Nested Loop
1582          Join Filter: (bmt2.c1 = bmt1.c1)
1583          ->  Nested Loop
1584                Join Filter: (bmt3.c1 = bmt2.c1)
1585                ->  Nested Loop
1586                      Join Filter: (bmt3.c1 = bmt4.c1)
1587                      ->  Tid Scan on t3 bmt3
1588                            TID Cond: (ctid = '(1,1)'::tid)
1589                      ->  Tid Scan on t4 bmt4
1590                            TID Cond: (ctid = '(1,1)'::tid)
1591                ->  Seq Scan on t2 bmt2
1592                      Filter: (ctid = '(1,1)'::tid)
1593          ->  Tid Scan on t1 bmt1
1594                TID Cond: (ctid = '(1,1)'::tid)
1595 (15 rows)
1596
1597 -- No. L-2-1-5
1598 EXPLAIN (COSTS false)
1599 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)'
1600   AND bmt1.c1 <> (
1601 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)'
1602 ) AND bmt1.c1 <> (
1603 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)'
1604 )
1605 ;
1606                             QUERY PLAN                             
1607 -------------------------------------------------------------------
1608  Aggregate
1609    InitPlan 1 (returns $0)
1610      ->  Aggregate
1611            ->  Nested Loop
1612                  Join Filter: (b1t1.c1 = b1t4.c1)
1613                  ->  Nested Loop
1614                        Join Filter: (b1t1.c1 = b1t3.c1)
1615                        ->  Nested Loop
1616                              Join Filter: (b1t1.c1 = b1t2.c1)
1617                              ->  Tid Scan on t1 b1t1
1618                                    TID Cond: (ctid = '(1,1)'::tid)
1619                              ->  Seq Scan on t2 b1t2
1620                                    Filter: (ctid = '(1,1)'::tid)
1621                        ->  Tid Scan on t3 b1t3
1622                              TID Cond: (ctid = '(1,1)'::tid)
1623                  ->  Tid Scan on t4 b1t4
1624                        TID Cond: (ctid = '(1,1)'::tid)
1625    InitPlan 2 (returns $1)
1626      ->  Aggregate
1627            ->  Nested Loop
1628                  Join Filter: (b2t1.c1 = b2t4.c1)
1629                  ->  Nested Loop
1630                        Join Filter: (b2t1.c1 = b2t3.c1)
1631                        ->  Nested Loop
1632                              Join Filter: (b2t1.c1 = b2t2.c1)
1633                              ->  Tid Scan on t1 b2t1
1634                                    TID Cond: (ctid = '(1,1)'::tid)
1635                              ->  Seq Scan on t2 b2t2
1636                                    Filter: (ctid = '(1,1)'::tid)
1637                        ->  Tid Scan on t3 b2t3
1638                              TID Cond: (ctid = '(1,1)'::tid)
1639                  ->  Tid Scan on t4 b2t4
1640                        TID Cond: (ctid = '(1,1)'::tid)
1641    ->  Nested Loop
1642          Join Filter: (bmt1.c1 = bmt4.c1)
1643          ->  Nested Loop
1644                Join Filter: (bmt1.c1 = bmt2.c1)
1645                ->  Nested Loop
1646                      Join Filter: (bmt1.c1 = bmt3.c1)
1647                      ->  Tid Scan on t1 bmt1
1648                            TID Cond: (ctid = '(1,1)'::tid)
1649                            Filter: ((c1 <> $0) AND (c1 <> $1))
1650                      ->  Tid Scan on t3 bmt3
1651                            TID Cond: (ctid = '(1,1)'::tid)
1652                ->  Seq Scan on t2 bmt2
1653                      Filter: (ctid = '(1,1)'::tid)
1654          ->  Tid Scan on t4 bmt4
1655                TID Cond: (ctid = '(1,1)'::tid)
1656 (48 rows)
1657
1658 /*+
1659 Leading(bmt1 bmt2 bmt3 bmt4 b1t2 b1t3 b1t4 b1t1 b2t3 b2t4 b2t1 b2t2)
1660 */
1661 EXPLAIN (COSTS false)
1662 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)'
1663   AND bmt1.c1 <> (
1664 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)'
1665 ) AND bmt1.c1 <> (
1666 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)'
1667 )
1668 ;
1669 LOG:  pg_hint_plan:
1670 used hint:
1671 Leading(bmt1 bmt2 bmt3 bmt4 b1t2 b1t3 b1t4 b1t1 b2t3 b2t4 b2t1 b2t2)
1672 not used hint:
1673 duplication hint:
1674 error hint:
1675
1676                             QUERY PLAN                             
1677 -------------------------------------------------------------------
1678  Aggregate
1679    InitPlan 1 (returns $0)
1680      ->  Aggregate
1681            ->  Nested Loop
1682                  Join Filter: (b1t2.c1 = b1t1.c1)
1683                  ->  Nested Loop
1684                        Join Filter: (b1t2.c1 = b1t4.c1)
1685                        ->  Nested Loop
1686                              Join Filter: (b1t2.c1 = b1t3.c1)
1687                              ->  Seq Scan on t2 b1t2
1688                                    Filter: (ctid = '(1,1)'::tid)
1689                              ->  Tid Scan on t3 b1t3
1690                                    TID Cond: (ctid = '(1,1)'::tid)
1691                        ->  Tid Scan on t4 b1t4
1692                              TID Cond: (ctid = '(1,1)'::tid)
1693                  ->  Tid Scan on t1 b1t1
1694                        TID Cond: (ctid = '(1,1)'::tid)
1695    InitPlan 2 (returns $1)
1696      ->  Aggregate
1697            ->  Nested Loop
1698                  Join Filter: (b2t1.c1 = b2t2.c1)
1699                  ->  Nested Loop
1700                        Join Filter: (b2t3.c1 = b2t1.c1)
1701                        ->  Nested Loop
1702                              Join Filter: (b2t3.c1 = b2t4.c1)
1703                              ->  Tid Scan on t3 b2t3
1704                                    TID Cond: (ctid = '(1,1)'::tid)
1705                              ->  Tid Scan on t4 b2t4
1706                                    TID Cond: (ctid = '(1,1)'::tid)
1707                        ->  Tid Scan on t1 b2t1
1708                              TID Cond: (ctid = '(1,1)'::tid)
1709                  ->  Seq Scan on t2 b2t2
1710                        Filter: (ctid = '(1,1)'::tid)
1711    ->  Nested Loop
1712          Join Filter: (bmt1.c1 = bmt4.c1)
1713          ->  Nested Loop
1714                Join Filter: (bmt1.c1 = bmt3.c1)
1715                ->  Nested Loop
1716                      Join Filter: (bmt1.c1 = bmt2.c1)
1717                      ->  Tid Scan on t1 bmt1
1718                            TID Cond: (ctid = '(1,1)'::tid)
1719                            Filter: ((c1 <> $0) AND (c1 <> $1))
1720                      ->  Seq Scan on t2 bmt2
1721                            Filter: (ctid = '(1,1)'::tid)
1722                ->  Tid Scan on t3 bmt3
1723                      TID Cond: (ctid = '(1,1)'::tid)
1724          ->  Tid Scan on t4 bmt4
1725                TID Cond: (ctid = '(1,1)'::tid)
1726 (48 rows)
1727
1728 -- No. L-2-1-6
1729 EXPLAIN (COSTS false)
1730 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)'
1731   AND bmt1.c1 <> (
1732 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)'
1733 ) AND bmt1.c1 <> (
1734 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)'
1735 ) AND bmt1.c1 <> (
1736 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)'
1737 )
1738 ;
1739                                   QUERY PLAN                                  
1740 ------------------------------------------------------------------------------
1741  Aggregate
1742    InitPlan 1 (returns $0)
1743      ->  Aggregate
1744            ->  Nested Loop
1745                  Join Filter: (b1t1.c1 = b1t4.c1)
1746                  ->  Nested Loop
1747                        Join Filter: (b1t1.c1 = b1t3.c1)
1748                        ->  Nested Loop
1749                              Join Filter: (b1t1.c1 = b1t2.c1)
1750                              ->  Tid Scan on t1 b1t1
1751                                    TID Cond: (ctid = '(1,1)'::tid)
1752                              ->  Seq Scan on t2 b1t2
1753                                    Filter: (ctid = '(1,1)'::tid)
1754                        ->  Tid Scan on t3 b1t3
1755                              TID Cond: (ctid = '(1,1)'::tid)
1756                  ->  Tid Scan on t4 b1t4
1757                        TID Cond: (ctid = '(1,1)'::tid)
1758    InitPlan 2 (returns $1)
1759      ->  Aggregate
1760            ->  Nested Loop
1761                  Join Filter: (b2t1.c1 = b2t4.c1)
1762                  ->  Nested Loop
1763                        Join Filter: (b2t1.c1 = b2t3.c1)
1764                        ->  Nested Loop
1765                              Join Filter: (b2t1.c1 = b2t2.c1)
1766                              ->  Tid Scan on t1 b2t1
1767                                    TID Cond: (ctid = '(1,1)'::tid)
1768                              ->  Seq Scan on t2 b2t2
1769                                    Filter: (ctid = '(1,1)'::tid)
1770                        ->  Tid Scan on t3 b2t3
1771                              TID Cond: (ctid = '(1,1)'::tid)
1772                  ->  Tid Scan on t4 b2t4
1773                        TID Cond: (ctid = '(1,1)'::tid)
1774    InitPlan 3 (returns $2)
1775      ->  Aggregate
1776            ->  Nested Loop
1777                  Join Filter: (b3t1.c1 = b3t4.c1)
1778                  ->  Nested Loop
1779                        Join Filter: (b3t1.c1 = b3t3.c1)
1780                        ->  Nested Loop
1781                              Join Filter: (b3t1.c1 = b3t2.c1)
1782                              ->  Tid Scan on t1 b3t1
1783                                    TID Cond: (ctid = '(1,1)'::tid)
1784                              ->  Seq Scan on t2 b3t2
1785                                    Filter: (ctid = '(1,1)'::tid)
1786                        ->  Tid Scan on t3 b3t3
1787                              TID Cond: (ctid = '(1,1)'::tid)
1788                  ->  Tid Scan on t4 b3t4
1789                        TID Cond: (ctid = '(1,1)'::tid)
1790    ->  Nested Loop
1791          Join Filter: (bmt1.c1 = bmt4.c1)
1792          ->  Nested Loop
1793                Join Filter: (bmt1.c1 = bmt3.c1)
1794                ->  Nested Loop
1795                      Join Filter: (bmt1.c1 = bmt2.c1)
1796                      ->  Tid Scan on t1 bmt1
1797                            TID Cond: (ctid = '(1,1)'::tid)
1798                            Filter: ((c1 <> $0) AND (c1 <> $1) AND (c1 <> $2))
1799                      ->  Seq Scan on t2 bmt2
1800                            Filter: (ctid = '(1,1)'::tid)
1801                ->  Tid Scan on t3 bmt3
1802                      TID Cond: (ctid = '(1,1)'::tid)
1803          ->  Tid Scan on t4 bmt4
1804                TID Cond: (ctid = '(1,1)'::tid)
1805 (64 rows)
1806
1807 /*+
1808 Leading(bmt1 bmt2 bmt3 bmt4 b1t2 b1t3 b1t4 b1t1 b2t3 b2t4 b2t1 b2t2 b3t4 b3t1 b3t2 b3t3)
1809 */
1810 EXPLAIN (COSTS false)
1811 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)'
1812   AND bmt1.c1 <> (
1813 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)'
1814 ) AND bmt1.c1 <> (
1815 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)'
1816 ) AND bmt1.c1 <> (
1817 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)'
1818 )
1819 ;
1820 LOG:  pg_hint_plan:
1821 used hint:
1822 Leading(bmt1 bmt2 bmt3 bmt4 b1t2 b1t3 b1t4 b1t1 b2t3 b2t4 b2t1 b2t2 b3t4 b3t1 b3t2 b3t3)
1823 not used hint:
1824 duplication hint:
1825 error hint:
1826
1827                                   QUERY PLAN                                  
1828 ------------------------------------------------------------------------------
1829  Aggregate
1830    InitPlan 1 (returns $0)
1831      ->  Aggregate
1832            ->  Nested Loop
1833                  Join Filter: (b1t2.c1 = b1t1.c1)
1834                  ->  Nested Loop
1835                        Join Filter: (b1t2.c1 = b1t4.c1)
1836                        ->  Nested Loop
1837                              Join Filter: (b1t2.c1 = b1t3.c1)
1838                              ->  Seq Scan on t2 b1t2
1839                                    Filter: (ctid = '(1,1)'::tid)
1840                              ->  Tid Scan on t3 b1t3
1841                                    TID Cond: (ctid = '(1,1)'::tid)
1842                        ->  Tid Scan on t4 b1t4
1843                              TID Cond: (ctid = '(1,1)'::tid)
1844                  ->  Tid Scan on t1 b1t1
1845                        TID Cond: (ctid = '(1,1)'::tid)
1846    InitPlan 2 (returns $1)
1847      ->  Aggregate
1848            ->  Nested Loop
1849                  Join Filter: (b2t1.c1 = b2t2.c1)
1850                  ->  Nested Loop
1851                        Join Filter: (b2t3.c1 = b2t1.c1)
1852                        ->  Nested Loop
1853                              Join Filter: (b2t3.c1 = b2t4.c1)
1854                              ->  Tid Scan on t3 b2t3
1855                                    TID Cond: (ctid = '(1,1)'::tid)
1856                              ->  Tid Scan on t4 b2t4
1857                                    TID Cond: (ctid = '(1,1)'::tid)
1858                        ->  Tid Scan on t1 b2t1
1859                              TID Cond: (ctid = '(1,1)'::tid)
1860                  ->  Seq Scan on t2 b2t2
1861                        Filter: (ctid = '(1,1)'::tid)
1862    InitPlan 3 (returns $2)
1863      ->  Aggregate
1864            ->  Nested Loop
1865                  Join Filter: (b3t1.c1 = b3t3.c1)
1866                  ->  Nested Loop
1867                        Join Filter: (b3t1.c1 = b3t2.c1)
1868                        ->  Nested Loop
1869                              Join Filter: (b3t1.c1 = b3t4.c1)
1870                              ->  Tid Scan on t1 b3t1
1871                                    TID Cond: (ctid = '(1,1)'::tid)
1872                              ->  Tid Scan on t4 b3t4
1873                                    TID Cond: (ctid = '(1,1)'::tid)
1874                        ->  Seq Scan on t2 b3t2
1875                              Filter: (ctid = '(1,1)'::tid)
1876                  ->  Tid Scan on t3 b3t3
1877                        TID Cond: (ctid = '(1,1)'::tid)
1878    ->  Nested Loop
1879          Join Filter: (bmt1.c1 = bmt4.c1)
1880          ->  Nested Loop
1881                Join Filter: (bmt1.c1 = bmt3.c1)
1882                ->  Nested Loop
1883                      Join Filter: (bmt1.c1 = bmt2.c1)
1884                      ->  Tid Scan on t1 bmt1
1885                            TID Cond: (ctid = '(1,1)'::tid)
1886                            Filter: ((c1 <> $0) AND (c1 <> $1) AND (c1 <> $2))
1887                      ->  Seq Scan on t2 bmt2
1888                            Filter: (ctid = '(1,1)'::tid)
1889                ->  Tid Scan on t3 bmt3
1890                      TID Cond: (ctid = '(1,1)'::tid)
1891          ->  Tid Scan on t4 bmt4
1892                TID Cond: (ctid = '(1,1)'::tid)
1893 (64 rows)
1894
1895 -- No. L-2-1-7
1896 EXPLAIN (COSTS false)
1897 WITH c1 (c1) AS (
1898 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)'
1899 )
1900 , c2 (c1) AS (
1901 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)'
1902 )
1903 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4
1904 , c1, c2
1905                                                                         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)'
1906 AND bmt1.c1 = c1.c1
1907 AND bmt1.c1 = c2.c1
1908 ;
1909                               QUERY PLAN                               
1910 -----------------------------------------------------------------------
1911  Aggregate
1912    CTE c1
1913      ->  Aggregate
1914            ->  Nested Loop
1915                  Join Filter: (b1t1.c1 = b1t4.c1)
1916                  ->  Nested Loop
1917                        Join Filter: (b1t1.c1 = b1t3.c1)
1918                        ->  Nested Loop
1919                              Join Filter: (b1t1.c1 = b1t2.c1)
1920                              ->  Tid Scan on t1 b1t1
1921                                    TID Cond: (ctid = '(1,1)'::tid)
1922                              ->  Seq Scan on t2 b1t2
1923                                    Filter: (ctid = '(1,1)'::tid)
1924                        ->  Tid Scan on t3 b1t3
1925                              TID Cond: (ctid = '(1,1)'::tid)
1926                  ->  Tid Scan on t4 b1t4
1927                        TID Cond: (ctid = '(1,1)'::tid)
1928    CTE c2
1929      ->  Aggregate
1930            ->  Nested Loop
1931                  Join Filter: (b2t1.c1 = b2t4.c1)
1932                  ->  Nested Loop
1933                        Join Filter: (b2t1.c1 = b2t3.c1)
1934                        ->  Nested Loop
1935                              Join Filter: (b2t1.c1 = b2t2.c1)
1936                              ->  Tid Scan on t1 b2t1
1937                                    TID Cond: (ctid = '(1,1)'::tid)
1938                              ->  Seq Scan on t2 b2t2
1939                                    Filter: (ctid = '(1,1)'::tid)
1940                        ->  Tid Scan on t3 b2t3
1941                              TID Cond: (ctid = '(1,1)'::tid)
1942                  ->  Tid Scan on t4 b2t4
1943                        TID Cond: (ctid = '(1,1)'::tid)
1944    ->  Nested Loop
1945          Join Filter: (bmt1.c1 = c2.c1)
1946          ->  Nested Loop
1947                Join Filter: (bmt1.c1 = c1.c1)
1948                ->  Nested Loop
1949                      Join Filter: (bmt1.c1 = bmt4.c1)
1950                      ->  Nested Loop
1951                            Join Filter: (bmt1.c1 = bmt3.c1)
1952                            ->  Nested Loop
1953                                  Join Filter: (bmt1.c1 = bmt2.c1)
1954                                  ->  Tid Scan on t1 bmt1
1955                                        TID Cond: (ctid = '(1,1)'::tid)
1956                                  ->  Seq Scan on t2 bmt2
1957                                        Filter: (ctid = '(1,1)'::tid)
1958                            ->  Tid Scan on t3 bmt3
1959                                  TID Cond: (ctid = '(1,1)'::tid)
1960                      ->  Tid Scan on t4 bmt4
1961                            TID Cond: (ctid = '(1,1)'::tid)
1962                ->  CTE Scan on c1
1963          ->  CTE Scan on c2
1964 (53 rows)
1965
1966 /*+
1967 Leading(c2 c1 bmt1 bmt2 bmt3 bmt4 b1t2 b1t3 b1t4 b1t1 b2t3 b2t4 b2t1 b2t2)
1968 */
1969 EXPLAIN (COSTS false)
1970 WITH c1 (c1) AS (
1971 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)'
1972 )
1973 , c2 (c1) AS (
1974 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)'
1975 )
1976 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4
1977 , c1, c2
1978                                                                         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)'
1979 AND bmt1.c1 = c1.c1
1980 AND bmt1.c1 = c2.c1
1981 ;
1982 LOG:  pg_hint_plan:
1983 used hint:
1984 Leading(c2 c1 bmt1 bmt2 bmt3 bmt4 b1t2 b1t3 b1t4 b1t1 b2t3 b2t4 b2t1 b2t2)
1985 not used hint:
1986 duplication hint:
1987 error hint:
1988
1989                             QUERY PLAN                             
1990 -------------------------------------------------------------------
1991  Aggregate
1992    CTE c1
1993      ->  Aggregate
1994            ->  Nested Loop
1995                  Join Filter: (b1t2.c1 = b1t1.c1)
1996                  ->  Nested Loop
1997                        Join Filter: (b1t2.c1 = b1t4.c1)
1998                        ->  Nested Loop
1999                              Join Filter: (b1t2.c1 = b1t3.c1)
2000                              ->  Seq Scan on t2 b1t2
2001                                    Filter: (ctid = '(1,1)'::tid)
2002                              ->  Tid Scan on t3 b1t3
2003                                    TID Cond: (ctid = '(1,1)'::tid)
2004                        ->  Tid Scan on t4 b1t4
2005                              TID Cond: (ctid = '(1,1)'::tid)
2006                  ->  Tid Scan on t1 b1t1
2007                        TID Cond: (ctid = '(1,1)'::tid)
2008    CTE c2
2009      ->  Aggregate
2010            ->  Nested Loop
2011                  Join Filter: (b2t1.c1 = b2t2.c1)
2012                  ->  Nested Loop
2013                        Join Filter: (b2t3.c1 = b2t1.c1)
2014                        ->  Nested Loop
2015                              Join Filter: (b2t3.c1 = b2t4.c1)
2016                              ->  Tid Scan on t3 b2t3
2017                                    TID Cond: (ctid = '(1,1)'::tid)
2018                              ->  Tid Scan on t4 b2t4
2019                                    TID Cond: (ctid = '(1,1)'::tid)
2020                        ->  Tid Scan on t1 b2t1
2021                              TID Cond: (ctid = '(1,1)'::tid)
2022                  ->  Seq Scan on t2 b2t2
2023                        Filter: (ctid = '(1,1)'::tid)
2024    ->  Nested Loop
2025          Join Filter: (bmt1.c1 = bmt4.c1)
2026          ->  Nested Loop
2027                Join Filter: (bmt1.c1 = bmt3.c1)
2028                ->  Nested Loop
2029                      Join Filter: (bmt1.c1 = bmt2.c1)
2030                      ->  Nested Loop
2031                            Join Filter: (c1.c1 = bmt1.c1)
2032                            ->  Nested Loop
2033                                  Join Filter: (c1.c1 = c2.c1)
2034                                  ->  CTE Scan on c1
2035                                  ->  CTE Scan on c2
2036                            ->  Tid Scan on t1 bmt1
2037                                  TID Cond: (ctid = '(1,1)'::tid)
2038                      ->  Seq Scan on t2 bmt2
2039                            Filter: (ctid = '(1,1)'::tid)
2040                ->  Tid Scan on t3 bmt3
2041                      TID Cond: (ctid = '(1,1)'::tid)
2042          ->  Tid Scan on t4 bmt4
2043                TID Cond: (ctid = '(1,1)'::tid)
2044 (53 rows)
2045
2046 -- No. L-2-1-8
2047 EXPLAIN (COSTS false)
2048 WITH c1 (c1) AS (
2049 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)'
2050 )
2051 , c2 (c1) AS (
2052 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)'
2053 )
2054 , c3 (c1) AS (
2055 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)'
2056 )
2057 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4
2058 , c1, c2, c3
2059                                                                         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)'
2060 AND bmt1.c1 = c1.c1
2061 AND bmt1.c1 = c2.c1
2062 AND bmt1.c1 = c3.c1
2063 ;
2064                                  QUERY PLAN                                  
2065 -----------------------------------------------------------------------------
2066  Aggregate
2067    CTE c1
2068      ->  Aggregate
2069            ->  Nested Loop
2070                  Join Filter: (b1t1.c1 = b1t4.c1)
2071                  ->  Nested Loop
2072                        Join Filter: (b1t1.c1 = b1t3.c1)
2073                        ->  Nested Loop
2074                              Join Filter: (b1t1.c1 = b1t2.c1)
2075                              ->  Tid Scan on t1 b1t1
2076                                    TID Cond: (ctid = '(1,1)'::tid)
2077                              ->  Seq Scan on t2 b1t2
2078                                    Filter: (ctid = '(1,1)'::tid)
2079                        ->  Tid Scan on t3 b1t3
2080                              TID Cond: (ctid = '(1,1)'::tid)
2081                  ->  Tid Scan on t4 b1t4
2082                        TID Cond: (ctid = '(1,1)'::tid)
2083    CTE c2
2084      ->  Aggregate
2085            ->  Nested Loop
2086                  Join Filter: (b2t1.c1 = b2t4.c1)
2087                  ->  Nested Loop
2088                        Join Filter: (b2t1.c1 = b2t3.c1)
2089                        ->  Nested Loop
2090                              Join Filter: (b2t1.c1 = b2t2.c1)
2091                              ->  Tid Scan on t1 b2t1
2092                                    TID Cond: (ctid = '(1,1)'::tid)
2093                              ->  Seq Scan on t2 b2t2
2094                                    Filter: (ctid = '(1,1)'::tid)
2095                        ->  Tid Scan on t3 b2t3
2096                              TID Cond: (ctid = '(1,1)'::tid)
2097                  ->  Tid Scan on t4 b2t4
2098                        TID Cond: (ctid = '(1,1)'::tid)
2099    CTE c3
2100      ->  Aggregate
2101            ->  Nested Loop
2102                  Join Filter: (b3t1.c1 = b3t4.c1)
2103                  ->  Nested Loop
2104                        Join Filter: (b3t1.c1 = b3t3.c1)
2105                        ->  Nested Loop
2106                              Join Filter: (b3t1.c1 = b3t2.c1)
2107                              ->  Tid Scan on t1 b3t1
2108                                    TID Cond: (ctid = '(1,1)'::tid)
2109                              ->  Seq Scan on t2 b3t2
2110                                    Filter: (ctid = '(1,1)'::tid)
2111                        ->  Tid Scan on t3 b3t3
2112                              TID Cond: (ctid = '(1,1)'::tid)
2113                  ->  Tid Scan on t4 b3t4
2114                        TID Cond: (ctid = '(1,1)'::tid)
2115    ->  Nested Loop
2116          Join Filter: (bmt1.c1 = c3.c1)
2117          ->  Nested Loop
2118                Join Filter: (bmt1.c1 = c2.c1)
2119                ->  Nested Loop
2120                      Join Filter: (bmt1.c1 = c1.c1)
2121                      ->  Nested Loop
2122                            Join Filter: (bmt1.c1 = bmt4.c1)
2123                            ->  Nested Loop
2124                                  Join Filter: (bmt1.c1 = bmt3.c1)
2125                                  ->  Nested Loop
2126                                        Join Filter: (bmt1.c1 = bmt2.c1)
2127                                        ->  Tid Scan on t1 bmt1
2128                                              TID Cond: (ctid = '(1,1)'::tid)
2129                                        ->  Seq Scan on t2 bmt2
2130                                              Filter: (ctid = '(1,1)'::tid)
2131                                  ->  Tid Scan on t3 bmt3
2132                                        TID Cond: (ctid = '(1,1)'::tid)
2133                            ->  Tid Scan on t4 bmt4
2134                                  TID Cond: (ctid = '(1,1)'::tid)
2135                      ->  CTE Scan on c1
2136                ->  CTE Scan on c2
2137          ->  CTE Scan on c3
2138 (72 rows)
2139
2140 /*+
2141 Leading(c3 c2 c1 bmt1 bmt2 bmt3 bmt4 b1t2 b1t3 b1t4 b1t1 b2t3 b2t4 b2t1 b2t2 b3t4 b3t1 b3t2 b3t3)
2142 */
2143 EXPLAIN (COSTS false)
2144 WITH c1 (c1) AS (
2145 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)'
2146 )
2147 , c2 (c1) AS (
2148 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)'
2149 )
2150 , c3 (c1) AS (
2151 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)'
2152 )
2153 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4
2154 , c1, c2, c3
2155                                                                         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)'
2156 AND bmt1.c1 = c1.c1
2157 AND bmt1.c1 = c2.c1
2158 AND bmt1.c1 = c3.c1
2159 ;
2160 LOG:  pg_hint_plan:
2161 used hint:
2162 Leading(c3 c2 c1 bmt1 bmt2 bmt3 bmt4 b1t2 b1t3 b1t4 b1t1 b2t3 b2t4 b2t1 b2t2 b3t4 b3t1 b3t2 b3t3)
2163 not used hint:
2164 duplication hint:
2165 error hint:
2166
2167                              QUERY PLAN                             
2168 --------------------------------------------------------------------
2169  Aggregate
2170    CTE c1
2171      ->  Aggregate
2172            ->  Nested Loop
2173                  Join Filter: (b1t2.c1 = b1t1.c1)
2174                  ->  Nested Loop
2175                        Join Filter: (b1t2.c1 = b1t4.c1)
2176                        ->  Nested Loop
2177                              Join Filter: (b1t2.c1 = b1t3.c1)
2178                              ->  Seq Scan on t2 b1t2
2179                                    Filter: (ctid = '(1,1)'::tid)
2180                              ->  Tid Scan on t3 b1t3
2181                                    TID Cond: (ctid = '(1,1)'::tid)
2182                        ->  Tid Scan on t4 b1t4
2183                              TID Cond: (ctid = '(1,1)'::tid)
2184                  ->  Tid Scan on t1 b1t1
2185                        TID Cond: (ctid = '(1,1)'::tid)
2186    CTE c2
2187      ->  Aggregate
2188            ->  Nested Loop
2189                  Join Filter: (b2t1.c1 = b2t2.c1)
2190                  ->  Nested Loop
2191                        Join Filter: (b2t3.c1 = b2t1.c1)
2192                        ->  Nested Loop
2193                              Join Filter: (b2t3.c1 = b2t4.c1)
2194                              ->  Tid Scan on t3 b2t3
2195                                    TID Cond: (ctid = '(1,1)'::tid)
2196                              ->  Tid Scan on t4 b2t4
2197                                    TID Cond: (ctid = '(1,1)'::tid)
2198                        ->  Tid Scan on t1 b2t1
2199                              TID Cond: (ctid = '(1,1)'::tid)
2200                  ->  Seq Scan on t2 b2t2
2201                        Filter: (ctid = '(1,1)'::tid)
2202    CTE c3
2203      ->  Aggregate
2204            ->  Nested Loop
2205                  Join Filter: (b3t1.c1 = b3t3.c1)
2206                  ->  Nested Loop
2207                        Join Filter: (b3t1.c1 = b3t2.c1)
2208                        ->  Nested Loop
2209                              Join Filter: (b3t1.c1 = b3t4.c1)
2210                              ->  Tid Scan on t1 b3t1
2211                                    TID Cond: (ctid = '(1,1)'::tid)
2212                              ->  Tid Scan on t4 b3t4
2213                                    TID Cond: (ctid = '(1,1)'::tid)
2214                        ->  Seq Scan on t2 b3t2
2215                              Filter: (ctid = '(1,1)'::tid)
2216                  ->  Tid Scan on t3 b3t3
2217                        TID Cond: (ctid = '(1,1)'::tid)
2218    ->  Nested Loop
2219          Join Filter: (bmt1.c1 = bmt4.c1)
2220          ->  Nested Loop
2221                Join Filter: (bmt1.c1 = bmt3.c1)
2222                ->  Nested Loop
2223                      Join Filter: (bmt1.c1 = bmt2.c1)
2224                      ->  Nested Loop
2225                            Join Filter: (c1.c1 = bmt1.c1)
2226                            ->  Nested Loop
2227                                  Join Filter: (c2.c1 = c1.c1)
2228                                  ->  Nested Loop
2229                                        Join Filter: (c2.c1 = c3.c1)
2230                                        ->  CTE Scan on c2
2231                                        ->  CTE Scan on c3
2232                                  ->  CTE Scan on c1
2233                            ->  Tid Scan on t1 bmt1
2234                                  TID Cond: (ctid = '(1,1)'::tid)
2235                      ->  Seq Scan on t2 bmt2
2236                            Filter: (ctid = '(1,1)'::tid)
2237                ->  Tid Scan on t3 bmt3
2238                      TID Cond: (ctid = '(1,1)'::tid)
2239          ->  Tid Scan on t4 bmt4
2240                TID Cond: (ctid = '(1,1)'::tid)
2241 (72 rows)
2242
2243 ----
2244 ---- No. L-2-2 the number of the tables per quiry block
2245 ----
2246 -- No. L-2-2-1
2247 EXPLAIN (COSTS false)
2248 WITH c1 (c1) AS (
2249 SELECT max(b1t1.c1) FROM s1.t1 b1t1 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = 1
2250 )
2251 SELECT max(bmt1.c1), (
2252 SELECT max(b2t1.c1) FROM s1.t1 b2t1 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = 1
2253 )
2254                     FROM s1.t1 bmt1, c1 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = 1
2255 AND bmt1.c1 <> (
2256 SELECT max(b3t1.c1) FROM s1.t1 b3t1 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = 1
2257 )
2258 ;
2259                            QUERY PLAN                            
2260 -----------------------------------------------------------------
2261  Aggregate
2262    CTE c1
2263      ->  Result
2264            InitPlan 1 (returns $0)
2265              ->  Limit
2266                    ->  Tid Scan on t1 b1t1
2267                          TID Cond: (ctid = '(1,1)'::tid)
2268                          Filter: ((c1 IS NOT NULL) AND (c1 = 1))
2269    InitPlan 4 (returns $3)
2270      ->  Result
2271            InitPlan 3 (returns $2)
2272              ->  Limit
2273                    ->  Tid Scan on t1 b2t1
2274                          TID Cond: (ctid = '(1,1)'::tid)
2275                          Filter: ((c1 IS NOT NULL) AND (c1 = 1))
2276    InitPlan 6 (returns $5)
2277      ->  Result
2278            InitPlan 5 (returns $4)
2279              ->  Limit
2280                    ->  Tid Scan on t1 b3t1
2281                          TID Cond: (ctid = '(1,1)'::tid)
2282                          Filter: ((c1 IS NOT NULL) AND (c1 = 1))
2283    ->  Nested Loop
2284          ->  Tid Scan on t1 bmt1
2285                TID Cond: (ctid = '(1,1)'::tid)
2286                Filter: ((c1 <> $5) AND (c1 = 1))
2287          ->  CTE Scan on c1
2288 (27 rows)
2289
2290 /*+
2291 Leading(c1 bmt1 b1t1 b2t1 b3t1)
2292 */
2293 EXPLAIN (COSTS false)
2294 WITH c1 (c1) AS (
2295 SELECT max(b1t1.c1) FROM s1.t1 b1t1 WHERE b1t1.ctid = '(1,1)' AND b1t1.c1 = 1
2296 )
2297 SELECT max(bmt1.c1), (
2298 SELECT max(b2t1.c1) FROM s1.t1 b2t1 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = 1
2299 )
2300                     FROM s1.t1 bmt1, c1 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = 1
2301 AND bmt1.c1 <> (
2302 SELECT max(b3t1.c1) FROM s1.t1 b3t1 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = 1
2303 )
2304 ;
2305 LOG:  pg_hint_plan:
2306 used hint:
2307 Leading(c1 bmt1 b1t1 b2t1 b3t1)
2308 not used hint:
2309 duplication hint:
2310 error hint:
2311
2312                            QUERY PLAN                            
2313 -----------------------------------------------------------------
2314  Aggregate
2315    CTE c1
2316      ->  Result
2317            InitPlan 1 (returns $0)
2318              ->  Limit
2319                    ->  Tid Scan on t1 b1t1
2320                          TID Cond: (ctid = '(1,1)'::tid)
2321                          Filter: ((c1 IS NOT NULL) AND (c1 = 1))
2322    InitPlan 4 (returns $3)
2323      ->  Result
2324            InitPlan 3 (returns $2)
2325              ->  Limit
2326                    ->  Tid Scan on t1 b2t1
2327                          TID Cond: (ctid = '(1,1)'::tid)
2328                          Filter: ((c1 IS NOT NULL) AND (c1 = 1))
2329    InitPlan 6 (returns $5)
2330      ->  Result
2331            InitPlan 5 (returns $4)
2332              ->  Limit
2333                    ->  Tid Scan on t1 b3t1
2334                          TID Cond: (ctid = '(1,1)'::tid)
2335                          Filter: ((c1 IS NOT NULL) AND (c1 = 1))
2336    ->  Nested Loop
2337          ->  Tid Scan on t1 bmt1
2338                TID Cond: (ctid = '(1,1)'::tid)
2339                Filter: ((c1 <> $5) AND (c1 = 1))
2340          ->  CTE Scan on c1
2341 (27 rows)
2342
2343 -- No. L-2-2-2
2344 EXPLAIN (COSTS false)
2345 WITH c1 (c1) AS (
2346 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)'
2347 )
2348 SELECT max(bmt1.c1), (
2349 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)'
2350 )
2351                     FROM s1.t1 bmt1, s1.t2 bmt2, c1 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)'
2352 AND bmt1.c1 = c1.c1
2353 AND bmt1.c1 <> (
2354 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)'
2355 )
2356 ;
2357                       QUERY PLAN                       
2358 -------------------------------------------------------
2359  Aggregate
2360    CTE c1
2361      ->  Aggregate
2362            ->  Nested Loop
2363                  Join Filter: (b1t1.c1 = b1t2.c1)
2364                  ->  Tid Scan on t1 b1t1
2365                        TID Cond: (ctid = '(1,1)'::tid)
2366                  ->  Seq Scan on t2 b1t2
2367                        Filter: (ctid = '(1,1)'::tid)
2368    InitPlan 2 (returns $1)
2369      ->  Aggregate
2370            ->  Nested Loop
2371                  Join Filter: (b2t1.c1 = b2t2.c1)
2372                  ->  Tid Scan on t1 b2t1
2373                        TID Cond: (ctid = '(1,1)'::tid)
2374                  ->  Seq Scan on t2 b2t2
2375                        Filter: (ctid = '(1,1)'::tid)
2376    InitPlan 3 (returns $2)
2377      ->  Aggregate
2378            ->  Nested Loop
2379                  Join Filter: (b3t1.c1 = b3t2.c1)
2380                  ->  Tid Scan on t1 b3t1
2381                        TID Cond: (ctid = '(1,1)'::tid)
2382                  ->  Seq Scan on t2 b3t2
2383                        Filter: (ctid = '(1,1)'::tid)
2384    ->  Nested Loop
2385          Join Filter: (bmt1.c1 = c1.c1)
2386          ->  Nested Loop
2387                Join Filter: (bmt1.c1 = bmt2.c1)
2388                ->  Tid Scan on t1 bmt1
2389                      TID Cond: (ctid = '(1,1)'::tid)
2390                      Filter: (c1 <> $2)
2391                ->  Seq Scan on t2 bmt2
2392                      Filter: (ctid = '(1,1)'::tid)
2393          ->  CTE Scan on c1
2394 (35 rows)
2395
2396 /*+
2397 Leading(c1 bmt2 b1t2 b2t2 b3t2 bmt1 b1t1 b2t1 b3t1)
2398 */
2399 EXPLAIN (COSTS false)
2400 WITH c1 (c1) AS (
2401 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)'
2402 )
2403 SELECT max(bmt1.c1), (
2404 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)'
2405 )
2406                     FROM s1.t1 bmt1, s1.t2 bmt2, c1 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)'
2407 AND bmt1.c1 = c1.c1
2408 AND bmt1.c1 <> (
2409 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)'
2410 )
2411 ;
2412 LOG:  pg_hint_plan:
2413 used hint:
2414 Leading(c1 bmt2 b1t2 b2t2 b3t2 bmt1 b1t1 b2t1 b3t1)
2415 not used hint:
2416 duplication hint:
2417 error hint:
2418
2419                       QUERY PLAN                       
2420 -------------------------------------------------------
2421  Aggregate
2422    CTE c1
2423      ->  Aggregate
2424            ->  Nested Loop
2425                  Join Filter: (b1t1.c1 = b1t2.c1)
2426                  ->  Tid Scan on t1 b1t1
2427                        TID Cond: (ctid = '(1,1)'::tid)
2428                  ->  Seq Scan on t2 b1t2
2429                        Filter: (ctid = '(1,1)'::tid)
2430    InitPlan 2 (returns $1)
2431      ->  Aggregate
2432            ->  Nested Loop
2433                  Join Filter: (b2t1.c1 = b2t2.c1)
2434                  ->  Tid Scan on t1 b2t1
2435                        TID Cond: (ctid = '(1,1)'::tid)
2436                  ->  Seq Scan on t2 b2t2
2437                        Filter: (ctid = '(1,1)'::tid)
2438    InitPlan 3 (returns $2)
2439      ->  Aggregate
2440            ->  Nested Loop
2441                  Join Filter: (b3t1.c1 = b3t2.c1)
2442                  ->  Tid Scan on t1 b3t1
2443                        TID Cond: (ctid = '(1,1)'::tid)
2444                  ->  Seq Scan on t2 b3t2
2445                        Filter: (ctid = '(1,1)'::tid)
2446    ->  Nested Loop
2447          Join Filter: (bmt2.c1 = bmt1.c1)
2448          ->  Nested Loop
2449                Join Filter: (bmt2.c1 = c1.c1)
2450                ->  Seq Scan on t2 bmt2
2451                      Filter: (ctid = '(1,1)'::tid)
2452                ->  CTE Scan on c1
2453          ->  Tid Scan on t1 bmt1
2454                TID Cond: (ctid = '(1,1)'::tid)
2455                Filter: (c1 <> $2)
2456 (35 rows)
2457
2458 -- No. L-2-2-3
2459 EXPLAIN (COSTS false)
2460 WITH c1 (c1) AS (
2461 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)'
2462 )
2463 SELECT max(bmt1.c1), (
2464 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)'
2465 )
2466                     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
2467 AND bmt1.c1 <> (
2468 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)'
2469 )
2470 ;
2471                             QUERY PLAN                             
2472 -------------------------------------------------------------------
2473  Aggregate
2474    CTE c1
2475      ->  Aggregate
2476            ->  Nested Loop
2477                  Join Filter: (b1t1.c1 = b1t4.c1)
2478                  ->  Nested Loop
2479                        Join Filter: (b1t1.c1 = b1t3.c1)
2480                        ->  Nested Loop
2481                              Join Filter: (b1t1.c1 = b1t2.c1)
2482                              ->  Tid Scan on t1 b1t1
2483                                    TID Cond: (ctid = '(1,1)'::tid)
2484                              ->  Seq Scan on t2 b1t2
2485                                    Filter: (ctid = '(1,1)'::tid)
2486                        ->  Tid Scan on t3 b1t3
2487                              TID Cond: (ctid = '(1,1)'::tid)
2488                  ->  Tid Scan on t4 b1t4
2489                        TID Cond: (ctid = '(1,1)'::tid)
2490    InitPlan 2 (returns $1)
2491      ->  Aggregate
2492            ->  Nested Loop
2493                  Join Filter: (b2t1.c1 = b2t4.c1)
2494                  ->  Nested Loop
2495                        Join Filter: (b2t1.c1 = b2t3.c1)
2496                        ->  Nested Loop
2497                              Join Filter: (b2t1.c1 = b2t2.c1)
2498                              ->  Tid Scan on t1 b2t1
2499                                    TID Cond: (ctid = '(1,1)'::tid)
2500                              ->  Seq Scan on t2 b2t2
2501                                    Filter: (ctid = '(1,1)'::tid)
2502                        ->  Tid Scan on t3 b2t3
2503                              TID Cond: (ctid = '(1,1)'::tid)
2504                  ->  Tid Scan on t4 b2t4
2505                        TID Cond: (ctid = '(1,1)'::tid)
2506    InitPlan 3 (returns $2)
2507      ->  Aggregate
2508            ->  Nested Loop
2509                  Join Filter: (b3t1.c1 = b3t4.c1)
2510                  ->  Nested Loop
2511                        Join Filter: (b3t1.c1 = b3t3.c1)
2512                        ->  Nested Loop
2513                              Join Filter: (b3t1.c1 = b3t2.c1)
2514                              ->  Tid Scan on t1 b3t1
2515                                    TID Cond: (ctid = '(1,1)'::tid)
2516                              ->  Seq Scan on t2 b3t2
2517                                    Filter: (ctid = '(1,1)'::tid)
2518                        ->  Tid Scan on t3 b3t3
2519                              TID Cond: (ctid = '(1,1)'::tid)
2520                  ->  Tid Scan on t4 b3t4
2521                        TID Cond: (ctid = '(1,1)'::tid)
2522    ->  Nested Loop
2523          Join Filter: (bmt1.c1 = c1.c1)
2524          ->  Nested Loop
2525                Join Filter: (bmt1.c1 = bmt2.c1)
2526                ->  Nested Loop
2527                      Join Filter: (bmt3.c1 = bmt1.c1)
2528                      ->  Nested Loop
2529                            Join Filter: (bmt3.c1 = bmt4.c1)
2530                            ->  Tid Scan on t3 bmt3
2531                                  TID Cond: (ctid = '(1,1)'::tid)
2532                            ->  Tid Scan on t4 bmt4
2533                                  TID Cond: (ctid = '(1,1)'::tid)
2534                      ->  Tid Scan on t1 bmt1
2535                            TID Cond: (ctid = '(1,1)'::tid)
2536                            Filter: (c1 <> $2)
2537                ->  Seq Scan on t2 bmt2
2538                      Filter: (ctid = '(1,1)'::tid)
2539          ->  CTE Scan on c1
2540 (67 rows)
2541
2542 /*+
2543 Leading(c1 bmt4 b1t4 b2t4 b3t4 bmt3 b1t3 b2t3 b3t3 bmt2 b1t2 b2t2 b3t2 bmt1 b1t1 b2t1 b3t1)
2544 */
2545 EXPLAIN (COSTS false)
2546 WITH c1 (c1) AS (
2547 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)'
2548 )
2549 SELECT max(bmt1.c1), (
2550 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)'
2551 )
2552                     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
2553 AND bmt1.c1 <> (
2554 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)'
2555 )
2556 ;
2557 LOG:  pg_hint_plan:
2558 used hint:
2559 Leading(c1 bmt4 b1t4 b2t4 b3t4 bmt3 b1t3 b2t3 b3t3 bmt2 b1t2 b2t2 b3t2 bmt1 b1t1 b2t1 b3t1)
2560 not used hint:
2561 duplication hint:
2562 error hint:
2563
2564                             QUERY PLAN                             
2565 -------------------------------------------------------------------
2566  Aggregate
2567    CTE c1
2568      ->  Aggregate
2569            ->  Nested Loop
2570                  Join Filter: (b1t2.c1 = b1t1.c1)
2571                  ->  Nested Loop
2572                        Join Filter: (b1t3.c1 = b1t2.c1)
2573                        ->  Nested Loop
2574                              Join Filter: (b1t3.c1 = b1t4.c1)
2575                              ->  Tid Scan on t3 b1t3
2576                                    TID Cond: (ctid = '(1,1)'::tid)
2577                              ->  Tid Scan on t4 b1t4
2578                                    TID Cond: (ctid = '(1,1)'::tid)
2579                        ->  Seq Scan on t2 b1t2
2580                              Filter: (ctid = '(1,1)'::tid)
2581                  ->  Tid Scan on t1 b1t1
2582                        TID Cond: (ctid = '(1,1)'::tid)
2583    InitPlan 2 (returns $1)
2584      ->  Aggregate
2585            ->  Nested Loop
2586                  Join Filter: (b2t2.c1 = b2t1.c1)
2587                  ->  Nested Loop
2588                        Join Filter: (b2t3.c1 = b2t2.c1)
2589                        ->  Nested Loop
2590                              Join Filter: (b2t3.c1 = b2t4.c1)
2591                              ->  Tid Scan on t3 b2t3
2592                                    TID Cond: (ctid = '(1,1)'::tid)
2593                              ->  Tid Scan on t4 b2t4
2594                                    TID Cond: (ctid = '(1,1)'::tid)
2595                        ->  Seq Scan on t2 b2t2
2596                              Filter: (ctid = '(1,1)'::tid)
2597                  ->  Tid Scan on t1 b2t1
2598                        TID Cond: (ctid = '(1,1)'::tid)
2599    InitPlan 3 (returns $2)
2600      ->  Aggregate
2601            ->  Nested Loop
2602                  Join Filter: (b3t2.c1 = b3t1.c1)
2603                  ->  Nested Loop
2604                        Join Filter: (b3t3.c1 = b3t2.c1)
2605                        ->  Nested Loop
2606                              Join Filter: (b3t3.c1 = b3t4.c1)
2607                              ->  Tid Scan on t3 b3t3
2608                                    TID Cond: (ctid = '(1,1)'::tid)
2609                              ->  Tid Scan on t4 b3t4
2610                                    TID Cond: (ctid = '(1,1)'::tid)
2611                        ->  Seq Scan on t2 b3t2
2612                              Filter: (ctid = '(1,1)'::tid)
2613                  ->  Tid Scan on t1 b3t1
2614                        TID Cond: (ctid = '(1,1)'::tid)
2615    ->  Nested Loop
2616          Join Filter: (bmt2.c1 = bmt1.c1)
2617          ->  Nested Loop
2618                Join Filter: (bmt3.c1 = bmt2.c1)
2619                ->  Nested Loop
2620                      Join Filter: (bmt4.c1 = bmt3.c1)
2621                      ->  Nested Loop
2622                            Join Filter: (bmt4.c1 = c1.c1)
2623                            ->  Tid Scan on t4 bmt4
2624                                  TID Cond: (ctid = '(1,1)'::tid)
2625                            ->  CTE Scan on c1
2626                      ->  Tid Scan on t3 bmt3
2627                            TID Cond: (ctid = '(1,1)'::tid)
2628                ->  Seq Scan on t2 bmt2
2629                      Filter: (ctid = '(1,1)'::tid)
2630          ->  Tid Scan on t1 bmt1
2631                TID Cond: (ctid = '(1,1)'::tid)
2632                Filter: (c1 <> $2)
2633 (67 rows)
2634
2635 -- No. L-2-2-4
2636 EXPLAIN (COSTS false)
2637 WITH c1 (c1) AS (
2638 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)'
2639 )
2640 SELECT max(bmt1.c1), (
2641 SELECT max(b2t1.c1) FROM s1.t1 b2t1 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = 1
2642 )
2643                     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
2644 AND bmt1.c1 <> (
2645 SELECT max(b3t1.c1) FROM s1.t1 b3t1 WHERE b3t1.ctid = '(1,1)'
2646 )
2647 ;
2648                             QUERY PLAN                             
2649 -------------------------------------------------------------------
2650  Aggregate
2651    CTE c1
2652      ->  Aggregate
2653            ->  Nested Loop
2654                  Join Filter: (b1t1.c1 = b1t4.c1)
2655                  ->  Nested Loop
2656                        Join Filter: (b1t1.c1 = b1t3.c1)
2657                        ->  Nested Loop
2658                              Join Filter: (b1t1.c1 = b1t2.c1)
2659                              ->  Tid Scan on t1 b1t1
2660                                    TID Cond: (ctid = '(1,1)'::tid)
2661                              ->  Seq Scan on t2 b1t2
2662                                    Filter: (ctid = '(1,1)'::tid)
2663                        ->  Tid Scan on t3 b1t3
2664                              TID Cond: (ctid = '(1,1)'::tid)
2665                  ->  Tid Scan on t4 b1t4
2666                        TID Cond: (ctid = '(1,1)'::tid)
2667    InitPlan 3 (returns $2)
2668      ->  Result
2669            InitPlan 2 (returns $1)
2670              ->  Limit
2671                    ->  Tid Scan on t1 b2t1
2672                          TID Cond: (ctid = '(1,1)'::tid)
2673                          Filter: ((c1 IS NOT NULL) AND (c1 = 1))
2674    InitPlan 4 (returns $3)
2675      ->  Aggregate
2676            ->  Tid Scan on t1 b3t1
2677                  TID Cond: (ctid = '(1,1)'::tid)
2678    ->  Nested Loop
2679          Join Filter: (bmt1.c1 = c1.c1)
2680          ->  Nested Loop
2681                Join Filter: (bmt1.c1 = bmt2.c1)
2682                ->  Nested Loop
2683                      Join Filter: (bmt3.c1 = bmt1.c1)
2684                      ->  Nested Loop
2685                            Join Filter: (bmt3.c1 = bmt4.c1)
2686                            ->  Tid Scan on t3 bmt3
2687                                  TID Cond: (ctid = '(1,1)'::tid)
2688                            ->  Tid Scan on t4 bmt4
2689                                  TID Cond: (ctid = '(1,1)'::tid)
2690                      ->  Tid Scan on t1 bmt1
2691                            TID Cond: (ctid = '(1,1)'::tid)
2692                            Filter: (c1 <> $3)
2693                ->  Seq Scan on t2 bmt2
2694                      Filter: (ctid = '(1,1)'::tid)
2695          ->  CTE Scan on c1
2696 (46 rows)
2697
2698 /*+
2699 Leading(c1 bmt4 b1t4 bmt3 b1t3 bmt2 b1t2 bmt1 b1t1 b2t1 b3t1)
2700 */
2701 EXPLAIN (COSTS false)
2702 WITH c1 (c1) AS (
2703 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)'
2704 )
2705 SELECT max(bmt1.c1), (
2706 SELECT max(b2t1.c1) FROM s1.t1 b2t1 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = 1
2707 )
2708                     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
2709 AND bmt1.c1 <> (
2710 SELECT max(b3t1.c1) FROM s1.t1 b3t1 WHERE b3t1.ctid = '(1,1)'
2711 )
2712 ;
2713 LOG:  pg_hint_plan:
2714 used hint:
2715 Leading(c1 bmt4 b1t4 bmt3 b1t3 bmt2 b1t2 bmt1 b1t1 b2t1 b3t1)
2716 not used hint:
2717 duplication hint:
2718 error hint:
2719
2720                             QUERY PLAN                             
2721 -------------------------------------------------------------------
2722  Aggregate
2723    CTE c1
2724      ->  Aggregate
2725            ->  Nested Loop
2726                  Join Filter: (b1t2.c1 = b1t1.c1)
2727                  ->  Nested Loop
2728                        Join Filter: (b1t3.c1 = b1t2.c1)
2729                        ->  Nested Loop
2730                              Join Filter: (b1t3.c1 = b1t4.c1)
2731                              ->  Tid Scan on t3 b1t3
2732                                    TID Cond: (ctid = '(1,1)'::tid)
2733                              ->  Tid Scan on t4 b1t4
2734                                    TID Cond: (ctid = '(1,1)'::tid)
2735                        ->  Seq Scan on t2 b1t2
2736                              Filter: (ctid = '(1,1)'::tid)
2737                  ->  Tid Scan on t1 b1t1
2738                        TID Cond: (ctid = '(1,1)'::tid)
2739    InitPlan 3 (returns $2)
2740      ->  Result
2741            InitPlan 2 (returns $1)
2742              ->  Limit
2743                    ->  Tid Scan on t1 b2t1
2744                          TID Cond: (ctid = '(1,1)'::tid)
2745                          Filter: ((c1 IS NOT NULL) AND (c1 = 1))
2746    InitPlan 4 (returns $3)
2747      ->  Aggregate
2748            ->  Tid Scan on t1 b3t1
2749                  TID Cond: (ctid = '(1,1)'::tid)
2750    ->  Nested Loop
2751          Join Filter: (bmt2.c1 = bmt1.c1)
2752          ->  Nested Loop
2753                Join Filter: (bmt3.c1 = bmt2.c1)
2754                ->  Nested Loop
2755                      Join Filter: (bmt4.c1 = bmt3.c1)
2756                      ->  Nested Loop
2757                            Join Filter: (bmt4.c1 = c1.c1)
2758                            ->  Tid Scan on t4 bmt4
2759                                  TID Cond: (ctid = '(1,1)'::tid)
2760                            ->  CTE Scan on c1
2761                      ->  Tid Scan on t3 bmt3
2762                            TID Cond: (ctid = '(1,1)'::tid)
2763                ->  Seq Scan on t2 bmt2
2764                      Filter: (ctid = '(1,1)'::tid)
2765          ->  Tid Scan on t1 bmt1
2766                TID Cond: (ctid = '(1,1)'::tid)
2767                Filter: (c1 <> $3)
2768 (46 rows)
2769
2770 ----
2771 ---- No. L-2-3 RULE definition table
2772 ----
2773 -- No. L-2-3-1
2774 EXPLAIN (COSTS false) UPDATE s1.r1 SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
2775                            QUERY PLAN                            
2776 -----------------------------------------------------------------
2777  Aggregate
2778    ->  Nested Loop
2779          Join Filter: (t1.c1 = t4.c1)
2780          ->  Nested Loop
2781                Join Filter: (t1.c1 = t3.c1)
2782                ->  Nested Loop
2783                      Join Filter: (t2.c1 = t1.c1)
2784                      ->  Nested Loop
2785                            ->  Tid Scan on r1
2786                                  TID Cond: (ctid = '(1,1)'::tid)
2787                                  Filter: (c1 = 1)
2788                            ->  Seq Scan on t2
2789                                  Filter: (ctid = '(1,1)'::tid)
2790                      ->  Tid Scan on t1
2791                            TID Cond: (ctid = '(1,1)'::tid)
2792                ->  Tid Scan on t3
2793                      TID Cond: (ctid = '(1,1)'::tid)
2794          ->  Tid Scan on t4
2795                TID Cond: (ctid = '(1,1)'::tid)
2796 (19 rows)
2797
2798 /*+ Leading(t4 t3 t2 t1 r1) */
2799 EXPLAIN (COSTS false) UPDATE s1.r1 SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
2800 LOG:  pg_hint_plan:
2801 used hint:
2802 Leading(t4 t3 t2 t1 r1)
2803 not used hint:
2804 duplication hint:
2805 error hint:
2806
2807                            QUERY PLAN                            
2808 -----------------------------------------------------------------
2809  Aggregate
2810    ->  Nested Loop
2811          ->  Nested Loop
2812                Join Filter: (t2.c1 = t1.c1)
2813                ->  Nested Loop
2814                      Join Filter: (t3.c1 = t2.c1)
2815                      ->  Nested Loop
2816                            Join Filter: (t3.c1 = t4.c1)
2817                            ->  Tid Scan on t3
2818                                  TID Cond: (ctid = '(1,1)'::tid)
2819                            ->  Tid Scan on t4
2820                                  TID Cond: (ctid = '(1,1)'::tid)
2821                      ->  Seq Scan on t2
2822                            Filter: (ctid = '(1,1)'::tid)
2823                ->  Tid Scan on t1
2824                      TID Cond: (ctid = '(1,1)'::tid)
2825          ->  Tid Scan on r1
2826                TID Cond: (ctid = '(1,1)'::tid)
2827                Filter: (c1 = 1)
2828 (19 rows)
2829
2830 EXPLAIN (COSTS false) UPDATE s1.r1_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
2831                            QUERY PLAN                            
2832 -----------------------------------------------------------------
2833  Aggregate
2834    ->  Nested Loop
2835          Join Filter: (b1t1.c1 = b1t4.c1)
2836          ->  Nested Loop
2837                Join Filter: (b1t1.c1 = b1t3.c1)
2838                ->  Nested Loop
2839                      Join Filter: (b1t2.c1 = b1t1.c1)
2840                      ->  Nested Loop
2841                            ->  Tid Scan on r1_
2842                                  TID Cond: (ctid = '(1,1)'::tid)
2843                                  Filter: (c1 = 1)
2844                            ->  Seq Scan on t2 b1t2
2845                                  Filter: (ctid = '(1,1)'::tid)
2846                      ->  Tid Scan on t1 b1t1
2847                            TID Cond: (ctid = '(1,1)'::tid)
2848                ->  Tid Scan on t3 b1t3
2849                      TID Cond: (ctid = '(1,1)'::tid)
2850          ->  Tid Scan on t4 b1t4
2851                TID Cond: (ctid = '(1,1)'::tid)
2852 (19 rows)
2853
2854 /*+ Leading(b1t1 b1t2 b1t3 b1t4 r1_) */
2855 EXPLAIN (COSTS false) UPDATE s1.r1_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
2856 LOG:  pg_hint_plan:
2857 used hint:
2858 Leading(b1t1 b1t2 b1t3 b1t4 r1_)
2859 not used hint:
2860 duplication hint:
2861 error hint:
2862
2863                            QUERY PLAN                            
2864 -----------------------------------------------------------------
2865  Aggregate
2866    ->  Nested Loop
2867          ->  Nested Loop
2868                Join Filter: (b1t1.c1 = b1t4.c1)
2869                ->  Nested Loop
2870                      Join Filter: (b1t1.c1 = b1t3.c1)
2871                      ->  Nested Loop
2872                            Join Filter: (b1t1.c1 = b1t2.c1)
2873                            ->  Tid Scan on t1 b1t1
2874                                  TID Cond: (ctid = '(1,1)'::tid)
2875                            ->  Seq Scan on t2 b1t2
2876                                  Filter: (ctid = '(1,1)'::tid)
2877                      ->  Tid Scan on t3 b1t3
2878                            TID Cond: (ctid = '(1,1)'::tid)
2879                ->  Tid Scan on t4 b1t4
2880                      TID Cond: (ctid = '(1,1)'::tid)
2881          ->  Tid Scan on r1_
2882                TID Cond: (ctid = '(1,1)'::tid)
2883                Filter: (c1 = 1)
2884 (19 rows)
2885
2886 -- No. L-2-3-2
2887 EXPLAIN (COSTS false) UPDATE s1.r2 SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
2888                            QUERY PLAN                            
2889 -----------------------------------------------------------------
2890  Aggregate
2891    ->  Nested Loop
2892          Join Filter: (t1.c1 = t4.c1)
2893          ->  Nested Loop
2894                Join Filter: (t1.c1 = t3.c1)
2895                ->  Nested Loop
2896                      Join Filter: (t2.c1 = t1.c1)
2897                      ->  Nested Loop
2898                            ->  Tid Scan on r2
2899                                  TID Cond: (ctid = '(1,1)'::tid)
2900                                  Filter: (c1 = 1)
2901                            ->  Seq Scan on t2
2902                                  Filter: (ctid = '(1,1)'::tid)
2903                      ->  Tid Scan on t1
2904                            TID Cond: (ctid = '(1,1)'::tid)
2905                ->  Tid Scan on t3
2906                      TID Cond: (ctid = '(1,1)'::tid)
2907          ->  Tid Scan on t4
2908                TID Cond: (ctid = '(1,1)'::tid)
2909  
2910  Aggregate
2911    ->  Nested Loop
2912          Join Filter: (t1.c1 = t4.c1)
2913          ->  Nested Loop
2914                Join Filter: (t1.c1 = t3.c1)
2915                ->  Nested Loop
2916                      Join Filter: (t2.c1 = t1.c1)
2917                      ->  Nested Loop
2918                            ->  Tid Scan on r2
2919                                  TID Cond: (ctid = '(1,1)'::tid)
2920                                  Filter: (c1 = 1)
2921                            ->  Seq Scan on t2
2922                                  Filter: (ctid = '(1,1)'::tid)
2923                      ->  Tid Scan on t1
2924                            TID Cond: (ctid = '(1,1)'::tid)
2925                ->  Tid Scan on t3
2926                      TID Cond: (ctid = '(1,1)'::tid)
2927          ->  Tid Scan on t4
2928                TID Cond: (ctid = '(1,1)'::tid)
2929 (39 rows)
2930
2931 /*+ Leading(t4 t3 t2 t1 r2) */
2932 EXPLAIN (COSTS false) UPDATE s1.r2 SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
2933 LOG:  pg_hint_plan:
2934 used hint:
2935 Leading(t4 t3 t2 t1 r2)
2936 not used hint:
2937 duplication hint:
2938 error hint:
2939
2940 LOG:  pg_hint_plan:
2941 used hint:
2942 Leading(t4 t3 t2 t1 r2)
2943 not used hint:
2944 duplication hint:
2945 error hint:
2946
2947                            QUERY PLAN                            
2948 -----------------------------------------------------------------
2949  Aggregate
2950    ->  Nested Loop
2951          ->  Nested Loop
2952                Join Filter: (t2.c1 = t1.c1)
2953                ->  Nested Loop
2954                      Join Filter: (t3.c1 = t2.c1)
2955                      ->  Nested Loop
2956                            Join Filter: (t3.c1 = t4.c1)
2957                            ->  Tid Scan on t3
2958                                  TID Cond: (ctid = '(1,1)'::tid)
2959                            ->  Tid Scan on t4
2960                                  TID Cond: (ctid = '(1,1)'::tid)
2961                      ->  Seq Scan on t2
2962                            Filter: (ctid = '(1,1)'::tid)
2963                ->  Tid Scan on t1
2964                      TID Cond: (ctid = '(1,1)'::tid)
2965          ->  Tid Scan on r2
2966                TID Cond: (ctid = '(1,1)'::tid)
2967                Filter: (c1 = 1)
2968  
2969  Aggregate
2970    ->  Nested Loop
2971          ->  Nested Loop
2972                Join Filter: (t2.c1 = t1.c1)
2973                ->  Nested Loop
2974                      Join Filter: (t3.c1 = t2.c1)
2975                      ->  Nested Loop
2976                            Join Filter: (t3.c1 = t4.c1)
2977                            ->  Tid Scan on t3
2978                                  TID Cond: (ctid = '(1,1)'::tid)
2979                            ->  Tid Scan on t4
2980                                  TID Cond: (ctid = '(1,1)'::tid)
2981                      ->  Seq Scan on t2
2982                            Filter: (ctid = '(1,1)'::tid)
2983                ->  Tid Scan on t1
2984                      TID Cond: (ctid = '(1,1)'::tid)
2985          ->  Tid Scan on r2
2986                TID Cond: (ctid = '(1,1)'::tid)
2987                Filter: (c1 = 1)
2988 (39 rows)
2989
2990 EXPLAIN (COSTS false) UPDATE s1.r2_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
2991                            QUERY PLAN                            
2992 -----------------------------------------------------------------
2993  Aggregate
2994    ->  Nested Loop
2995          Join Filter: (b1t1.c1 = b1t4.c1)
2996          ->  Nested Loop
2997                Join Filter: (b1t1.c1 = b1t3.c1)
2998                ->  Nested Loop
2999                      Join Filter: (b1t2.c1 = b1t1.c1)
3000                      ->  Nested Loop
3001                            ->  Tid Scan on r2_
3002                                  TID Cond: (ctid = '(1,1)'::tid)
3003                                  Filter: (c1 = 1)
3004                            ->  Seq Scan on t2 b1t2
3005                                  Filter: (ctid = '(1,1)'::tid)
3006                      ->  Tid Scan on t1 b1t1
3007                            TID Cond: (ctid = '(1,1)'::tid)
3008                ->  Tid Scan on t3 b1t3
3009                      TID Cond: (ctid = '(1,1)'::tid)
3010          ->  Tid Scan on t4 b1t4
3011                TID Cond: (ctid = '(1,1)'::tid)
3012  
3013  Aggregate
3014    ->  Nested Loop
3015          Join Filter: (b2t1.c1 = b2t4.c1)
3016          ->  Nested Loop
3017                Join Filter: (b2t1.c1 = b2t3.c1)
3018                ->  Nested Loop
3019                      Join Filter: (b2t2.c1 = b2t1.c1)
3020                      ->  Nested Loop
3021                            ->  Tid Scan on r2_
3022                                  TID Cond: (ctid = '(1,1)'::tid)
3023                                  Filter: (c1 = 1)
3024                            ->  Seq Scan on t2 b2t2
3025                                  Filter: (ctid = '(1,1)'::tid)
3026                      ->  Tid Scan on t1 b2t1
3027                            TID Cond: (ctid = '(1,1)'::tid)
3028                ->  Tid Scan on t3 b2t3
3029                      TID Cond: (ctid = '(1,1)'::tid)
3030          ->  Tid Scan on t4 b2t4
3031                TID Cond: (ctid = '(1,1)'::tid)
3032 (39 rows)
3033
3034 /*+Leading(
3035 b1t1 b1t2 b1t3 b1t4 
3036 b2t1 b2t2 b2t3 b2t4 r2_
3037 ) */
3038 EXPLAIN (COSTS false) UPDATE s1.r2_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
3039 LOG:  pg_hint_plan:
3040 used hint:
3041 Leading(b1t1 b1t2 b1t3 b1t4 b2t1 b2t2 b2t3 b2t4 r2_)
3042 not used hint:
3043 duplication hint:
3044 error hint:
3045
3046 LOG:  pg_hint_plan:
3047 used hint:
3048 Leading(b1t1 b1t2 b1t3 b1t4 b2t1 b2t2 b2t3 b2t4 r2_)
3049 not used hint:
3050 duplication hint:
3051 error hint:
3052
3053                            QUERY PLAN                            
3054 -----------------------------------------------------------------
3055  Aggregate
3056    ->  Nested Loop
3057          ->  Nested Loop
3058                Join Filter: (b1t1.c1 = b1t4.c1)
3059                ->  Nested Loop
3060                      Join Filter: (b1t1.c1 = b1t3.c1)
3061                      ->  Nested Loop
3062                            Join Filter: (b1t1.c1 = b1t2.c1)
3063                            ->  Tid Scan on t1 b1t1
3064                                  TID Cond: (ctid = '(1,1)'::tid)
3065                            ->  Seq Scan on t2 b1t2
3066                                  Filter: (ctid = '(1,1)'::tid)
3067                      ->  Tid Scan on t3 b1t3
3068                            TID Cond: (ctid = '(1,1)'::tid)
3069                ->  Tid Scan on t4 b1t4
3070                      TID Cond: (ctid = '(1,1)'::tid)
3071          ->  Tid Scan on r2_
3072                TID Cond: (ctid = '(1,1)'::tid)
3073                Filter: (c1 = 1)
3074  
3075  Aggregate
3076    ->  Nested Loop
3077          ->  Nested Loop
3078                Join Filter: (b2t1.c1 = b2t4.c1)
3079                ->  Nested Loop
3080                      Join Filter: (b2t1.c1 = b2t3.c1)
3081                      ->  Nested Loop
3082                            Join Filter: (b2t1.c1 = b2t2.c1)
3083                            ->  Tid Scan on t1 b2t1
3084                                  TID Cond: (ctid = '(1,1)'::tid)
3085                            ->  Seq Scan on t2 b2t2
3086                                  Filter: (ctid = '(1,1)'::tid)
3087                      ->  Tid Scan on t3 b2t3
3088                            TID Cond: (ctid = '(1,1)'::tid)
3089                ->  Tid Scan on t4 b2t4
3090                      TID Cond: (ctid = '(1,1)'::tid)
3091          ->  Tid Scan on r2_
3092                TID Cond: (ctid = '(1,1)'::tid)
3093                Filter: (c1 = 1)
3094 (39 rows)
3095
3096 -- No. L-2-3-3
3097 EXPLAIN (COSTS false) UPDATE s1.r3 SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
3098                            QUERY PLAN                            
3099 -----------------------------------------------------------------
3100  Aggregate
3101    ->  Nested Loop
3102          Join Filter: (t1.c1 = t4.c1)
3103          ->  Nested Loop
3104                Join Filter: (t1.c1 = t3.c1)
3105                ->  Nested Loop
3106                      Join Filter: (t2.c1 = t1.c1)
3107                      ->  Nested Loop
3108                            ->  Tid Scan on r3
3109                                  TID Cond: (ctid = '(1,1)'::tid)
3110                                  Filter: (c1 = 1)
3111                            ->  Seq Scan on t2
3112                                  Filter: (ctid = '(1,1)'::tid)
3113                      ->  Tid Scan on t1
3114                            TID Cond: (ctid = '(1,1)'::tid)
3115                ->  Tid Scan on t3
3116                      TID Cond: (ctid = '(1,1)'::tid)
3117          ->  Tid Scan on t4
3118                TID Cond: (ctid = '(1,1)'::tid)
3119  
3120  Aggregate
3121    ->  Nested Loop
3122          Join Filter: (t1.c1 = t4.c1)
3123          ->  Nested Loop
3124                Join Filter: (t1.c1 = t3.c1)
3125                ->  Nested Loop
3126                      Join Filter: (t2.c1 = t1.c1)
3127                      ->  Nested Loop
3128                            ->  Tid Scan on r3
3129                                  TID Cond: (ctid = '(1,1)'::tid)
3130                                  Filter: (c1 = 1)
3131                            ->  Seq Scan on t2
3132                                  Filter: (ctid = '(1,1)'::tid)
3133                      ->  Tid Scan on t1
3134                            TID Cond: (ctid = '(1,1)'::tid)
3135                ->  Tid Scan on t3
3136                      TID Cond: (ctid = '(1,1)'::tid)
3137          ->  Tid Scan on t4
3138                TID Cond: (ctid = '(1,1)'::tid)
3139  
3140  Aggregate
3141    ->  Nested Loop
3142          Join Filter: (t1.c1 = t4.c1)
3143          ->  Nested Loop
3144                Join Filter: (t1.c1 = t3.c1)
3145                ->  Nested Loop
3146                      Join Filter: (t2.c1 = t1.c1)
3147                      ->  Nested Loop
3148                            ->  Tid Scan on r3
3149                                  TID Cond: (ctid = '(1,1)'::tid)
3150                                  Filter: (c1 = 1)
3151                            ->  Seq Scan on t2
3152                                  Filter: (ctid = '(1,1)'::tid)
3153                      ->  Tid Scan on t1
3154                            TID Cond: (ctid = '(1,1)'::tid)
3155                ->  Tid Scan on t3
3156                      TID Cond: (ctid = '(1,1)'::tid)
3157          ->  Tid Scan on t4
3158                TID Cond: (ctid = '(1,1)'::tid)
3159 (59 rows)
3160
3161 /*+ Leading(t4 t3 t2 t1 r3) */
3162 EXPLAIN (COSTS false) UPDATE s1.r3 SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
3163 LOG:  pg_hint_plan:
3164 used hint:
3165 Leading(t4 t3 t2 t1 r3)
3166 not used hint:
3167 duplication hint:
3168 error hint:
3169
3170 LOG:  pg_hint_plan:
3171 used hint:
3172 Leading(t4 t3 t2 t1 r3)
3173 not used hint:
3174 duplication hint:
3175 error hint:
3176
3177 LOG:  pg_hint_plan:
3178 used hint:
3179 Leading(t4 t3 t2 t1 r3)
3180 not used hint:
3181 duplication hint:
3182 error hint:
3183
3184                            QUERY PLAN                            
3185 -----------------------------------------------------------------
3186  Aggregate
3187    ->  Nested Loop
3188          ->  Nested Loop
3189                Join Filter: (t2.c1 = t1.c1)
3190                ->  Nested Loop
3191                      Join Filter: (t3.c1 = t2.c1)
3192                      ->  Nested Loop
3193                            Join Filter: (t3.c1 = t4.c1)
3194                            ->  Tid Scan on t3
3195                                  TID Cond: (ctid = '(1,1)'::tid)
3196                            ->  Tid Scan on t4
3197                                  TID Cond: (ctid = '(1,1)'::tid)
3198                      ->  Seq Scan on t2
3199                            Filter: (ctid = '(1,1)'::tid)
3200                ->  Tid Scan on t1
3201                      TID Cond: (ctid = '(1,1)'::tid)
3202          ->  Tid Scan on r3
3203                TID Cond: (ctid = '(1,1)'::tid)
3204                Filter: (c1 = 1)
3205  
3206  Aggregate
3207    ->  Nested Loop
3208          ->  Nested Loop
3209                Join Filter: (t2.c1 = t1.c1)
3210                ->  Nested Loop
3211                      Join Filter: (t3.c1 = t2.c1)
3212                      ->  Nested Loop
3213                            Join Filter: (t3.c1 = t4.c1)
3214                            ->  Tid Scan on t3
3215                                  TID Cond: (ctid = '(1,1)'::tid)
3216                            ->  Tid Scan on t4
3217                                  TID Cond: (ctid = '(1,1)'::tid)
3218                      ->  Seq Scan on t2
3219                            Filter: (ctid = '(1,1)'::tid)
3220                ->  Tid Scan on t1
3221                      TID Cond: (ctid = '(1,1)'::tid)
3222          ->  Tid Scan on r3
3223                TID Cond: (ctid = '(1,1)'::tid)
3224                Filter: (c1 = 1)
3225  
3226  Aggregate
3227    ->  Nested Loop
3228          ->  Nested Loop
3229                Join Filter: (t2.c1 = t1.c1)
3230                ->  Nested Loop
3231                      Join Filter: (t3.c1 = t2.c1)
3232                      ->  Nested Loop
3233                            Join Filter: (t3.c1 = t4.c1)
3234                            ->  Tid Scan on t3
3235                                  TID Cond: (ctid = '(1,1)'::tid)
3236                            ->  Tid Scan on t4
3237                                  TID Cond: (ctid = '(1,1)'::tid)
3238                      ->  Seq Scan on t2
3239                            Filter: (ctid = '(1,1)'::tid)
3240                ->  Tid Scan on t1
3241                      TID Cond: (ctid = '(1,1)'::tid)
3242          ->  Tid Scan on r3
3243                TID Cond: (ctid = '(1,1)'::tid)
3244                Filter: (c1 = 1)
3245 (59 rows)
3246
3247 EXPLAIN (COSTS false) UPDATE s1.r3_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
3248                            QUERY PLAN                            
3249 -----------------------------------------------------------------
3250  Aggregate
3251    ->  Nested Loop
3252          Join Filter: (b1t1.c1 = b1t4.c1)
3253          ->  Nested Loop
3254                Join Filter: (b1t1.c1 = b1t3.c1)
3255                ->  Nested Loop
3256                      Join Filter: (b1t2.c1 = b1t1.c1)
3257                      ->  Nested Loop
3258                            ->  Tid Scan on r3_
3259                                  TID Cond: (ctid = '(1,1)'::tid)
3260                                  Filter: (c1 = 1)
3261                            ->  Seq Scan on t2 b1t2
3262                                  Filter: (ctid = '(1,1)'::tid)
3263                      ->  Tid Scan on t1 b1t1
3264                            TID Cond: (ctid = '(1,1)'::tid)
3265                ->  Tid Scan on t3 b1t3
3266                      TID Cond: (ctid = '(1,1)'::tid)
3267          ->  Tid Scan on t4 b1t4
3268                TID Cond: (ctid = '(1,1)'::tid)
3269  
3270  Aggregate
3271    ->  Nested Loop
3272          Join Filter: (b2t1.c1 = b2t4.c1)
3273          ->  Nested Loop
3274                Join Filter: (b2t1.c1 = b2t3.c1)
3275                ->  Nested Loop
3276                      Join Filter: (b2t2.c1 = b2t1.c1)
3277                      ->  Nested Loop
3278                            ->  Tid Scan on r3_
3279                                  TID Cond: (ctid = '(1,1)'::tid)
3280                                  Filter: (c1 = 1)
3281                            ->  Seq Scan on t2 b2t2
3282                                  Filter: (ctid = '(1,1)'::tid)
3283                      ->  Tid Scan on t1 b2t1
3284                            TID Cond: (ctid = '(1,1)'::tid)
3285                ->  Tid Scan on t3 b2t3
3286                      TID Cond: (ctid = '(1,1)'::tid)
3287          ->  Tid Scan on t4 b2t4
3288                TID Cond: (ctid = '(1,1)'::tid)
3289  
3290  Aggregate
3291    ->  Nested Loop
3292          Join Filter: (b3t1.c1 = b3t4.c1)
3293          ->  Nested Loop
3294                Join Filter: (b3t1.c1 = b3t3.c1)
3295                ->  Nested Loop
3296                      Join Filter: (b3t2.c1 = b3t1.c1)
3297                      ->  Nested Loop
3298                            ->  Tid Scan on r3_
3299                                  TID Cond: (ctid = '(1,1)'::tid)
3300                                  Filter: (c1 = 1)
3301                            ->  Seq Scan on t2 b3t2
3302                                  Filter: (ctid = '(1,1)'::tid)
3303                      ->  Tid Scan on t1 b3t1
3304                            TID Cond: (ctid = '(1,1)'::tid)
3305                ->  Tid Scan on t3 b3t3
3306                      TID Cond: (ctid = '(1,1)'::tid)
3307          ->  Tid Scan on t4 b3t4
3308                TID Cond: (ctid = '(1,1)'::tid)
3309 (59 rows)
3310
3311 /*+Leading(
3312 b1t1 b1t2 b1t3 b1t4
3313 b2t1 b2t2 b2t3 b2t4
3314 b3t1 b3t2 b3t3 b3t4 r3_
3315 ) */
3316 EXPLAIN (COSTS false) UPDATE s1.r3_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
3317 LOG:  pg_hint_plan:
3318 used hint:
3319 Leading(b1t1 b1t2 b1t3 b1t4 b2t1 b2t2 b2t3 b2t4 b3t1 b3t2 b3t3 b3t4 r3_)
3320 not used hint:
3321 duplication hint:
3322 error hint:
3323
3324 LOG:  pg_hint_plan:
3325 used hint:
3326 Leading(b1t1 b1t2 b1t3 b1t4 b2t1 b2t2 b2t3 b2t4 b3t1 b3t2 b3t3 b3t4 r3_)
3327 not used hint:
3328 duplication hint:
3329 error hint:
3330
3331 LOG:  pg_hint_plan:
3332 used hint:
3333 Leading(b1t1 b1t2 b1t3 b1t4 b2t1 b2t2 b2t3 b2t4 b3t1 b3t2 b3t3 b3t4 r3_)
3334 not used hint:
3335 duplication hint:
3336 error hint:
3337
3338                            QUERY PLAN                            
3339 -----------------------------------------------------------------
3340  Aggregate
3341    ->  Nested Loop
3342          ->  Nested Loop
3343                Join Filter: (b1t1.c1 = b1t4.c1)
3344                ->  Nested Loop
3345                      Join Filter: (b1t1.c1 = b1t3.c1)
3346                      ->  Nested Loop
3347                            Join Filter: (b1t1.c1 = b1t2.c1)
3348                            ->  Tid Scan on t1 b1t1
3349                                  TID Cond: (ctid = '(1,1)'::tid)
3350                            ->  Seq Scan on t2 b1t2
3351                                  Filter: (ctid = '(1,1)'::tid)
3352                      ->  Tid Scan on t3 b1t3
3353                            TID Cond: (ctid = '(1,1)'::tid)
3354                ->  Tid Scan on t4 b1t4
3355                      TID Cond: (ctid = '(1,1)'::tid)
3356          ->  Tid Scan on r3_
3357                TID Cond: (ctid = '(1,1)'::tid)
3358                Filter: (c1 = 1)
3359  
3360  Aggregate
3361    ->  Nested Loop
3362          ->  Nested Loop
3363                Join Filter: (b2t1.c1 = b2t4.c1)
3364                ->  Nested Loop
3365                      Join Filter: (b2t1.c1 = b2t3.c1)
3366                      ->  Nested Loop
3367                            Join Filter: (b2t1.c1 = b2t2.c1)
3368                            ->  Tid Scan on t1 b2t1
3369                                  TID Cond: (ctid = '(1,1)'::tid)
3370                            ->  Seq Scan on t2 b2t2
3371                                  Filter: (ctid = '(1,1)'::tid)
3372                      ->  Tid Scan on t3 b2t3
3373                            TID Cond: (ctid = '(1,1)'::tid)
3374                ->  Tid Scan on t4 b2t4
3375                      TID Cond: (ctid = '(1,1)'::tid)
3376          ->  Tid Scan on r3_
3377                TID Cond: (ctid = '(1,1)'::tid)
3378                Filter: (c1 = 1)
3379  
3380  Aggregate
3381    ->  Nested Loop
3382          ->  Nested Loop
3383                Join Filter: (b3t1.c1 = b3t4.c1)
3384                ->  Nested Loop
3385                      Join Filter: (b3t1.c1 = b3t3.c1)
3386                      ->  Nested Loop
3387                            Join Filter: (b3t1.c1 = b3t2.c1)
3388                            ->  Tid Scan on t1 b3t1
3389                                  TID Cond: (ctid = '(1,1)'::tid)
3390                            ->  Seq Scan on t2 b3t2
3391                                  Filter: (ctid = '(1,1)'::tid)
3392                      ->  Tid Scan on t3 b3t3
3393                            TID Cond: (ctid = '(1,1)'::tid)
3394                ->  Tid Scan on t4 b3t4
3395                      TID Cond: (ctid = '(1,1)'::tid)
3396          ->  Tid Scan on r3_
3397                TID Cond: (ctid = '(1,1)'::tid)
3398                Filter: (c1 = 1)
3399 (59 rows)
3400
3401 ----
3402 ---- No. L-2-4 VALUES clause
3403 ----
3404 -- No. L-2-4-1
3405 EXPLAIN (COSTS false) 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;
3406                       QUERY PLAN                       
3407 -------------------------------------------------------
3408  Merge Join
3409    Merge Cond: (t1.c1 = t2.c1)
3410    ->  Index Scan using t1_i1 on t1
3411    ->  Sort
3412          Sort Key: t2.c1
3413          ->  Hash Join
3414                Hash Cond: (t2.c1 = "*VALUES*".column1)
3415                ->  Seq Scan on t2
3416                ->  Hash
3417                      ->  Values Scan on "*VALUES*"
3418 (10 rows)
3419
3420 /*+ Leading(t3 t1 t2) */
3421 EXPLAIN (COSTS false) 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;
3422 LOG:  pg_hint_plan:
3423 used hint:
3424 Leading(t3 t1 t2)
3425 not used hint:
3426 duplication hint:
3427 error hint:
3428
3429                  QUERY PLAN                  
3430 ---------------------------------------------
3431  Nested Loop
3432    Join Filter: (t1.c1 = "*VALUES*".column1)
3433    ->  Values Scan on "*VALUES*"
3434    ->  Merge Join
3435          Merge Cond: (t1.c1 = t2.c1)
3436          ->  Index Scan using t1_i1 on t1
3437          ->  Sort
3438                Sort Key: t2.c1
3439                ->  Seq Scan on t2
3440 (9 rows)
3441
3442 /*+ Leading(*VALUES* t1 t2) */
3443 EXPLAIN (COSTS false) 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;
3444 LOG:  pg_hint_plan:
3445 used hint:
3446 Leading(*VALUES* t1 t2)
3447 not used hint:
3448 duplication hint:
3449 error hint:
3450
3451                         QUERY PLAN                         
3452 -----------------------------------------------------------
3453  Hash Join
3454    Hash Cond: (t2.c1 = t1.c1)
3455    ->  Seq Scan on t2
3456    ->  Hash
3457          ->  Nested Loop
3458                ->  Values Scan on "*VALUES*"
3459                ->  Index Scan using t1_i1 on t1
3460                      Index Cond: (c1 = "*VALUES*".column1)
3461 (8 rows)
3462
3463 -- No. L-2-4-2
3464 EXPLAIN (COSTS false) 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;
3465                          QUERY PLAN                          
3466 -------------------------------------------------------------
3467  Nested Loop
3468    Join Filter: (t1.c1 = "*VALUES*".column1)
3469    ->  Merge Join
3470          Merge Cond: (t1.c1 = t2.c1)
3471          ->  Index Scan using t1_i1 on t1
3472          ->  Sort
3473                Sort Key: t2.c1
3474                ->  Hash Join
3475                      Hash Cond: (t2.c1 = "*VALUES*".column1)
3476                      ->  Seq Scan on t2
3477                      ->  Hash
3478                            ->  Values Scan on "*VALUES*"
3479    ->  Values Scan on "*VALUES*"
3480 (13 rows)
3481
3482 /*+ Leading(t4 t3 t2 t1) */
3483 EXPLAIN (COSTS false) 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;
3484 LOG:  pg_hint_plan:
3485 used hint:
3486 Leading(t4 t3 t2 t1)
3487 not used hint:
3488 duplication hint:
3489 error hint:
3490
3491                            QUERY PLAN                           
3492 ----------------------------------------------------------------
3493  Nested Loop
3494    Join Filter: (t1.c1 = "*VALUES*".column1)
3495    ->  Nested Loop
3496          Join Filter: ("*VALUES*".column1 = "*VALUES*".column1)
3497          ->  Values Scan on "*VALUES*"
3498          ->  Values Scan on "*VALUES*"
3499    ->  Merge Join
3500          Merge Cond: (t1.c1 = t2.c1)
3501          ->  Index Scan using t1_i1 on t1
3502          ->  Sort
3503                Sort Key: t2.c1
3504                ->  Seq Scan on t2
3505 (12 rows)
3506
3507 /*+ Leading(*VALUES* t3 t2 t1) */
3508 EXPLAIN (COSTS false) 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;
3509 INFO:  hint syntax error at or near "Leading(*VALUES* t3 t2 t1) "
3510 DETAIL:  Relation name "*VALUES*" is ambiguous.
3511 LOG:  pg_hint_plan:
3512 used hint:
3513 not used hint:
3514 Leading(*VALUES* t3 t2 t1)
3515 duplication hint:
3516 error hint:
3517
3518                          QUERY PLAN                          
3519 -------------------------------------------------------------
3520  Nested Loop
3521    Join Filter: (t1.c1 = "*VALUES*".column1)
3522    ->  Merge Join
3523          Merge Cond: (t1.c1 = t2.c1)
3524          ->  Index Scan using t1_i1 on t1
3525          ->  Sort
3526                Sort Key: t2.c1
3527                ->  Hash Join
3528                      Hash Cond: (t2.c1 = "*VALUES*".column1)
3529                      ->  Seq Scan on t2
3530                      ->  Hash
3531                            ->  Values Scan on "*VALUES*"
3532    ->  Values Scan on "*VALUES*"
3533 (13 rows)
3534
3535 ----
3536 ---- No. L-3-1 leading the order of table joins
3537 ----
3538 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1;
3539                 QUERY PLAN                
3540 ------------------------------------------
3541  Merge Join
3542    Merge Cond: (t1.c1 = t2.c1)
3543    ->  Merge Join
3544          Merge Cond: (t1.c1 = t3.c1)
3545          ->  Index Scan using t1_i1 on t1
3546          ->  Index Scan using t3_i1 on t3
3547    ->  Sort
3548          Sort Key: t2.c1
3549          ->  Seq Scan on t2
3550 (9 rows)
3551
3552 -- No. L-3-1-1
3553 /*+Leading(t3 t1 t2)*/
3554 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1;
3555 LOG:  pg_hint_plan:
3556 used hint:
3557 Leading(t3 t1 t2)
3558 not used hint:
3559 duplication hint:
3560 error hint:
3561
3562                 QUERY PLAN                
3563 ------------------------------------------
3564  Merge Join
3565    Merge Cond: (t1.c1 = t2.c1)
3566    ->  Merge Join
3567          Merge Cond: (t1.c1 = t3.c1)
3568          ->  Index Scan using t1_i1 on t1
3569          ->  Index Scan using t3_i1 on t3
3570    ->  Sort
3571          Sort Key: t2.c1
3572          ->  Seq Scan on t2
3573 (9 rows)
3574
3575 -- No. L-3-1-2
3576 /*+Leading(t1 t2 t3)*/
3577 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1;
3578 LOG:  pg_hint_plan:
3579 used hint:
3580 Leading(t1 t2 t3)
3581 not used hint:
3582 duplication hint:
3583 error hint:
3584
3585                    QUERY PLAN                   
3586 ------------------------------------------------
3587  Hash Join
3588    Hash Cond: (t3.c1 = t1.c1)
3589    ->  Seq Scan on t3
3590    ->  Hash
3591          ->  Merge Join
3592                Merge Cond: (t1.c1 = t2.c1)
3593                ->  Index Scan using t1_i1 on t1
3594                ->  Sort
3595                      Sort Key: t2.c1
3596                      ->  Seq Scan on t2
3597 (10 rows)
3598
3599 ----
3600 ---- No. L-3-2 GUC parameter to disable hints
3601 ----
3602 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1;
3603                 QUERY PLAN                
3604 ------------------------------------------
3605  Merge Join
3606    Merge Cond: (t1.c1 = t2.c1)
3607    ->  Merge Join
3608          Merge Cond: (t1.c1 = t3.c1)
3609          ->  Index Scan using t1_i1 on t1
3610          ->  Index Scan using t3_i1 on t3
3611    ->  Sort
3612          Sort Key: t2.c1
3613          ->  Seq Scan on t2
3614 (9 rows)
3615
3616 -- No. L-3-2-1
3617 Set geqo_threshold = 3;
3618 Set geqo_seed = 0;
3619 /*+Leading(t1 t2 t3)*/
3620 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1;
3621 LOG:  pg_hint_plan:
3622 used hint:
3623 not used hint:
3624 Leading(t1 t2 t3)
3625 duplication hint:
3626 error hint:
3627
3628                 QUERY PLAN                
3629 ------------------------------------------
3630  Merge Join
3631    Merge Cond: (t1.c1 = t2.c1)
3632    ->  Merge Join
3633          Merge Cond: (t1.c1 = t3.c1)
3634          ->  Index Scan using t1_i1 on t1
3635          ->  Index Scan using t3_i1 on t3
3636    ->  Sort
3637          Sort Key: t2.c1
3638          ->  Seq Scan on t2
3639 (9 rows)
3640
3641 Reset geqo_threshold;
3642 -- No. L-3-2-2
3643 Set geqo_threshold = 4;
3644 Set geqo_seed = 0;
3645 /*+Leading(t1 t2 t3)*/
3646 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1;
3647 LOG:  pg_hint_plan:
3648 used hint:
3649 Leading(t1 t2 t3)
3650 not used hint:
3651 duplication hint:
3652 error hint:
3653
3654                    QUERY PLAN                   
3655 ------------------------------------------------
3656  Hash Join
3657    Hash Cond: (t3.c1 = t1.c1)
3658    ->  Seq Scan on t3
3659    ->  Hash
3660          ->  Merge Join
3661                Merge Cond: (t1.c1 = t2.c1)
3662                ->  Index Scan using t1_i1 on t1
3663                ->  Sort
3664                      Sort Key: t2.c1
3665                      ->  Seq Scan on t2
3666 (10 rows)
3667
3668 Reset geqo_threshold;
3669 -- No. L-3-2-3
3670 Set from_collapse_limit = 2;
3671 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.v2 WHERE t1.c1 = v2.c1;
3672                      QUERY PLAN                      
3673 -----------------------------------------------------
3674  Hash Join
3675    Hash Cond: (t1.c1 = v2t1.c1)
3676    ->  Seq Scan on t1
3677    ->  Hash
3678          ->  Merge Join
3679                Merge Cond: (v2t1.c1 = v2t2.c1)
3680                ->  Index Scan using t1_i1 on t1 v2t1
3681                ->  Sort
3682                      Sort Key: v2t2.c1
3683                      ->  Seq Scan on t2 v2t2
3684 (10 rows)
3685
3686 /*+Leading(t1 v2t1 v2t2)*/
3687 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.v2 WHERE t1.c1 = v2.c1;
3688 LOG:  pg_hint_plan:
3689 used hint:
3690 Leading(t1 v2t1 v2t2)
3691 not used hint:
3692 duplication hint:
3693 error hint:
3694
3695                      QUERY PLAN                      
3696 -----------------------------------------------------
3697  Hash Join
3698    Hash Cond: (t1.c1 = v2t1.c1)
3699    ->  Seq Scan on t1
3700    ->  Hash
3701          ->  Merge Join
3702                Merge Cond: (v2t1.c1 = v2t2.c1)
3703                ->  Index Scan using t1_i1 on t1 v2t1
3704                ->  Sort
3705                      Sort Key: v2t2.c1
3706                      ->  Seq Scan on t2 v2t2
3707 (10 rows)
3708
3709 Reset from_collapse_limit;
3710 -- No. L-3-2-4
3711 Set from_collapse_limit = 3;
3712 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.v2 WHERE t1.c1 = v2.c1;
3713                   QUERY PLAN                   
3714 -----------------------------------------------
3715  Merge Join
3716    Merge Cond: (v2t1.c1 = v2t2.c1)
3717    ->  Merge Join
3718          Merge Cond: (t1.c1 = v2t1.c1)
3719          ->  Index Scan using t1_i1 on t1
3720          ->  Index Scan using t1_i1 on t1 v2t1
3721    ->  Sort
3722          Sort Key: v2t2.c1
3723          ->  Seq Scan on t2 v2t2
3724 (9 rows)
3725
3726 /*+Leading(v2t1 v2t2 t1)*/
3727 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.v2 WHERE t1.c1 = v2.c1;
3728 LOG:  pg_hint_plan:
3729 used hint:
3730 Leading(v2t1 v2t2 t1)
3731 not used hint:
3732 duplication hint:
3733 error hint:
3734
3735                      QUERY PLAN                      
3736 -----------------------------------------------------
3737  Hash Join
3738    Hash Cond: (t1.c1 = v2t1.c1)
3739    ->  Seq Scan on t1
3740    ->  Hash
3741          ->  Merge Join
3742                Merge Cond: (v2t1.c1 = v2t2.c1)
3743                ->  Index Scan using t1_i1 on t1 v2t1
3744                ->  Sort
3745                      Sort Key: v2t2.c1
3746                      ->  Seq Scan on t2 v2t2
3747 (10 rows)
3748
3749 Reset from_collapse_limit;
3750 -- No. L-3-2-5
3751 Set join_collapse_limit = 2;
3752 EXPLAIN (COSTS false) SELECT * FROM s1.t3
3753   JOIN s1.t2 ON (t3.c1 = t2.c1)
3754   JOIN s1.t1 ON (t1.c1 = t3.c1);
3755                 QUERY PLAN                
3756 ------------------------------------------
3757  Hash Join
3758    Hash Cond: (t1.c1 = t3.c1)
3759    ->  Seq Scan on t1
3760    ->  Hash
3761          ->  Hash Join
3762                Hash Cond: (t3.c1 = t2.c1)
3763                ->  Seq Scan on t3
3764                ->  Hash
3765                      ->  Seq Scan on t2
3766 (9 rows)
3767
3768 /*+Leading(t1 t2 t3)*/
3769 EXPLAIN (COSTS false) SELECT * FROM s1.t3
3770   JOIN s1.t2 ON (t3.c1 = t2.c1)
3771   JOIN s1.t1 ON (t1.c1 = t3.c1);
3772 LOG:  pg_hint_plan:
3773 used hint:
3774 Leading(t1 t2 t3)
3775 not used hint:
3776 duplication hint:
3777 error hint:
3778
3779                 QUERY PLAN                
3780 ------------------------------------------
3781  Hash Join
3782    Hash Cond: (t1.c1 = t3.c1)
3783    ->  Seq Scan on t1
3784    ->  Hash
3785          ->  Hash Join
3786                Hash Cond: (t3.c1 = t2.c1)
3787                ->  Seq Scan on t3
3788                ->  Hash
3789                      ->  Seq Scan on t2
3790 (9 rows)
3791
3792 Reset join_collapse_limit;
3793 -- No. L-3-2-6
3794 Set join_collapse_limit = 3;
3795 EXPLAIN (COSTS false) SELECT * FROM s1.t3
3796   JOIN s1.t2 ON (t3.c1 = t2.c1)
3797   JOIN s1.t1 ON (t1.c1 = t3.c1);
3798                    QUERY PLAN                   
3799 ------------------------------------------------
3800  Hash Join
3801    Hash Cond: (t3.c1 = t2.c1)
3802    ->  Seq Scan on t3
3803    ->  Hash
3804          ->  Merge Join
3805                Merge Cond: (t1.c1 = t2.c1)
3806                ->  Index Scan using t1_i1 on t1
3807                ->  Sort
3808                      Sort Key: t2.c1
3809                      ->  Seq Scan on t2
3810 (10 rows)
3811
3812 /*+Leading(t1 t2 t3)*/
3813 EXPLAIN (COSTS false) SELECT * FROM s1.t3
3814   JOIN s1.t2 ON (t3.c1 = t2.c1)
3815   JOIN s1.t1 ON (t1.c1 = t3.c1);
3816 LOG:  pg_hint_plan:
3817 used hint:
3818 Leading(t1 t2 t3)
3819 not used hint:
3820 duplication hint:
3821 error hint:
3822
3823                    QUERY PLAN                   
3824 ------------------------------------------------
3825  Hash Join
3826    Hash Cond: (t3.c1 = t2.c1)
3827    ->  Seq Scan on t3
3828    ->  Hash
3829          ->  Merge Join
3830                Merge Cond: (t1.c1 = t2.c1)
3831                ->  Index Scan using t1_i1 on t1
3832                ->  Sort
3833                      Sort Key: t2.c1
3834                      ->  Seq Scan on t2
3835 (10 rows)
3836
3837 Reset join_collapse_limit;
3838 ----
3839 ---- No. L-3-3 join between parents or between children
3840 ----
3841 -- No. L-3-3-1
3842 /*+Leading(t1 t2 t3)*/
3843 EXPLAIN (COSTS false) SELECT * FROM s1.p2c1 t1
3844   JOIN s1.p2c2 t2 ON (t1.c1 = t2.c1)
3845   JOIN s1.p2c3 t3 ON (t1.c1 = t3.c1);
3846 LOG:  pg_hint_plan:
3847 used hint:
3848 Leading(t1 t2 t3)
3849 not used hint:
3850 duplication hint:
3851 error hint:
3852
3853                   QUERY PLAN                   
3854 -----------------------------------------------
3855  Hash Join
3856    Hash Cond: (t1.c1 = t3.c1)
3857    ->  Hash Join
3858          Hash Cond: (t1.c1 = t2.c1)
3859          ->  Append
3860                ->  Seq Scan on p2c1 t1
3861                ->  Seq Scan on p2c1c1 t1
3862                ->  Seq Scan on p2c1c2 t1
3863          ->  Hash
3864                ->  Append
3865                      ->  Seq Scan on p2c2 t2
3866                      ->  Seq Scan on p2c2c1 t2
3867                      ->  Seq Scan on p2c2c2 t2
3868    ->  Hash
3869          ->  Append
3870                ->  Seq Scan on p2c3 t3
3871                ->  Seq Scan on p2c3c1 t3
3872                ->  Seq Scan on p2c3c2 t3
3873 (18 rows)
3874
3875 -- No. L-3-3-2
3876 /*+Leading(p2c1c1 p2c2c1 p2c3c1)*/
3877 EXPLAIN (COSTS false) SELECT * FROM s1.p2c1 t1
3878   JOIN s1.p2c2 t2 ON (t1.c1 = t2.c1)
3879   JOIN s1.p2c3 t3 ON (t1.c1 = t3.c1);
3880 LOG:  pg_hint_plan:
3881 used hint:
3882 not used hint:
3883 Leading(p2c1c1 p2c2c1 p2c3c1)
3884 duplication hint:
3885 error hint:
3886
3887                   QUERY PLAN                   
3888 -----------------------------------------------
3889  Hash Join
3890    Hash Cond: (t1.c1 = t3.c1)
3891    ->  Hash Join
3892          Hash Cond: (t1.c1 = t2.c1)
3893          ->  Append
3894                ->  Seq Scan on p2c1 t1
3895                ->  Seq Scan on p2c1c1 t1
3896                ->  Seq Scan on p2c1c2 t1
3897          ->  Hash
3898                ->  Append
3899                      ->  Seq Scan on p2c2 t2
3900                      ->  Seq Scan on p2c2c1 t2
3901                      ->  Seq Scan on p2c2c2 t2
3902    ->  Hash
3903          ->  Append
3904                ->  Seq Scan on p2c3 t3
3905                ->  Seq Scan on p2c3c1 t3
3906                ->  Seq Scan on p2c3c2 t3
3907 (18 rows)
3908
3909 ----
3910 ---- No. L-3-4 conflict leading hint
3911 ----
3912 -- No. L-3-4-1
3913 EXPLAIN (COSTS false) SELECT * FROM s1.t1
3914   JOIN s1.t2 ON (t1.c1 = t2.c1)
3915   JOIN s1.t3 ON (t1.c1 = t3.c1);
3916                 QUERY PLAN                
3917 ------------------------------------------
3918  Merge Join
3919    Merge Cond: (t1.c1 = t2.c1)
3920    ->  Merge Join
3921          Merge Cond: (t1.c1 = t3.c1)
3922          ->  Index Scan using t1_i1 on t1
3923          ->  Index Scan using t3_i1 on t3
3924    ->  Sort
3925          Sort Key: t2.c1
3926          ->  Seq Scan on t2
3927 (9 rows)
3928
3929 /*+Leading(t2 t3 t1)Leading(t1 t2 t3)*/
3930 EXPLAIN (COSTS false) SELECT * FROM s1.t1
3931   JOIN s1.t2 ON (t1.c1 = t2.c1)
3932   JOIN s1.t3 ON (t1.c1 = t3.c1);
3933 INFO:  hint syntax error at or near "Leading(t2 t3 t1)Leading(t1 t2 t3)"
3934 DETAIL:  Conflict leading hint.
3935 LOG:  pg_hint_plan:
3936 used hint:
3937 Leading(t1 t2 t3)
3938 not used hint:
3939 duplication hint:
3940 Leading(t2 t3 t1)
3941 error hint:
3942
3943                    QUERY PLAN                   
3944 ------------------------------------------------
3945  Hash Join
3946    Hash Cond: (t3.c1 = t1.c1)
3947    ->  Seq Scan on t3
3948    ->  Hash
3949          ->  Merge Join
3950                Merge Cond: (t1.c1 = t2.c1)
3951                ->  Index Scan using t1_i1 on t1
3952                ->  Sort
3953                      Sort Key: t2.c1
3954                      ->  Seq Scan on t2
3955 (10 rows)
3956
3957 -- No. L-3-4-2
3958 /*+Leading(t3 t1 t2)Leading(t2 t3 t1)Leading(t1 t2 t3)*/
3959 EXPLAIN (COSTS false) SELECT * FROM s1.t1
3960   JOIN s1.t2 ON (t1.c1 = t2.c1)
3961   JOIN s1.t3 ON (t1.c1 = t3.c1);
3962 INFO:  hint syntax error at or near "Leading(t3 t1 t2)Leading(t2 t3 t1)Leading(t1 t2 t3)"
3963 DETAIL:  Conflict leading hint.
3964 INFO:  hint syntax error at or near "Leading(t2 t3 t1)Leading(t1 t2 t3)"
3965 DETAIL:  Conflict leading hint.
3966 LOG:  pg_hint_plan:
3967 used hint:
3968 Leading(t1 t2 t3)
3969 not used hint:
3970 duplication hint:
3971 Leading(t3 t1 t2)
3972 Leading(t2 t3 t1)
3973 error hint:
3974
3975                    QUERY PLAN                   
3976 ------------------------------------------------
3977  Hash Join
3978    Hash Cond: (t3.c1 = t1.c1)
3979    ->  Seq Scan on t3
3980    ->  Hash
3981          ->  Merge Join
3982                Merge Cond: (t1.c1 = t2.c1)
3983                ->  Index Scan using t1_i1 on t1
3984                ->  Sort
3985                      Sort Key: t2.c1
3986                      ->  Seq Scan on t2
3987 (10 rows)
3988
3989 -- No. L-3-4-3
3990 /*+Leading(t2 t3 t1)Leading()*/
3991 EXPLAIN (COSTS false) SELECT * FROM s1.t1
3992   JOIN s1.t2 ON (t1.c1 = t2.c1)
3993   JOIN s1.t3 ON (t1.c1 = t3.c1);
3994 INFO:  hint syntax error at or near "Leading()"
3995 DETAIL:  In Leading hint, specified relation name 2 or more.
3996 INFO:  hint syntax error at or near "Leading(t2 t3 t1)Leading()"
3997 DETAIL:  Conflict leading hint.
3998 LOG:  pg_hint_plan:
3999 used hint:
4000 not used hint:
4001 duplication hint:
4002 Leading(t2 t3 t1)
4003 error hint:
4004 Leading()
4005
4006                 QUERY PLAN                
4007 ------------------------------------------
4008  Merge Join
4009    Merge Cond: (t1.c1 = t2.c1)
4010    ->  Merge Join
4011          Merge Cond: (t1.c1 = t3.c1)
4012          ->  Index Scan using t1_i1 on t1
4013          ->  Index Scan using t3_i1 on t3
4014    ->  Sort
4015          Sort Key: t2.c1
4016          ->  Seq Scan on t2
4017 (9 rows)
4018
4019 -- No. L-3-4-4
4020 /*+Leading(t3 t1 t2)Leading(t2 t3 t1)Leading()*/
4021 EXPLAIN (COSTS false) SELECT * FROM s1.t1
4022   JOIN s1.t2 ON (t1.c1 = t2.c1)
4023   JOIN s1.t3 ON (t1.c1 = t3.c1);
4024 INFO:  hint syntax error at or near "Leading()"
4025 DETAIL:  In Leading hint, specified relation name 2 or more.
4026 INFO:  hint syntax error at or near "Leading(t3 t1 t2)Leading(t2 t3 t1)Leading()"
4027 DETAIL:  Conflict leading hint.
4028 INFO:  hint syntax error at or near "Leading(t2 t3 t1)Leading()"
4029 DETAIL:  Conflict leading hint.
4030 LOG:  pg_hint_plan:
4031 used hint:
4032 not used hint:
4033 duplication hint:
4034 Leading(t3 t1 t2)
4035 Leading(t2 t3 t1)
4036 error hint:
4037 Leading()
4038
4039                 QUERY PLAN                
4040 ------------------------------------------
4041  Merge Join
4042    Merge Cond: (t1.c1 = t2.c1)
4043    ->  Merge Join
4044          Merge Cond: (t1.c1 = t3.c1)
4045          ->  Index Scan using t1_i1 on t1
4046          ->  Index Scan using t3_i1 on t3
4047    ->  Sort
4048          Sort Key: t2.c1
4049          ->  Seq Scan on t2
4050 (9 rows)
4051
4052 ----
4053 ---- No. L-3-5 hint state output
4054 ----
4055 -- No. L-3-5-1
4056 /*+Leading()*/
4057 EXPLAIN (COSTS false) SELECT * FROM s1.t1
4058   JOIN s1.t2 ON (t1.c1 = t2.c1)
4059   JOIN s1.t3 ON (t1.c1 = t3.c1);
4060 INFO:  hint syntax error at or near "Leading()"
4061 DETAIL:  In Leading hint, specified relation name 2 or more.
4062 LOG:  pg_hint_plan:
4063 used hint:
4064 not used hint:
4065 duplication hint:
4066 error hint:
4067 Leading()
4068
4069                 QUERY PLAN                
4070 ------------------------------------------
4071  Merge Join
4072    Merge Cond: (t1.c1 = t2.c1)
4073    ->  Merge Join
4074          Merge Cond: (t1.c1 = t3.c1)
4075          ->  Index Scan using t1_i1 on t1
4076          ->  Index Scan using t3_i1 on t3
4077    ->  Sort
4078          Sort Key: t2.c1
4079          ->  Seq Scan on t2
4080 (9 rows)
4081
4082 -- No. L-3-5-2
4083 /*+Leading(t1)*/
4084 EXPLAIN (COSTS false) SELECT * FROM s1.t1
4085   JOIN s1.t2 ON (t1.c1 = t2.c1)
4086   JOIN s1.t3 ON (t1.c1 = t3.c1);
4087 INFO:  hint syntax error at or near "Leading(t1)"
4088 DETAIL:  In Leading hint, specified relation name 2 or more.
4089 LOG:  pg_hint_plan:
4090 used hint:
4091 not used hint:
4092 duplication hint:
4093 error hint:
4094 Leading(t1)
4095
4096                 QUERY PLAN                
4097 ------------------------------------------
4098  Merge Join
4099    Merge Cond: (t1.c1 = t2.c1)
4100    ->  Merge Join
4101          Merge Cond: (t1.c1 = t3.c1)
4102          ->  Index Scan using t1_i1 on t1
4103          ->  Index Scan using t3_i1 on t3
4104    ->  Sort
4105          Sort Key: t2.c1
4106          ->  Seq Scan on t2
4107 (9 rows)
4108
4109 -- No. L-3-5-3
4110 /*+Leading(t1 t2)*/
4111 EXPLAIN (COSTS false) SELECT * FROM s1.t1
4112   JOIN s1.t2 ON (t1.c1 = t2.c1)
4113   JOIN s1.t3 ON (t1.c1 = t3.c1);
4114 LOG:  pg_hint_plan:
4115 used hint:
4116 Leading(t1 t2)
4117 not used hint:
4118 duplication hint:
4119 error hint:
4120
4121                 QUERY PLAN                
4122 ------------------------------------------
4123  Nested Loop
4124    ->  Merge Join
4125          Merge Cond: (t1.c1 = t2.c1)
4126          ->  Index Scan using t1_i1 on t1
4127          ->  Sort
4128                Sort Key: t2.c1
4129                ->  Seq Scan on t2
4130    ->  Index Scan using t3_i1 on t3
4131          Index Cond: (c1 = t1.c1)
4132 (9 rows)
4133
4134 -- No. L-3-5-4
4135 /*+Leading(t1 t2 t3)*/
4136 EXPLAIN (COSTS false) SELECT * FROM s1.t1
4137   JOIN s1.t2 ON (t1.c1 = t2.c1)
4138   JOIN s1.t3 ON (t1.c1 = t3.c1);
4139 LOG:  pg_hint_plan:
4140 used hint:
4141 Leading(t1 t2 t3)
4142 not used hint:
4143 duplication hint:
4144 error hint:
4145
4146                    QUERY PLAN                   
4147 ------------------------------------------------
4148  Hash Join
4149    Hash Cond: (t3.c1 = t1.c1)
4150    ->  Seq Scan on t3
4151    ->  Hash
4152          ->  Merge Join
4153                Merge Cond: (t1.c1 = t2.c1)
4154                ->  Index Scan using t1_i1 on t1
4155                ->  Sort
4156                      Sort Key: t2.c1
4157                      ->  Seq Scan on t2
4158 (10 rows)
4159