aboutsummaryrefslogtreecommitdiff
path: root/src/backend/optimizer/plan/planner.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2016-03-14 20:04:44 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2016-03-14 20:04:48 -0400
commit101fd9349eddb7e9ed84a239145d5230a9bc7336 (patch)
tree8b77f95222f0a8342b45e6606a7e77046fdead3e /src/backend/optimizer/plan/planner.c
parentbe6de4c1215a8ad5607b1fcc7e9e6da1de780877 (diff)
downloadpostgresql-101fd9349eddb7e9ed84a239145d5230a9bc7336.tar.gz
postgresql-101fd9349eddb7e9ed84a239145d5230a9bc7336.zip
Add a GetForeignUpperPaths callback function for FDWs.
This is basically like the just-added create_upper_paths_hook, but control is funneled only to the FDW responsible for all the baserels of the current query; so providing such a callback is much less likely to add useless overhead than using the hook function is. The documentation is a bit sketchy. We'll likely want to improve it, and/or adjust the call conventions, when we get some experience with actually using this callback. Hopefully somebody will find time to experiment with it before 9.6 feature freeze.
Diffstat (limited to 'src/backend/optimizer/plan/planner.c')
-rw-r--r--src/backend/optimizer/plan/planner.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c
index d11f44e64d5..fc0a2d8de35 100644
--- a/src/backend/optimizer/plan/planner.c
+++ b/src/backend/optimizer/plan/planner.c
@@ -1752,13 +1752,17 @@ grouping_planner(PlannerInfo *root, bool inheritance_update,
root->upper_targets[UPPERREL_GROUP_AGG] = grouping_target;
/*
- * Let extensions, particularly CustomScan providers, consider
- * injecting extension Paths into the query's upperrels, where they
- * will compete with the Paths we create below. We pass the final
- * scan/join rel because that's not so easily findable from the
- * PlannerInfo struct; anything else the hook wants to know should be
- * obtainable via "root".
+ * Let extensions, particularly FDWs and CustomScan providers,
+ * consider injecting extension Paths into the query's upperrels,
+ * where they will compete with the Paths we create below. We pass
+ * the final scan/join rel because that's not so easily findable from
+ * the PlannerInfo struct; anything else the hooks want to know should
+ * be obtainable via "root".
*/
+ if (current_rel->fdwroutine &&
+ current_rel->fdwroutine->GetForeignUpperPaths)
+ current_rel->fdwroutine->GetForeignUpperPaths(root, current_rel);
+
if (create_upper_paths_hook)
(*create_upper_paths_hook) (root, current_rel);