OSDN Git Service

Merge branch 'master' into ut
[pghintplan/pg_hint_plan.git] / sql / ut-A.sql
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
7 ---- TODO 後で適切な位置に移動する
8 ----
9 ---- No. J-3-4 hint state output
10 ----
11
12 -- No. J-3-4-7
13 /*+Set(enable_indexscan off)NestLoop("")Set(enable_bitmapscan off)*/
14 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
15
16 ----
17 ---- No. A-5-1 hint format
18 ----
19
20 -- No. A-5-1-1
21 /*+SeqScan(t1)*/
22 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
23
24 -- No. A-5-1-2
25 /* +SeqScan(t1)*/
26 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
27
28 -- No. A-5-1-3
29 --+SeqScan(t1)
30 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
31
32 -- No. A-5-1-4
33 --+SeqScan(t1)
34 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
35
36 -- No. A-5-1-5
37 -- +SeqScan(t1)
38 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
39
40 -- No. A-5-1-6
41 --SeqScan(t1)
42 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
43
44 -- No. A-5-1-7
45 /*+SeqScan(t1) /* nest comment */ */
46 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
47
48 -- No. A-5-1-8
49 /* +SeqScan(t1) /* nest comment */ */
50 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
51
52 -- No. A-5-1-9
53 /*SeqScan(t1) /* nest comment */ */
54 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
55
56 ----
57 ---- No. A-5-2 hint position
58 ----
59
60 -- No. A-5-2-1
61 /*+SeqScan(t1)*/
62 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
63
64 -- No. A-5-2-2
65 /* normal comment */
66 /*+SeqScan(t1)*/
67 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
68
69 -- No. A-5-2-3
70 EXPLAIN (COSTS false) SELECT /*+SeqScan(t1)*/ * FROM s1.t1 WHERE t1.c1 = 1;
71
72 ----
73 ---- No. A-5-4 hint delimiter
74 ----
75
76 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
77 -- No. A-5-4-1
78 -- No. A-5-4-2
79 -- No. A-5-4-3
80 -- No. A-5-4-4
81 -- No. A-5-4-5
82 -- No. A-5-4-6
83 -- No. A-5-4-7
84 /*+Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
85 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
86
87 -- No. A-5-4-8
88 /*+ Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
89 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
90
91 -- No. A-5-4-9
92 /*+Set(enable_indexscan"off")Set(enable_bitmapscan"off") */
93 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
94
95 -- No. A-5-4-10
96 /*+ Set (enable_indexscan"off") Set (enable_bitmapscan"off")*/
97 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
98
99 -- No. A-5-4-11
100 /*+Set ( enable_indexscan"off")Set ( enable_bitmapscan"off")*/
101 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
102
103 -- No. A-5-4-12
104 /*+Set(enable_indexscan"off" ) Set(enable_bitmapscan"off" ) */
105 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
106
107 -- No. A-5-4-13
108 /*+Set( enable_indexscan "off" )Set( enable_bitmapscan "off" )*/
109 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
110
111 -- No. A-5-4-14
112 /*+ Set ( enable_indexscan "off" ) Set ( enable_bitmapscan "off" ) */
113 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
114
115 -- No. A-5-4-15
116 /*+     Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
117 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
118
119 -- No. A-5-4-16
120 /*+Set(enable_indexscan"off")Set(enable_bitmapscan"off")        */
121 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
122
123 -- No. A-5-4-17
124 /*+     Set     (enable_indexscan"off") Set     (enable_bitmapscan"off")*/
125 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
126
127 -- No. A-5-4-18
128 /*+Set  (       enable_indexscan"off")Set       (       enable_bitmapscan"off")*/
129 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
130
131 -- No. A-5-4-19
132 /*+Set(enable_indexscan"off"    )       Set(enable_bitmapscan"off"      )       */
133 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
134
135 -- No. A-5-4-20
136 /*+Set( enable_indexscan        "off"   )Set(   enable_bitmapscan       "off"   )*/
137 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
138
139 -- No. A-5-4-21
140 /*+     Set     (       enable_indexscan        "off"   )       Set     (       enable_bitmapscan       "off"   )       */
141 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
142
143 -- No. A-5-4-22
144 /*+
145 Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
146 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
147
148 -- No. A-5-4-23
149 /*+Set(enable_indexscan"off")Set(enable_bitmapscan"off")
150 */
151 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
152
153 -- No. A-5-4-24
154 /*+
155 Set
156 (enable_indexscan"off")
157 Set
158 (enable_bitmapscan"off")*/
159 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
160
161 -- No. A-5-4-25
162 /*+Set
163 (
164 enable_indexscan"off")Set
165 (
166 enable_bitmapscan"off")*/
167 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
168
169 -- No. A-5-4-26
170 /*+Set(enable_indexscan"off"
171 )
172 Set(enable_bitmapscan"off"
173 )
174 */
175 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
176
177 -- No. A-5-4-27
178 /*+Set(
179 enable_indexscan
180 "off"
181 )Set(
182 enable_bitmapscan
183 "off"
184 )*/
185 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
186
187 -- No. A-5-4-28
188 /*+
189 Set
190 (
191 enable_indexscan
192 "off"
193 )
194 Set
195 (
196 enable_bitmapscan
197 "off"
198 )
199 */
200 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
201
202 -- No. A-5-4-29
203 /*+     
204          Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
205 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
206
207 -- No. A-5-4-30
208 /*+Set(enable_indexscan"off")Set(enable_bitmapscan"off")        
209          */
210 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
211
212 -- No. A-5-4-31
213 /*+     
214          Set    
215          (enable_indexscan"off")        
216          Set    
217          (enable_bitmapscan"off")*/
218 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
219
220 -- No. A-5-4-32
221 /*+Set  
222          (      
223          enable_indexscan"off")Set      
224          (      
225          enable_bitmapscan"off")*/
226 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
227
228 -- No. A-5-4-33
229 /*+Set(enable_indexscan"off"    
230          )      
231          Set(enable_bitmapscan"off"     
232          )      
233          */
234 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
235
236 -- No. A-5-4-34
237 /*+Set(         
238          enable_indexscan       
239          "off"  
240          )Set(  
241          enable_bitmapscan      
242          "off"  
243          )*/
244 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
245
246 -- No. A-5-4-35
247 /*+     
248          Set    
249          (      
250          enable_indexscan       
251          "off"  
252          )      
253          Set    
254          (      
255          enable_bitmapscan      
256          "off"  
257          )      
258          */
259 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
260
261 ----
262 ---- No. A-5-5 hint object pattern
263 ---- No. A-7-2 message object pattern
264 ----
265
266 -- No. A-5-5-1
267 -- No. A-7-2-1
268 /*+SeqScan(t)*/
269 EXPLAIN (COSTS false) SELECT * FROM s1.t1 t WHERE t.c1 = 1;
270 /*+SeqScan(ttt)*/
271 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ttt WHERE ttt.c1 = 1;
272 /*+SeqScan("t")*/
273 EXPLAIN (COSTS false) SELECT * FROM s1.t1 t WHERE t.c1 = 1;
274 /*+SeqScan("ttt")*/
275 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ttt WHERE ttt.c1 = 1;
276
277 -- No. A-5-5-2
278 -- No. A-7-2-2
279 /*+SeqScan(T)*/
280 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "T" WHERE "T".c1 = 1;
281 /*+SeqScan(TTT)*/
282 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "TTT" WHERE "TTT".c1 = 1;
283 /*+SeqScan("T")*/
284 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "T" WHERE "T".c1 = 1;
285 /*+SeqScan("TTT")*/
286 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "TTT" WHERE "TTT".c1 = 1;
287
288 -- No. A-5-5-3
289 -- No. A-7-2-3
290 /*+SeqScan(()*/
291 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "(" WHERE "(".c1 = 1;
292 /*+SeqScan(((()*/
293 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "(((" WHERE "(((".c1 = 1;
294 /*+SeqScan("(")*/
295 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "(" WHERE "(".c1 = 1;
296 /*+SeqScan("(((")*/
297 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "(((" WHERE "(((".c1 = 1;
298
299 -- No. A-5-5-4
300 -- No. A-7-2-4
301 /*+SeqScan())*/
302 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ")" WHERE ")".c1 = 1;
303 /*+SeqScan(")")*/
304 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ")" WHERE ")".c1 = 1;
305 /*+SeqScan(")))")*/
306 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ")))" WHERE ")))".c1 = 1;
307
308 -- No. A-5-5-5
309 -- No. A-7-2-5
310 /*+SeqScan(")*/
311 EXPLAIN (COSTS false) SELECT * FROM s1.t1 """" WHERE """".c1 = 1;
312 /*+SeqScan("""")*/
313 EXPLAIN (COSTS false) SELECT * FROM s1.t1 """" WHERE """".c1 = 1;
314 /*+SeqScan("""""""")*/
315 EXPLAIN (COSTS false) SELECT * FROM s1.t1 """""""" WHERE """""""".c1 = 1;
316
317 -- No. A-5-5-6
318 -- No. A-7-2-6
319 /*+SeqScan( )*/
320 EXPLAIN (COSTS false) SELECT * FROM s1.t1 " " WHERE " ".c1 = 1;
321 /*+SeqScan(" ")*/
322 EXPLAIN (COSTS false) SELECT * FROM s1.t1 " " WHERE " ".c1 = 1;
323 /*+SeqScan("   ")*/
324 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "   " WHERE "   ".c1 = 1;
325
326 -- No. A-5-5-7
327 -- No. A-7-2-7
328 /*+SeqScan(     )*/
329 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "     " WHERE "       ".c1 = 1;
330 /*+SeqScan("    ")*/
331 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "     " WHERE "       ".c1 = 1;
332 /*+SeqScan("                    ")*/
333 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "                     " WHERE "                       ".c1 = 1;
334
335 -- No. A-5-5-8
336 -- No. A-7-2-8
337 /*+SeqScan(
338 )*/
339 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "
340 " WHERE "
341 ".c1 = 1;
342 /*+SeqScan("
343 ")*/
344 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "
345 " WHERE "
346 ".c1 = 1;
347 /*+SeqScan("
348
349
350 ")*/
351 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "
352
353
354 " WHERE "
355
356
357 ".c1 = 1;
358
359 -- No. A-5-5-9
360 -- No. A-7-2-9
361 /*+SeqScan(Set)*/
362 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "Set" WHERE "Set".c1 = 1;
363 /*+SeqScan("Set")*/
364 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "Set" WHERE "Set".c1 = 1;
365 /*+SeqScan("Set SeqScan Leading")*/
366 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "Set SeqScan Leading" WHERE "Set SeqScan Leading".c1 = 1;
367
368 -- No. A-5-5-10
369 -- No. A-7-2-10
370 /*+SeqScan(あ)*/
371 EXPLAIN (COSTS false) SELECT * FROM s1.t1 あ WHERE あ.c1 = 1;
372 /*+SeqScan(あいう)*/
373 EXPLAIN (COSTS false) SELECT * FROM s1.t1 あいう WHERE あいう.c1 = 1;
374 /*+SeqScan("あ")*/
375 EXPLAIN (COSTS false) SELECT * FROM s1.t1 あ WHERE あ.c1 = 1;
376 /*+SeqScan("あいう")*/
377 EXPLAIN (COSTS false) SELECT * FROM s1.t1 あいう WHERE あいう.c1 = 1;
378
379 -- No. A-5-5-11
380 -- No. A-7-2-11
381 /*+SeqScan(/**/)*/
382 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "/**/" WHERE "/**/".c1 = 1;
383 /*+SeqScan(/**//**//**/)*/
384 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "/**//**//**/" WHERE "/**//**//**/".c1 = 1;
385
386 -- No. A-5-5-12
387 -- No. A-7-2-12
388 /*+SeqScan("tT()""      
389 Set/**/あ")*/
390 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "tT()""       
391 Set/**/あ" WHERE "tT()""       
392 Set/**/あ".c1 = 1;
393 --"
394
395 /*+SeqScan("tT()""      
396 Setあ")*/
397 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "tT()""       
398 Setあ" WHERE "tT()""   
399 Setあ".c1 = 1;
400
401 ----
402 ---- No. A-5-6 hint parse error
403 ----
404
405 -- No. A-5-6-1
406 /*+Set(enable_indexscan off)Set enable_tidscan off)Set(enable_bitmapscan off)SeqScan(t1)*/
407 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
408
409 -- No. A-5-6-2
410 /*+Set(enable_indexscan off)Set(enable_tidscan off Set(enable_bitmapscan off)SeqScan(t1)*/
411 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
412
413 -- No. A-5-6-3
414 /*+Set(enable_indexscan off)Set(enable_tidscan "off)Set(enable_bitmapscan off)SeqScan(t1)*/
415 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
416
417 -- No. A-5-6-4
418 /*+Set(enable_indexscan off)SeqScan("")Set(enable_bitmapscan off)*/
419 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
420
421 -- No. A-5-6-5
422 /*+Set(enable_indexscan off)NoSet(enable_tidscan off)Set(enable_bitmapscan off)SeqScan(t1)*/
423 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
424
425 -- No. A-5-6-6
426 /*+Set(enable_indexscan off)"Set"(enable_tidscan off)Set(enable_bitmapscan off)SeqScan(t1)*/
427 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
428
429 -- No. A-5-6-7
430 /*+Set(enable_indexscan off)Set(enable_tidscan /* value */off)Set(enable_bitmapscan off)SeqScan(t1)*/
431 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
432
433 ----
434 ---- No. A-6-1 original GUC parameter
435 ----
436
437 -- No. A-6-1-1
438 SET ROLE super_user;
439 SET pg_hint_plan.debug_print TO off;
440 SHOW pg_hint_plan.enable;
441 SHOW pg_hint_plan.debug_print;
442 SHOW pg_hint_plan.parse_messages;
443 SET pg_hint_plan.enable TO off;
444 SET pg_hint_plan.debug_print TO on;
445 SET pg_hint_plan.parse_messages TO error;
446 SHOW pg_hint_plan.enable;
447 SHOW pg_hint_plan.debug_print;
448 SHOW pg_hint_plan.parse_messages;
449 RESET pg_hint_plan.enable;
450 RESET pg_hint_plan.debug_print;
451 RESET pg_hint_plan.parse_messages;
452 SHOW pg_hint_plan.enable;
453 SHOW pg_hint_plan.debug_print;
454 SHOW pg_hint_plan.parse_messages;
455
456 -- No. A-6-1-2
457 SET ROLE normal_user;
458 SHOW pg_hint_plan.enable;
459 SHOW pg_hint_plan.debug_print;
460 SHOW pg_hint_plan.parse_messages;
461 SET pg_hint_plan.enable TO off;
462 SET pg_hint_plan.debug_print TO on;
463 SET pg_hint_plan.parse_messages TO error;
464 SHOW pg_hint_plan.enable;
465 SHOW pg_hint_plan.debug_print;
466 SHOW pg_hint_plan.parse_messages;
467 RESET pg_hint_plan.enable;
468 RESET pg_hint_plan.debug_print;
469 RESET pg_hint_plan.parse_messages;
470 SHOW pg_hint_plan.enable;
471 SHOW pg_hint_plan.debug_print;
472 SHOW pg_hint_plan.parse_messages;
473
474 RESET ROLE;
475
476 ----
477 ---- No. A-6-2 original GUC parameter pg_hint_plan.enable
478 ----
479
480 -- No. A-6-2-1
481 SET pg_hint_plan.enable TO on;
482 SHOW pg_hint_plan.enable;
483 /*+Set(enable_indexscan off)*/
484 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
485
486 -- No. A-6-2-2
487 SET pg_hint_plan.enable TO off;
488 SHOW pg_hint_plan.enable;
489 /*+Set(enable_indexscan off)*/
490 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
491
492 -- No. A-6-2-3
493 SET pg_hint_plan.enable TO DEFAULT;
494 SHOW pg_hint_plan.enable;
495 /*+Set(enable_indexscan off)*/
496 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
497
498 -- No. A-6-2-4
499 SET pg_hint_plan.enable TO enable;
500 SHOW pg_hint_plan.enable;
501
502 ----
503 ---- No. A-6-3 original GUC parameter pg_hint_plan.debug_print
504 ----
505
506 -- No. A-6-3-1
507 SET pg_hint_plan.debug_print TO on;
508 SHOW pg_hint_plan.debug_print;
509 /*+Set(enable_indexscan off)*/
510 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
511
512 -- No. A-6-3-2
513 SET pg_hint_plan.debug_print TO off;
514 SHOW pg_hint_plan.debug_print;
515 /*+Set(enable_indexscan off)*/
516 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
517
518 -- No. A-6-3-3
519 SET pg_hint_plan.debug_print TO DEFAULT;
520 SHOW pg_hint_plan.debug_print;
521 /*+Set(enable_indexscan off)*/
522 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
523
524 -- No. A-6-3-4
525 SET pg_hint_plan.debug_print TO enable;
526 SHOW pg_hint_plan.debug_print;
527
528 ----
529 ---- No. A-6-4 original GUC parameter pg_hint_plan.parse_messages
530 ----
531
532 SET client_min_messages TO debug5;
533
534 -- No. A-6-4-1
535 SET pg_hint_plan.parse_messages TO debug5;
536 SHOW pg_hint_plan.parse_messages;
537 /*+Set*/SELECT 1;
538 SET client_min_messages TO debug4;
539 /*+Set*/SELECT 1;
540
541 -- No. A-6-4-2
542 SET pg_hint_plan.parse_messages TO debug4;
543 SHOW pg_hint_plan.parse_messages;
544 /*+Set*/SELECT 1;
545 SET client_min_messages TO debug3;
546 /*+Set*/SELECT 1;
547
548 -- No. A-6-4-3
549 SET pg_hint_plan.parse_messages TO debug3;
550 SHOW pg_hint_plan.parse_messages;
551 /*+Set*/SELECT 1;
552 SET client_min_messages TO debug2;
553 /*+Set*/SELECT 1;
554
555 -- No. A-6-4-4
556 SET pg_hint_plan.parse_messages TO debug2;
557 SHOW pg_hint_plan.parse_messages;
558 /*+Set*/SELECT 1;
559 SET client_min_messages TO debug1;
560 /*+Set*/SELECT 1;
561
562 -- No. A-6-4-5
563 SET pg_hint_plan.parse_messages TO debug1;
564 SHOW pg_hint_plan.parse_messages;
565 /*+Set*/SELECT 1;
566 SET client_min_messages TO log;
567 /*+Set*/SELECT 1;
568
569 -- No. A-6-4-6
570 SET pg_hint_plan.parse_messages TO log;
571 SHOW pg_hint_plan.parse_messages;
572 /*+Set*/SELECT 1;
573 SET client_min_messages TO info;
574 /*+Set*/SELECT 1;
575
576 -- No. A-6-4-7
577 SET pg_hint_plan.parse_messages TO info;
578 SHOW pg_hint_plan.parse_messages;
579 /*+Set*/SELECT 1;
580 SET client_min_messages TO notice;
581 /*+Set*/SELECT 1;
582
583 -- No. A-6-4-8
584 SET pg_hint_plan.parse_messages TO notice;
585 SHOW pg_hint_plan.parse_messages;
586 /*+Set*/SELECT 1;
587 SET client_min_messages TO warning;
588 /*+Set*/SELECT 1;
589
590 -- No. A-6-4-9
591 SET pg_hint_plan.parse_messages TO warning;
592 SHOW pg_hint_plan.parse_messages;
593 /*+Set*/SELECT 1;
594 SET client_min_messages TO error;
595 /*+Set*/SELECT 1;
596
597 -- No. A-6-4-10
598 SET pg_hint_plan.parse_messages TO error;
599 SHOW pg_hint_plan.parse_messages;
600 /*+Set*/SELECT 1;
601 SET client_min_messages TO fatal;
602 /*+Set*/SELECT 1;
603
604 -- No. A-6-4-11
605 RESET client_min_messages;
606 SET pg_hint_plan.parse_messages TO DEFAULT;
607 SHOW pg_hint_plan.parse_messages;
608 /*+Set*/SELECT 1;
609
610 -- No. A-6-4-12
611 SET pg_hint_plan.parse_messages TO fatal;
612 SHOW pg_hint_plan.parse_messages;
613
614 -- No. A-6-4-13
615 SET pg_hint_plan.parse_messages TO panic;
616 SHOW pg_hint_plan.parse_messages;
617
618 -- No. A-6-4-14
619 SET pg_hint_plan.parse_messages TO on;
620 SHOW pg_hint_plan.parse_messages;
621
622 ----
623 ---- No. A-7-1 parse error message output
624 ----
625
626 -- No. A-7-1-1
627 /*+"Set"(enable_indexscan on)*/SELECT 1;
628 /*+Set()(enable_indexscan on)*/SELECT 1;
629 /*+Set(enable_indexscan on*/SELECT 1;
630
631 ----
632 ---- No. A-7-3 hint state output
633 ----
634
635 SET pg_hint_plan.debug_print TO on;
636 SET client_min_messages TO LOG;
637
638 -- No. A-7-3-1
639 /*+SeqScan(t1)*/
640 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
641
642 -- No. A-7-3-2
643 /*+SeqScan(no_table)*/
644 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
645
646 -- No. A-7-3-3
647 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
648 /*+TidScan(t1)BitmapScan(t1)*/
649 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
650 /*+TidScan(t1)BitmapScan(t1)IndexScan(t1)*/
651 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
652 /*+TidScan(t1)BitmapScan(t1)IndexScan(t1)SeqScan(t1)*/
653 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
654
655 -- No. A-7-3-4
656 /*+Set(enable_indexscan enable)*/
657 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
658
659 ----
660 ---- No. A-8-1 hint state output
661 ----
662
663 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
664 EXPLAIN (COSTS false) EXECUTE p1;
665 DEALLOCATE p1;
666
667 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
668 EXPLAIN (COSTS false) EXECUTE p1 (1);
669 DEALLOCATE p1;
670
671 -- No. A-8-1-1
672 -- No. A-8-1-2
673 /*+SeqScan(t1)*/
674 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
675 /*+BitmapScan(t1)*/
676 EXPLAIN (COSTS false) EXECUTE p1;
677 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
678 /*+BitmapScan(t1)*/
679 EXPLAIN (COSTS false) EXECUTE p1;
680 DEALLOCATE p1;
681
682 /*+BitmapScan(t1)*/
683 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
684 /*+SeqScan(t1)*/
685 EXPLAIN (COSTS false) EXECUTE p1 (1);
686 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
687 /*+SeqScan(t1)*/
688 EXPLAIN (COSTS false) EXECUTE p1 (1);
689 DEALLOCATE p1;
690
691 -- No. A-8-1-3
692 -- No. A-8-1-4
693 /*+SeqScan(t1)*/
694 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
695 EXPLAIN (COSTS false) EXECUTE p1;
696 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
697 EXPLAIN (COSTS false) EXECUTE p1;
698 DEALLOCATE p1;
699
700 /*+BitmapScan(t1)*/
701 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
702 EXPLAIN (COSTS false) EXECUTE p1 (1);
703 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
704 EXPLAIN (COSTS false) EXECUTE p1 (1);
705 DEALLOCATE p1;
706
707 -- No. A-8-1-5
708 -- No. A-8-1-6
709 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
710 /*+BitmapScan(t1)*/
711 EXPLAIN (COSTS false) EXECUTE p1;
712 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
713 /*+BitmapScan(t1)*/
714 EXPLAIN (COSTS false) EXECUTE p1;
715 DEALLOCATE p1;
716
717 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
718 /*+BitmapScan(t1)*/
719 EXPLAIN (COSTS false) EXECUTE p1 (1);
720 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
721 /*+BitmapScan(t1)*/
722 EXPLAIN (COSTS false) EXECUTE p1 (1);
723 DEALLOCATE p1;
724
725 ----
726 ---- No. A-8-4 EXECUTE statement name error
727 ----
728
729 -- No. A-8-4-1
730 EXECUTE p1;
731 SHOW pg_hint_plan.debug_print;
732
733 ----
734 ---- No. A-9-5 EXECUTE statement name error
735 ----
736
737 -- No. A-9-5-1
738 CREATE EXTENSION pg_stat_statements;
739 SELECT pg_stat_statements_reset();
740 SELECT * FROM s1.t1 WHERE t1.c1 = 1;
741 /*+Set(enable_seqscan off)*/ SELECT * FROM s1.t1 WHERE t1.c1 = 1;
742 /*+SeqScan(t1)*/ SELECT * FROM s1.t1 WHERE t1.c1 = 1;
743 SELECT s.query, s.calls
744   FROM public.pg_stat_statements s
745   JOIN pg_catalog.pg_database d
746     ON (s.dbid = d.oid)
747  ORDER BY 1;
748
749 ----
750 ---- No. A-12-1 reset of global variable of core at the error
751 ---- No. A-12-2 reset of global variable of original at the error
752 ----
753
754 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
755 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
756 PREPARE p1 AS SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
757 EXPLAIN (COSTS false) EXECUTE p1;
758
759 -- No. A-12-1-1
760 -- No. A-12-2-1
761 SELECT name, setting FROM settings;
762 SET pg_hint_plan.parse_messages TO error;
763 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
764 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
765 SELECT name, setting FROM settings;
766 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)*/
767 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
768
769 -- No. A-12-1-2
770 -- No. A-12-2-2
771 SELECT name, setting FROM settings;
772 SET pg_hint_plan.parse_messages TO error;
773 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
774 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
775 SELECT name, setting FROM settings;
776 EXPLAIN (COSTS false) EXECUTE p1;
777
778 -- No. A-12-1-3
779 -- No. A-12-2-3
780 SELECT name, setting FROM settings;
781 SET pg_hint_plan.parse_messages TO error;
782 EXPLAIN (COSTS false) EXECUTE p2;
783 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)*/
784 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
785 EXPLAIN (COSTS false) EXECUTE p1;
786 SELECT name, setting FROM settings;
787
788 -- No. A-12-1-4
789 -- No. A-12-2-4
790 SELECT name, setting FROM settings;
791 SET pg_hint_plan.parse_messages TO error;
792 EXPLAIN (COSTS false) EXECUTE p2;
793 EXPLAIN (COSTS false) EXECUTE p1;
794 SELECT name, setting FROM settings;
795
796 DEALLOCATE p1;
797 SET pg_hint_plan.parse_messages TO LOG;
798
799 ----
800 ---- No. A-12-3 effective range of the hint
801 ----
802
803 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
804
805 -- No. A-12-3-1
806 SET enable_indexscan TO off;
807 SET enable_mergejoin TO off;
808 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
809 SELECT name, setting FROM settings;
810 /*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
811 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
812 SELECT name, setting FROM settings;
813 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
814
815 -- No. A-12-3-2
816 SET enable_indexscan TO off;
817 SET enable_mergejoin TO off;
818 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
819 SELECT name, setting FROM settings;
820 BEGIN;
821 /*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
822 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
823 COMMIT;
824 BEGIN;
825 SELECT name, setting FROM settings;
826 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
827 COMMIT;
828
829 -- No. A-12-3-3
830 SET enable_indexscan TO off;
831 SET enable_mergejoin TO off;
832 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
833 SELECT name, setting FROM settings;
834 /*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
835 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
836 \connect
837 LOAD 'pg_hint_plan';
838 SELECT name, setting FROM settings;
839 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
840
841 SET pg_hint_plan.enable TO on;
842 SET pg_hint_plan.debug_print TO on;
843 SET client_min_messages TO LOG;
844 SET search_path TO public;
845