OSDN Git Service

無駄なヒントパースの抑止
authorTakashi Suzuki <suzuki.takashi@metrosystems.co.jp>
Thu, 11 Oct 2012 09:05:07 +0000 (18:05 +0900)
committerShigeru HANADA <shigeru.hanada@gmail.com>
Wed, 24 Oct 2012 05:34:19 +0000 (14:34 +0900)
pg_hint_plan が無効の場合も常にヒント句をパースしてヒント情報を生成
していたので、pg_hint_plan が有効な場合にのみヒント句をパースするよ
うに修正した。

pg_hint_plan.c

index 27c37f7..d65b1c4 100644 (file)
@@ -1507,16 +1507,32 @@ pg_hint_plan_planner(Query *parse, int cursorOptions, ParamListInfo boundParams)
        PlannedStmt        *result;
        PlanHint           *plan;
 
-       /* 有効なヒントを保存する。 */
+
+       /*
+        * pg_hint_planが無効である場合は通常のparser処理をおこなう。
+        * 他のフック関数で実行されるhint処理をスキップするために、current_hint 変数
+        * をNULLに設定しておく。
+        */
+       if (!pg_hint_plan_enable)
+       {
+               current_hint = NULL;
+
+               if (prev_planner)
+                       return (*prev_planner) (parse, cursorOptions, boundParams);
+               else
+                       return standard_planner(parse, cursorOptions, boundParams);
+       }
+
+       /* 有効なヒント句を保存する。 */
        plan = parse_head_comment(parse);
 
        /*
         * hintが指定されない、または空のhintを指定された場合は通常のparser処理をお
         * こなう。
-        * 他のフック関数で実行されるhint処理をスキップするために、current_hint 変数をNULL
-        * に設定しておく。
+        * 他のフック関数で実行されるhint処理をスキップするために、current_hint 変数
+        * ã\82\92NULLã\81«è¨­å®\9aã\81\97ã\81¦ã\81\8aã\81\8fã\80\82
         */
-       if (!pg_hint_plan_enable || plan == NULL)
+       if (!plan)
        {
                current_hint = NULL;