Don't reprocess PHV copies within outer aggregates' arguments Since commit e28cf96e9, the copies of a query level's PlaceHolderVars that were pushed down into its subqueries are preprocessed by that level before its SubLinks are turned into SubPlans, so such a copy may already contain SubPlans by the time the subquery is planned. That commit taught build_subplan not to process the SubLinks of a PHV that is passed down as a SubPlan argument, but overlooked that such a copy can also appear within the arguments of an outer-level Aggref, GroupingFunc, or ReturningExpr. The SubLinks in those arguments are still processed when build_subplan collects the node, and that processing descended into the already-preprocessed PHV and tripped the no-SubPlan assertion in process_sublinks_mutator.
To fix, don't descend into PHVs when processing the SubLinks in such a node's arguments. Any PHV found there is a pushed-down copy that its owning level has already preprocessed. Back-patch to v16, as with commit e28cf96e9. Author: Ayush Tiwari <[email protected]> Reviewed-by: Richard Guo <[email protected]> Discussion: https://postgr.es/m/cajtysww8thbrnsmyndqnugg0pjgrqw2vnowb8qx7eu191kp...@mail.gmail.com Backpatch-through: 16 Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/6b858a36ddb80bfa4f478afebe3e84de72600e02 Modified Files -------------- src/backend/optimizer/plan/subselect.c | 18 +++++++++++++++--- src/test/regress/expected/join.out | 25 +++++++++++++++++++++++++ src/test/regress/sql/join.sql | 6 ++++++ 3 files changed, 46 insertions(+), 3 deletions(-)
