From c9505a47abbb95064ac92c379bdbb74fcf743f16 Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Wed, 22 Jun 2016 14:36:36 -0700 Subject: [PATCH] Remember original targetlist in MultiQueryContainerNode(). The old targetlist wasn't used so far, but the upcoming RETURNING support relies on it. This also allows to get rid of some crufty code in multi_executor.c:multi_ExecutorStart(), which used the worker query's targetlist instead of the main statement's (which didn't have one up to now). --- src/backend/distributed/executor/multi_executor.c | 4 ++-- src/backend/distributed/planner/multi_planner.c | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/backend/distributed/executor/multi_executor.c b/src/backend/distributed/executor/multi_executor.c index 181e9f524..e831e4583 100644 --- a/src/backend/distributed/executor/multi_executor.c +++ b/src/backend/distributed/executor/multi_executor.c @@ -59,9 +59,9 @@ multi_ExecutorStart(QueryDesc *queryDesc, int eflags) { Task *task = NULL; List *taskList = workerJob->taskList; + TupleDesc tupleDescriptor = ExecCleanTypeFromTL( + planStatement->planTree->targetlist, false); List *dependendJobList PG_USED_FOR_ASSERTS_ONLY = workerJob->dependedJobList; - List *workerTargetList = multiPlan->workerJob->jobQuery->targetList; - TupleDesc tupleDescriptor = ExecCleanTypeFromTL(workerTargetList, false); /* router executor can only execute distributed plans with a single task */ Assert(list_length(taskList) == 1); diff --git a/src/backend/distributed/planner/multi_planner.c b/src/backend/distributed/planner/multi_planner.c index e3c899d37..87c6f4185 100644 --- a/src/backend/distributed/planner/multi_planner.c +++ b/src/backend/distributed/planner/multi_planner.c @@ -185,6 +185,9 @@ MultiQueryContainerNode(PlannedStmt *result, MultiPlan *multiPlan) fauxFunctionScan = makeNode(FunctionScan); fauxFunctionScan->functions = lappend(fauxFunctionScan->functions, fauxFunction); + /* copy original targetlist, accessed for RETURNING queries */ + fauxFunctionScan->scan.plan.targetlist = copyObject(result->planTree->targetlist); + /* * Add set returning function to target list if the original (postgres * created) plan doesn't support backward scans; doing so prevents