summaryrefslogtreecommitdiff
path: root/src/include/windowapi.h
diff options
context:
space:
mode:
authorRichard Guo <rguo@postgresql.org>2025-10-21 12:35:36 +0900
committerRichard Guo <rguo@postgresql.org>2025-10-21 12:35:36 +0900
commit18d2614093481cb7ae89e1f5b72f3ddf5fb49b4c (patch)
tree5b8f023970ba8756c097438ad647d7dcc44b4333 /src/include/windowapi.h
parent29b039e9166d5ad70b39375faceec2167343d355 (diff)
Fix pushdown of degenerate HAVING clauses
67a54b9e8 taught the planner to push down HAVING clauses even when grouping sets are present, as long as the clause does not reference any columns that are nullable by the grouping sets. However, there was an oversight: if any empty grouping sets are present, the aggregation node can produce a row that did not come from the input, and pushing down a HAVING clause in this case may cause us to fail to filter out that row. Currently, non-degenerate HAVING clauses are not pushed down when empty grouping sets are present, since the empty grouping sets would nullify the vars they reference. However, degenerate (variable-free) HAVING clauses are not subject to this restriction and may be incorrectly pushed down. To fix, explicitly check for the presence of empty grouping sets and retain degenerate clauses in HAVING when they are present. This ensures that we don't emit a bogus aggregated row. A copy of each such clause is also put in WHERE so that query_planner() can use it in a gating Result node. To facilitate this check, this patch expands the groupingSets tree of the query to a flat list of grouping sets before applying the HAVING pushdown optimization. This does not add any additional planning overhead, since we need to do this expansion anyway. In passing, make a small tweak to preprocess_grouping_sets() by reordering its initial operations a bit. Backpatch to v18, where this issue was introduced. Reported-by: Yuhang Qiu <iamqyh@gmail.com> Author: Richard Guo <guofenglinux@gmail.com> Author: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://postgr.es/m/0879D9C9-7FE2-4A20-9593-B23F7A0B5290@gmail.com Backpatch-through: 18
Diffstat (limited to 'src/include/windowapi.h')
0 files changed, 0 insertions, 0 deletions