fix_srf.diff
text/x-patch
Filename: fix_srf.diff
Type: text/x-patch
Part: 0
Patch
Format: unified
| File | + | − |
|---|---|---|
| src/backend/optimizer/plan/planner.c | 9 | 3 |
diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c
index bc81535905..647baa3cf6 100644
--- a/src/backend/optimizer/plan/planner.c
+++ b/src/backend/optimizer/plan/planner.c
@@ -6939,6 +6939,9 @@ apply_scanjoin_target_to_paths(PlannerInfo *root,
*/
rel->reltarget = llast_node(PathTarget, scanjoin_targets);
+ /* Extract SRF-free scan/join target. */
+ scanjoin_target = linitial_node(PathTarget, scanjoin_targets);
+
/* Special case: handle dummy relations separately. */
if (is_dummy_rel)
{
@@ -6967,12 +6970,15 @@ apply_scanjoin_target_to_paths(PlannerInfo *root,
rel->part_rels = NULL;
rel->boundinfo = NULL;
+ /* Now fix things up if scan/join target contains SRFs */
+ if (root->parse->hasTargetSRFs)
+ adjust_paths_for_srfs(root, rel,
+ scanjoin_targets,
+ scanjoin_targets_contain_srfs);
+
return;
}
- /* Extract SRF-free scan/join target. */
- scanjoin_target = linitial_node(PathTarget, scanjoin_targets);
-
/*
* Adjust each input path. If the tlist exprs are the same, we can just
* inject the sortgroupref information into the existing pathtarget.