diff --git a/src/backend/distributed/executor/insert_select_executor.c b/src/backend/distributed/executor/insert_select_executor.c index 91915c0b8..3e7be04b5 100644 --- a/src/backend/distributed/executor/insert_select_executor.c +++ b/src/backend/distributed/executor/insert_select_executor.c @@ -128,7 +128,7 @@ CoordinatorInsertSelectExecScanInternal(CustomScanState *node) EState *executorState = ScanStateGetExecutorState(scanState); ParamListInfo paramListInfo = executorState->es_param_list_info; DistributedPlan *distributedPlan = scanState->distributedPlan; - Query *insertSelectQuery = copyObject(distributedPlan->insertSelectQuery); + Query *insertSelectQuery = (distributedPlan->insertSelectQuery); List *insertTargetList = insertSelectQuery->targetList; RangeTblEntry *selectRte = ExtractSelectRangeTableEntry(insertSelectQuery); RangeTblEntry *insertRte = ExtractResultRelationRTE(insertSelectQuery); @@ -175,10 +175,6 @@ CoordinatorInsertSelectExecScanInternal(CustomScanState *node) // paramListInfo); //elog(ERROR, "selectQuery after: %s", pretty_format_node_dump(nodeToString(selectQuery))); - Form_pg_attribute att_tup0 = TupleDescAttr(node->ss.ss_ScanTupleSlot->tts_tupleDescriptor, 0); - Form_pg_attribute att_tup1 = TupleDescAttr(node->ss.ss_ScanTupleSlot->tts_tupleDescriptor, 1); - Form_pg_attribute att_tup2 = TupleDescAttr(node->ss.ss_ScanTupleSlot->tts_tupleDescriptor, 2); - //elog(INFO, "%d-%d-%d", att_tup0->atttypid,att_tup1->atttypid,att_tup2->atttypid); PlannedStmt *selectPlan = GenerateValuesPlannedStmt(selectQuery); @@ -442,7 +438,7 @@ GenerateValuesPlannedStmt(Query *parse) /* there is only a single relation rte */ valuesScanNode->values_lists = rte2->values_lists; - valuesScanNode->values_lists = (List *) eval_const_expressions(NULL, (Node *) valuesScanNode->values_lists); + //valuesScanNode->values_lists = (List *) eval_const_expressions(NULL, (Node *) valuesScanNode->values_lists); plan->targetlist = copyObject(FetchStatementTargetList((Node *) parse)); diff --git a/src/backend/distributed/planner/distributed_planner.c b/src/backend/distributed/planner/distributed_planner.c index ee938cecd..9d45d2008 100644 --- a/src/backend/distributed/planner/distributed_planner.c +++ b/src/backend/distributed/planner/distributed_planner.c @@ -407,17 +407,16 @@ GetSingleValue(Query *insertSelectQuery) List *valuesLists = valuesRte->values_lists; Node *firstValue = linitial(valuesLists); - valuesRte->values_lists = list_make1(firstValue); + valuesRte->values_lists = NIL; Query *copyQuery = copyObject(insertSelectQuery); - - valuesRte->values_lists = valuesLists; - RangeTblEntry *copySubqueryRte = ExtractSelectRangeTableEntry(copyQuery); RangeTblEntry *valuesRteInCopy = linitial(copySubqueryRte->subquery->rtable); valuesRteInCopy->values_lists = list_make1(firstValue); + valuesRte->values_lists = valuesLists; + return copyQuery; } diff --git a/src/backend/distributed/planner/insert_select_planner.c b/src/backend/distributed/planner/insert_select_planner.c index e55209e33..153e0cba3 100644 --- a/src/backend/distributed/planner/insert_select_planner.c +++ b/src/backend/distributed/planner/insert_select_planner.c @@ -327,14 +327,6 @@ DistributedInsertSelectSupported(Query *queryTree, RangeTblEntry *insertRte, Query *subquery = subqueryRte->subquery; - if (!NeedsDistributedPlanning(subquery)) - { - return DeferredError(ERRCODE_FEATURE_NOT_SUPPORTED, - "distributed INSERT ... SELECT can only select from " - "distributed tables", - NULL, NULL); - } - /* we do not expect to see a view in modify target */ foreach(rangeTableCell, queryTree->rtable) { @@ -348,6 +340,16 @@ DistributedInsertSelectSupported(Query *queryTree, RangeTblEntry *insertRte, } } + if (false && !NeedsDistributedPlanning(subquery)) + { + return DeferredError(ERRCODE_FEATURE_NOT_SUPPORTED, + "distributed INSERT ... SELECT can only select from " + "distributed tables", + NULL, NULL); + } + + + if (FindNodeCheck((Node *) queryTree, CitusIsVolatileFunction)) { return DeferredError(ERRCODE_FEATURE_NOT_SUPPORTED, @@ -1118,7 +1120,7 @@ InsertPartitionColumnMatchesSelect(Query *query, RangeTblEntry *insertRte, static DistributedPlan * CreateCoordinatorInsertSelectPlan(uint64 planId, Query *parse) { - Query *insertSelectQuery = copyObject(parse); + Query *insertSelectQuery = (parse); RangeTblEntry *insertRte = ExtractResultRelationRTE(insertSelectQuery); Oid targetRelationId = insertRte->relid;