mirror of https://github.com/citusdata/citus.git
Merge pull request #3863 from citusdata/remove-getupdateordeleterte
multi_router_planner: replace GetUpdateOrDeleteRTE with ExtractResultRelationRTEpull/3861/head
commit
1b0776f98e
|
@ -150,7 +150,6 @@ static List * GroupInsertValuesByShardId(List *insertValuesList);
|
||||||
static List * ExtractInsertValuesList(Query *query, Var *partitionColumn);
|
static List * ExtractInsertValuesList(Query *query, Var *partitionColumn);
|
||||||
static DeferredErrorMessage * MultiRouterPlannableQuery(Query *query);
|
static DeferredErrorMessage * MultiRouterPlannableQuery(Query *query);
|
||||||
static DeferredErrorMessage * ErrorIfQueryHasModifyingCTE(Query *queryTree);
|
static DeferredErrorMessage * ErrorIfQueryHasModifyingCTE(Query *queryTree);
|
||||||
static RangeTblEntry * GetUpdateOrDeleteRTE(Query *query);
|
|
||||||
static bool SelectsFromDistributedTable(List *rangeTableList, Query *query);
|
static bool SelectsFromDistributedTable(List *rangeTableList, Query *query);
|
||||||
static ShardPlacement * CreateDummyPlacement(void);
|
static ShardPlacement * CreateDummyPlacement(void);
|
||||||
static List * get_all_actual_clauses(List *restrictinfo_list);
|
static List * get_all_actual_clauses(List *restrictinfo_list);
|
||||||
|
@ -1632,7 +1631,9 @@ RouterJob(Query *originalQuery, PlannerRestrictionContext *plannerRestrictionCon
|
||||||
Job *job = CreateJob(originalQuery);
|
Job *job = CreateJob(originalQuery);
|
||||||
job->partitionKeyValue = partitionKeyValue;
|
job->partitionKeyValue = partitionKeyValue;
|
||||||
|
|
||||||
RangeTblEntry *updateOrDeleteRTE = GetUpdateOrDeleteRTE(originalQuery);
|
if (originalQuery->resultRelation > 0)
|
||||||
|
{
|
||||||
|
RangeTblEntry *updateOrDeleteRTE = ExtractResultRelationRTE(originalQuery);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If all of the shards are pruned, we replace the relation RTE into
|
* If all of the shards are pruned, we replace the relation RTE into
|
||||||
|
@ -1641,11 +1642,12 @@ RouterJob(Query *originalQuery, PlannerRestrictionContext *plannerRestrictionCon
|
||||||
* DELETE RTE with subquery type, we just set task list to empty and return
|
* DELETE RTE with subquery type, we just set task list to empty and return
|
||||||
* the job.
|
* the job.
|
||||||
*/
|
*/
|
||||||
if (updateOrDeleteRTE != NULL && updateOrDeleteRTE->rtekind == RTE_SUBQUERY)
|
if (updateOrDeleteRTE->rtekind == RTE_SUBQUERY)
|
||||||
{
|
{
|
||||||
job->taskList = NIL;
|
job->taskList = NIL;
|
||||||
return job;
|
return job;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (isMultiShardModifyQuery)
|
if (isMultiShardModifyQuery)
|
||||||
{
|
{
|
||||||
|
@ -1883,8 +1885,7 @@ SingleShardModifyTaskList(Query *query, uint64 jobId, List *relationShardList,
|
||||||
List *rangeTableList = NIL;
|
List *rangeTableList = NIL;
|
||||||
|
|
||||||
ExtractRangeTableEntryWalker((Node *) query, &rangeTableList);
|
ExtractRangeTableEntryWalker((Node *) query, &rangeTableList);
|
||||||
RangeTblEntry *updateOrDeleteRTE = GetUpdateOrDeleteRTE(query);
|
RangeTblEntry *updateOrDeleteRTE = ExtractResultRelationRTE(query);
|
||||||
Assert(updateOrDeleteRTE != NULL);
|
|
||||||
|
|
||||||
CitusTableCacheEntry *modificationTableCacheEntry = GetCitusTableCacheEntry(
|
CitusTableCacheEntry *modificationTableCacheEntry = GetCitusTableCacheEntry(
|
||||||
updateOrDeleteRTE->relid);
|
updateOrDeleteRTE->relid);
|
||||||
|
@ -1910,22 +1911,6 @@ SingleShardModifyTaskList(Query *query, uint64 jobId, List *relationShardList,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* GetUpdateOrDeleteRTE checks query if it has an UPDATE or DELETE RTE.
|
|
||||||
* Returns that RTE if found.
|
|
||||||
*/
|
|
||||||
static RangeTblEntry *
|
|
||||||
GetUpdateOrDeleteRTE(Query *query)
|
|
||||||
{
|
|
||||||
if (query->resultRelation > 0)
|
|
||||||
{
|
|
||||||
return rt_fetch(query->resultRelation, query->rtable);
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SelectsFromDistributedTable checks if there is a select on a distributed
|
* SelectsFromDistributedTable checks if there is a select on a distributed
|
||||||
* table by looking into range table entries.
|
* table by looking into range table entries.
|
||||||
|
|
Loading…
Reference in New Issue