OSDN Git Service

8月20日消化分の試験を追加した。
[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_pkey on t1
16                ->  Index Scan using t3_pkey on t3
17          ->  Index Scan using t4_pkey 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_pkey 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_pkey on t1 t_1
73                ->  Index Scan using t3_pkey on t3 t_3
74          ->  Index Scan using t4_pkey 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_pkey 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_pkey 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_pkey on t1
158                ->  Index Scan using t3_pkey on t3
159          ->  Index Scan using t4_pkey 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_pkey 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_pkey 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_pkey 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_pkey 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_pkey on t1
265                ->  Index Scan using t3_pkey on t3
266          ->  Index Scan using t2_pkey 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_pkey on t1
292                ->  Index Scan using t3_pkey on t3
293          ->  Index Scan using t2_pkey 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_pkey 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_pkey 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_pkey on t1
334                ->  Index Scan using t3_pkey on t3
335          ->  Index Scan using t2_pkey 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_pkey on t1
359                ->  Index Scan using t1_pkey on t1 s2t1
360          ->  Index Scan using t3_pkey 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_pkey on t1
381                              ->  Index Scan using t3_pkey on t3
382                        ->  Index Scan using t4_pkey 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_pkey on t1
391                ->  Index Scan using t3_pkey on t3
392          ->  Index Scan using t4_pkey 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_pkey 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_pkey 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_pkey 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_pkey 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_pkey 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_pkey on t1
561                ->  Index Scan using t3_pkey on t3
562          ->  Index Scan using t4_pkey 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_pkey 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_pkey on t1
616                ->  Index Scan using t3_pkey on t3
617          ->  Index Scan using t4_pkey 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_pkey 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_pkey on t1
1138                ->  Index Scan using t3_pkey on t3
1139          ->  Index Scan using t4_pkey 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_pkey 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_pkey 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_pkey 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