OSDN Git Service

PostgreSQL本体からそのまま流用した関数のみをcore.cに残すように修正した。
authorMitsuru Hasegawa <hasegawa@metrosystems.co.jp>
Thu, 2 Aug 2012 05:44:56 +0000 (14:44 +0900)
committerMitsuru Hasegawa <hasegawa@metrosystems.co.jp>
Thu, 2 Aug 2012 05:44:56 +0000 (14:44 +0900)
set_plain_rel_pathlist()は、一度本体側で生成したスキャンパスを再生成
するために使用するために、本体の処理を流用したが、一度目にパスを生成
した際にのみ実行すればよい処理が含まれていたため、その処理を削除して
いる。
pg_hint_plan.c側に関数ごと移動したが、コメントとして本体からの流用
箇所を追加した。

core.c
pg_hint_plan.c

diff --git a/core.c b/core.c
index b37d3b5..af4f7f4 100644 (file)
--- a/core.c
+++ b/core.c
@@ -4,7 +4,6 @@
  *       Routines copied from PostgreSQL core distribution.
  *
  * src/backend/optimizer/path/allpaths.c
- *     set_plain_rel_pathlist()
  *     set_append_rel_pathlist()
  *     accumulate_append_subpath()
  *     set_dummy_rel_pathlist()
  */
 
 /*
- * set_plain_rel_pathlist
- *       Build access paths for a plain relation (no subquery, no inheritance)
- */
-static void
-set_plain_rel_pathlist(PlannerInfo *root, RelOptInfo *rel, RangeTblEntry *rte)
-{
-       /* Consider sequential scan */
-       add_path(rel, create_seqscan_path(root, rel));
-
-       /* Consider index scans */
-       create_index_paths(root, rel);
-
-       /* Consider TID scans */
-       create_tidscan_paths(root, rel);
-
-       /* Now find the cheapest of the paths for this rel */
-       set_cheapest(rel);
-}
-
-/*
  * set_append_rel_pathlist
  *       Build access paths for an "append relation"
  *
index 9b92f6b..0581031 100644 (file)
@@ -278,8 +278,6 @@ static void make_rels_by_clauseless_joins(PlannerInfo *root,
                                                                                  RelOptInfo *old_rel,
                                                                                  ListCell *other_rels);
 static bool has_join_restriction(PlannerInfo *root, RelOptInfo *rel);
-static void set_plain_rel_pathlist(PlannerInfo *root, RelOptInfo *rel,
-                                                                  RangeTblEntry *rte);
 static void set_append_rel_pathlist(PlannerInfo *root, RelOptInfo *rel,
                                                                        Index rti, RangeTblEntry *rte);
 static List *accumulate_append_subpath(List *subpaths, Path *path);
@@ -1875,6 +1873,29 @@ transform_join_hints(PlanHint *plan, PlannerInfo *root, int nbaserel,
 
 }
 
+/*
+ * set_plain_rel_pathlist
+ *       Build access paths for a plain relation (no subquery, no inheritance)
+ *
+ * This function was copied and edited from set_plain_rel_pathlist() in
+ * src/backend/optimizer/path/allpaths.c
+ */
+static void
+set_plain_rel_pathlist(PlannerInfo *root, RelOptInfo *rel, RangeTblEntry *rte)
+{
+       /* Consider sequential scan */
+       add_path(rel, create_seqscan_path(root, rel));
+
+       /* Consider index scans */
+       create_index_paths(root, rel);
+
+       /* Consider TID scans */
+       create_tidscan_paths(root, rel);
+
+       /* Now find the cheapest of the paths for this rel */
+       set_cheapest(rel);
+}
+
 static void
 rebuild_scan_path(PlanHint *plan, PlannerInfo *root, int level,
                                  List *initial_rels)
@@ -2056,6 +2077,9 @@ pg_hint_plan_join_search(PlannerInfo *root, int levels_needed,
 /*
  * set_rel_pathlist
  *       Build access paths for a base relation
+ *
+ * This function was copied and edited from set_rel_pathlist() in
+ * src/backend/optimizer/path/allpaths.c
  */
 static void
 set_rel_pathlist(PlannerInfo *root, RelOptInfo *rel,