mirror of https://github.com/citusdata/citus.git
Make sure that ExtractRangeTableRelationWalker never misses RTE_RELATION
parent
32def06ebd
commit
26d9b58e9e
|
@ -3385,24 +3385,46 @@ NeedsDistributedPlanning(Query *queryTree)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ExtractRangeTableRelationWalker gathers all range table entries in a query
|
* ExtractRangeTableRelationWalker gathers all range table relation entries
|
||||||
* and filters them to preserve only those of the RTE_RELATION type.
|
* in a query.
|
||||||
*/
|
*/
|
||||||
bool
|
bool
|
||||||
ExtractRangeTableRelationWalker(Node *node, List **rangeTableRelationList)
|
ExtractRangeTableRelationWalker(Node *node, List **rangeTableRelationList)
|
||||||
{
|
{
|
||||||
List *rangeTableList = NIL;
|
bool walkIsComplete = false;
|
||||||
ListCell *rangeTableCell = NULL;
|
|
||||||
bool walkIsComplete = ExtractRangeTableEntryWalker(node, &rangeTableList);
|
|
||||||
|
|
||||||
foreach(rangeTableCell, rangeTableList)
|
if (node == NULL)
|
||||||
{
|
{
|
||||||
RangeTblEntry *rangeTableEntry = (RangeTblEntry *) lfirst(rangeTableCell);
|
return false;
|
||||||
if (rangeTableEntry->rtekind == RTE_RELATION &&
|
|
||||||
rangeTableEntry->relkind != RELKIND_VIEW)
|
|
||||||
{
|
|
||||||
(*rangeTableRelationList) = lappend(*rangeTableRelationList, rangeTableEntry);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (IsA(node, RangeTblEntry))
|
||||||
|
{
|
||||||
|
RangeTblEntry *rangeTable = (RangeTblEntry *) node;
|
||||||
|
|
||||||
|
if (rangeTable->rtekind == RTE_RELATION && rangeTable->relkind != RELKIND_VIEW)
|
||||||
|
{
|
||||||
|
(*rangeTableRelationList) = lappend(*rangeTableRelationList, rangeTable);
|
||||||
|
|
||||||
|
walkIsComplete = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
walkIsComplete = range_table_walker(list_make1(rangeTable),
|
||||||
|
ExtractRangeTableRelationWalker,
|
||||||
|
rangeTableRelationList, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (IsA(node, Query))
|
||||||
|
{
|
||||||
|
walkIsComplete = query_tree_walker((Query *) node,
|
||||||
|
ExtractRangeTableRelationWalker,
|
||||||
|
rangeTableRelationList, QTW_EXAMINE_RTES);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
walkIsComplete = expression_tree_walker(node, ExtractRangeTableRelationWalker,
|
||||||
|
rangeTableRelationList);
|
||||||
}
|
}
|
||||||
|
|
||||||
return walkIsComplete;
|
return walkIsComplete;
|
||||||
|
|
Loading…
Reference in New Issue