mirror of https://github.com/citusdata/citus.git
fix crash
parent
dbfcb69d57
commit
b1b78f73a5
|
@ -1416,6 +1416,14 @@ RelationInfoContainsOnlyRecurringTuples(PlannerInfo *plannerInfo, Relids relids)
|
|||
{
|
||||
RangeTblEntry *rangeTableEntry = plannerInfo->simple_rte_array[relationId];
|
||||
|
||||
if (IsRelOptOuterJoin(plannerInfo, relationId))
|
||||
{
|
||||
/*
|
||||
* TODO: add comment
|
||||
*/
|
||||
continue;
|
||||
}
|
||||
|
||||
if (FindNodeMatchingCheckFunctionInRangeTableList(list_make1(rangeTableEntry),
|
||||
IsDistributedTableRTE))
|
||||
{
|
||||
|
|
|
@ -171,7 +171,6 @@ static bool FindQueryContainingRTEIdentityInternal(Node *node,
|
|||
|
||||
static int ParentCountPriorToAppendRel(List *appendRelList, AppendRelInfo *appendRelInfo);
|
||||
|
||||
static bool IsVarRelOptOuterJoin(PlannerInfo *root, Var *varToBeAdded);
|
||||
|
||||
|
||||
/*
|
||||
|
@ -1241,7 +1240,7 @@ AddToAttributeEquivalenceClass(AttributeEquivalenceClass *attributeEquivalenceCl
|
|||
}
|
||||
|
||||
/* outer join checks in PG16 */
|
||||
if (IsVarRelOptOuterJoin(root, varToBeAdded))
|
||||
if (IsRelOptOuterJoin(root, varToBeAdded->varno))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@ -1391,16 +1390,16 @@ GetTargetSubquery(PlannerInfo *root, RangeTblEntry *rangeTableEntry, Var *varToB
|
|||
* IsVarRelOptOuterJoin returns true if the Var to be added
|
||||
* is an outer join, false otherwise.
|
||||
*/
|
||||
static bool
|
||||
IsVarRelOptOuterJoin(PlannerInfo *root, Var *varToBeAdded)
|
||||
bool
|
||||
IsRelOptOuterJoin(PlannerInfo *root, int varNo)
|
||||
{
|
||||
#if PG_VERSION_NUM >= PG_VERSION_16
|
||||
if (root->simple_rel_array_size <= varToBeAdded->varno)
|
||||
if (root->simple_rel_array_size <= varNo)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
RelOptInfo *rel = root->simple_rel_array[varToBeAdded->varno];
|
||||
RelOptInfo *rel = root->simple_rel_array[varNo];
|
||||
if (rel == NULL)
|
||||
{
|
||||
/* must be an outer join */
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
extern bool AllDistributionKeysInQueryAreEqual(Query *originalQuery,
|
||||
PlannerRestrictionContext *
|
||||
plannerRestrictionContext);
|
||||
extern bool IsRelOptOuterJoin(PlannerInfo *root, int varNo);
|
||||
extern bool SafeToPushdownUnionSubquery(Query *originalQuery, PlannerRestrictionContext *
|
||||
plannerRestrictionContext);
|
||||
extern bool ContainsUnionSubquery(Query *queryTree);
|
||||
|
|
Loading…
Reference in New Issue