diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 2021-07-09 13:38:24 -0400 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 2021-07-09 13:38:24 -0400 |
| commit | d23ac62afa646b7073a7f0db0a137308459a263b (patch) | |
| tree | 46553e634f9d88fe207ea8ce0e5bf23ac494363b /src/backend/optimizer | |
| parent | d0a02bdb8c2576b5aa607f127320e444080bd579 (diff) | |
Avoid creating a RESULT RTE that's marked LATERAL.
Commit 7266d0997 added code to pull up simple constant function
results, converting the RTE_FUNCTION RTE to a dummy RTE_RESULT
RTE since it no longer need be scanned. But I forgot to clear
the LATERAL flag if the RTE has it set. If the function reduced
to a constant, it surely contains no lateral references so this
simplification is logically OK. It's needed because various other
places will Assert that RESULT RTEs aren't LATERAL.
Per bug #17097 from Yaoguang Chen. Back-patch to v13 where the
faulty code came in.
Discussion: https://postgr.es/m/17097-3372ef9f798fc94f@postgresql.org
Diffstat (limited to 'src/backend/optimizer')
| -rw-r--r-- | src/backend/optimizer/prep/prepjointree.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/backend/optimizer/prep/prepjointree.c b/src/backend/optimizer/prep/prepjointree.c index 99ac3351146..224c5153b15 100644 --- a/src/backend/optimizer/prep/prepjointree.c +++ b/src/backend/optimizer/prep/prepjointree.c @@ -1808,10 +1808,13 @@ pull_up_constant_function(PlannerInfo *root, Node *jtnode, /* * Convert the RTE to be RTE_RESULT type, signifying that we don't need to - * scan it anymore, and zero out RTE_FUNCTION-specific fields. + * scan it anymore, and zero out RTE_FUNCTION-specific fields. Also make + * sure the RTE is not marked LATERAL, since elsewhere we don't expect + * RTE_RESULTs to be LATERAL. */ rte->rtekind = RTE_RESULT; rte->functions = NIL; + rte->lateral = false; /* * We can reuse the RangeTblRef node. |
