summaryrefslogtreecommitdiff
path: root/src/bin/pgtclsh
diff options
context:
space:
mode:
authorRichard Guo2026-01-19 02:13:23 +0000
committerRichard Guo2026-01-19 02:13:23 +0000
commit34740b90bc123d645a3a71231b765b778bdcf049 (patch)
tree0c4ac624234c7944ebc85d24c43c558a425a25e0 /src/bin/pgtclsh
parent228fe0c3e68ef37b7e083fcb513664b9737c4d93 (diff)
Fix unsafe pushdown of quals referencing grouping VarsHEADmaster
When checking a subquery's output expressions to see if it's safe to push down an upper-level qual, check_output_expressions() previously treated grouping Vars as opaque Vars. This implicitly assumed they were stable and scalar. However, a grouping Var's underlying expression corresponds to the grouping clause, which may be volatile or set-returning. If an upper-level qual references such an output column, pushing it down into the subquery is unsafe. This can cause strange results due to multiple evaluation of a volatile function, or introduce SRFs into the subquery's WHERE/HAVING quals. This patch teaches check_output_expressions() to look through grouping Vars to their underlying expressions. This ensures that any volatility or set-returning properties in the grouping clause are detected, preventing the unsafe pushdown. We do not need to recursively examine the Vars contained in these underlying expressions. Even if they reference outputs from lower-level subqueries (at any depth), those references are guaranteed not to expand to volatile or set-returning functions, because subqueries containing such functions in their targetlists are never pulled up. Backpatch to v18, where this issue was introduced. Reported-by: Eric Ridge <eebbrr@gmail.com> Diagnosed-by: Tom Lane <tgl@sss.pgh.pa.us> Author: Richard Guo <guofenglinux@gmail.com> Discussion: https://postgr.es/m/7900964C-F99E-481E-BEE5-4338774CEB9F@gmail.com Backpatch-through: 18
Diffstat (limited to 'src/bin/pgtclsh')
0 files changed, 0 insertions, 0 deletions