OSDN Git Service

ネストしたコメントがヒント中に指定された場合は、ヒントを無効にする
authorMitsuru Hasegawa <hasegawa@metrosystems.co.jp>
Thu, 2 Aug 2012 08:34:21 +0000 (17:34 +0900)
committerMitsuru Hasegawa <hasegawa@metrosystems.co.jp>
Thu, 2 Aug 2012 08:34:21 +0000 (17:34 +0900)
ように修正した。

expected/pg_hint_plan.out
pg_hint_plan.c
sql/pg_hint_plan.sql

index eebc634..2428270 100644 (file)
@@ -64,6 +64,39 @@ EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
 (4 rows)
 
 SET pg_hint_plan.enable TO on;
+/*Set(enable_indexscan off)*/
+EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
+              QUERY PLAN              
+--------------------------------------
+ Merge Join
+   Merge Cond: (t1.id = t2.id)
+   ->  Index Scan using t1_pkey on t1
+   ->  Index Scan using t2_pkey on t2
+(4 rows)
+
+--+Set(enable_indexscan off)
+EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
+              QUERY PLAN              
+--------------------------------------
+ Merge Join
+   Merge Cond: (t1.id = t2.id)
+   ->  Index Scan using t1_pkey on t1
+   ->  Index Scan using t2_pkey on t2
+(4 rows)
+
+/*+Set(enable_indexscan off) /* nest comment */ */
+EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
+INFO:  hint syntax error at or near "/* nest comment */ */
+EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;"
+DETAIL:  Block comments nest doesn't supported.
+              QUERY PLAN              
+--------------------------------------
+ Merge Join
+   Merge Cond: (t1.id = t2.id)
+   ->  Index Scan using t1_pkey on t1
+   ->  Index Scan using t2_pkey on t2
+(4 rows)
+
 /*+Set(enable_indexscan off)*/
 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
 LOG:  pg_hint_plan:
index 0581031..4c7a664 100644 (file)
@@ -1035,7 +1035,10 @@ parse_head_comment(Query *parse)
 
        /* 入れ子にしたブロックコメントはサポートしない */
        if ((head = strstr(p, BLOCK_COMMENT_START)) != NULL && head < tail)
+       {
                parse_ereport(head, ("Block comments nest doesn't supported."));
+               return NULL;
+       }
 
        /* ヒント句部分を切り出す */
        len = tail - p;
index a9a3206..d248e3c 100644 (file)
@@ -17,6 +17,12 @@ SET pg_hint_plan.enable TO off;
 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
 SET pg_hint_plan.enable TO on;
 
+/*Set(enable_indexscan off)*/
+EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
+--+Set(enable_indexscan off)
+EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
+/*+Set(enable_indexscan off) /* nest comment */ */
+EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
 /*+Set(enable_indexscan off)*/
 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
 /*+ Set(enable_indexscan off) Set(enable_hashjoin off) */