mirror of https://github.com/citusdata/citus.git
add SetTaskPerPlacementStrings
It is possible that a task will have different query string for each placement. This is the case in INSERT..SELECT via repartitioning. When we are setting task->perPlacementQueryString, we should set queryStringLazy to NULL. Therefore a method for that purpose is created.pull/3659/head
parent
157f4599c3
commit
982b5fbabf
|
@ -228,9 +228,7 @@ WrapTasksForPartitioning(const char *resultIdPrefix, List *selectTaskList,
|
||||||
binaryFormatString);
|
binaryFormatString);
|
||||||
perPlacementQueries = lappend(perPlacementQueries, wrappedQuery->data);
|
perPlacementQueries = lappend(perPlacementQueries, wrappedQuery->data);
|
||||||
}
|
}
|
||||||
|
SetTaskPerPlacementQueryStrings(selectTask, perPlacementQueries);
|
||||||
SetTaskQueryString(selectTask, NULL);
|
|
||||||
selectTask->perPlacementQueryStrings = perPlacementQueries;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,7 @@ static void UpdateTaskQueryString(Query *query, Oid distributedTableId,
|
||||||
static void ConvertRteToSubqueryWithEmptyResult(RangeTblEntry *rte);
|
static void ConvertRteToSubqueryWithEmptyResult(RangeTblEntry *rte);
|
||||||
static bool ShouldLazyDeparseQuery(Task *task);
|
static bool ShouldLazyDeparseQuery(Task *task);
|
||||||
static char * DeparseTaskQuery(Task *task, Query *query);
|
static char * DeparseTaskQuery(Task *task, Query *query);
|
||||||
|
static bool IsEachPlacementQueryStringDifferent(Task* task);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -426,9 +427,7 @@ SetTaskQuery(Task *task, Query *query)
|
||||||
task->queryStringLazy = NULL;
|
task->queryStringLazy = NULL;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
SetTaskQueryString(task, DeparseTaskQuery(task,query));
|
||||||
task->queryForLocalExecution = NULL;
|
|
||||||
task->queryStringLazy = DeparseTaskQuery(task, query);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -444,6 +443,15 @@ SetTaskQueryString(Task *task, char *queryString)
|
||||||
task->queryStringLazy = queryString;
|
task->queryStringLazy = queryString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SetTaskPerPlacementQueryStrings set the perPlacementQueryString for the given task.
|
||||||
|
*/
|
||||||
|
void SetTaskPerPlacementQueryStrings(Task *task, List* perPlacementQueryStringList) {
|
||||||
|
Assert(perPlacementQueryStringList != NIL);
|
||||||
|
task->perPlacementQueryStrings = perPlacementQueryStringList;
|
||||||
|
SetTaskQueryString(task, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SetTaskQueryStringList sets the queryStringList of the given task.
|
* SetTaskQueryStringList sets the queryStringList of the given task.
|
||||||
|
@ -516,3 +524,11 @@ TaskQueryString(Task *task)
|
||||||
MemoryContextSwitchTo(previousContext);
|
MemoryContextSwitchTo(previousContext);
|
||||||
return task->queryStringLazy;
|
return task->queryStringLazy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* IsEachPlacementQueryStringDifferent returns true if each placement
|
||||||
|
* has a different query string.
|
||||||
|
*/
|
||||||
|
static bool IsEachPlacementQueryStringDifferent(Task* task) {
|
||||||
|
return list_length(task->perPlacementQueryStrings) > 0;
|
||||||
|
}
|
|
@ -26,6 +26,7 @@ extern bool UpdateRelationToShardNames(Node *node, List *relationShardList);
|
||||||
extern void SetTaskQuery(Task *task, Query *query);
|
extern void SetTaskQuery(Task *task, Query *query);
|
||||||
extern void SetTaskQueryString(Task *task, char *queryString);
|
extern void SetTaskQueryString(Task *task, char *queryString);
|
||||||
extern void SetTaskQueryStringList(Task *task, List *queryStringList);
|
extern void SetTaskQueryStringList(Task *task, List *queryStringList);
|
||||||
|
extern void SetTaskPerPlacementQueryStrings(Task *task, List* perPlacementQueryStringList)
|
||||||
extern char * TaskQueryString(Task *task);
|
extern char * TaskQueryString(Task *task);
|
||||||
extern bool UpdateRelationsToLocalShardTables(Node *node, List *relationShardList);
|
extern bool UpdateRelationsToLocalShardTables(Node *node, List *relationShardList);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue