summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/executor/nodeAgg.c7
-rw-r--r--src/backend/rewrite/rewriteHandler.c53
2 files changed, 34 insertions, 26 deletions
diff --git a/src/backend/executor/nodeAgg.c b/src/backend/executor/nodeAgg.c
index 9b3633f2f2..d59d917eb0 100644
--- a/src/backend/executor/nodeAgg.c
+++ b/src/backend/executor/nodeAgg.c
@@ -2011,6 +2011,13 @@ ExecInitAgg(Agg *node, EState *estate, int eflags)
{
peraggstate->transfn_oid = transfn_oid = collectfn_oid;
peraggstate->collectfn_oid = collectfn_oid = InvalidOid;
+
+ /*
+ * Tuples should only be filtered on the datanodes when coordinator
+ * is doing collection and finalisation
+ */
+ aggref->aggfilter = NULL;
+ aggrefstate->aggfilter = NULL;
}
#else
/*
diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c
index a00564a002..b576a7accc 100644
--- a/src/backend/rewrite/rewriteHandler.c
+++ b/src/backend/rewrite/rewriteHandler.c
@@ -1326,6 +1326,33 @@ rewriteTargetListUD(Query *parsetree, RangeTblEntry *target_rte,
}
#endif
+#ifdef PGXC
+ /*
+ * If relation is non-replicated, we need also to identify the Datanode
+ * from where tuple is fetched.
+ */
+ if (IS_PGXC_COORDINATOR &&
+ !IsConnFromCoord() &&
+ !IsLocatorReplicated(GetRelationLocType(RelationGetRelid(target_relation))))
+ {
+ var = makeVar(parsetree->resultRelation,
+ XC_NodeIdAttributeNumber,
+ INT4OID,
+ -1,
+ InvalidOid,
+ 0);
+
+ attrname = "xc_node_id";
+
+ tle = makeTargetEntry((Expr *) var,
+ list_length(parsetree->targetList) + 1,
+ pstrdup(attrname),
+ true);
+
+ parsetree->targetList = lappend(parsetree->targetList, tle);
+ }
+#endif
+
if (target_relation->rd_rel->relkind == RELKIND_RELATION ||
target_relation->rd_rel->relkind == RELKIND_MATVIEW)
{
@@ -1398,32 +1425,6 @@ rewriteTargetListUD(Query *parsetree, RangeTblEntry *target_rte,
parsetree->targetList = lappend(parsetree->targetList, tle);
}
-#ifdef PGXC
- /*
- * If relation is non-replicated, we need also to identify the Datanode
- * from where tuple is fetched.
- */
- if (IS_PGXC_COORDINATOR &&
- !IsConnFromCoord() &&
- !IsLocatorReplicated(GetRelationLocType(RelationGetRelid(target_relation))))
- {
- var = makeVar(parsetree->resultRelation,
- XC_NodeIdAttributeNumber,
- INT4OID,
- -1,
- InvalidOid,
- 0);
-
- attrname = "xc_node_id";
-
- tle = makeTargetEntry((Expr *) var,
- list_length(parsetree->targetList) + 1,
- pstrdup(attrname),
- true);
-
- parsetree->targetList = lappend(parsetree->targetList, tle);
- }
-#endif
}