From 7aa347dfb630fb25658db9d372ec3bb0d3ce781c Mon Sep 17 00:00:00 2001 From: Mehmet Yilmaz Date: Fri, 27 Jun 2025 09:25:51 +0000 Subject: [PATCH] =?UTF-8?q?PG=2018=E2=80=99s=20synthetic=20RTE=5FGROUP=20r?= =?UTF-8?q?eally=20is=20=E2=80=9Canother=E2=80=9D=20RTE=20kind=20that=20yo?= =?UTF-8?q?u=20must=20treat=20just=20like=20the=20RTE=5FSUBQUERY=20and=20R?= =?UTF-8?q?TE=5FJOIN=20cases=20if=20you=20want=20your=20composite=E2=80=90?= =?UTF-8?q?field=20logic=20to=20see=20through=20it.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../distributed/planner/multi_logical_planner.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/backend/distributed/planner/multi_logical_planner.c b/src/backend/distributed/planner/multi_logical_planner.c index cb7c87371..a8eeb08c0 100644 --- a/src/backend/distributed/planner/multi_logical_planner.c +++ b/src/backend/distributed/planner/multi_logical_planner.c @@ -520,6 +520,23 @@ CompositeFieldRecursive(Expr *expression, Query *query) compositeField = CompositeFieldRecursive(joinColumn, query); } +#if PG_VERSION_NUM >= PG_VERSION_18 + else if (rangeTableEntry->rtekind == RTE_GROUP) + { + /* PG 18 synthetic GROUP RTE: each groupexprs[i] matches varattno=i+1 */ + List *gexprs = rangeTableEntry->groupexprs; + AttrNumber grpIndex = candidateColumn->varattno - 1; + + if (grpIndex >= 0 && grpIndex < list_length(gexprs)) + { + Expr *grpExpr = (Expr *) list_nth(gexprs, grpIndex); + compositeField = CompositeFieldRecursive(grpExpr, query); + } + + /* else leave compositeField = NULL */ + } +#endif + return compositeField; }