mirror of https://github.com/citusdata/citus.git
Refactor equivalance generation related codes
This commit changes the APIs for restriction generation to make future changes simpler.pull/1989/head
parent
2f2d350924
commit
c228d8ff3d
|
@ -404,11 +404,6 @@ RestrictionEquivalenceForPartitionKeys(PlannerRestrictionContext *
|
|||
{
|
||||
RelationRestrictionContext *restrictionContext =
|
||||
plannerRestrictionContext->relationRestrictionContext;
|
||||
JoinRestrictionContext *joinRestrictionContext =
|
||||
plannerRestrictionContext->joinRestrictionContext;
|
||||
|
||||
List *relationRestrictionAttributeEquivalenceList = NIL;
|
||||
List *joinRestrictionAttributeEquivalenceList = NIL;
|
||||
List *allAttributeEquivalenceList = NIL;
|
||||
|
||||
uint32 referenceRelationCount = ReferenceRelationCount(restrictionContext);
|
||||
|
@ -433,20 +428,43 @@ RestrictionEquivalenceForPartitionKeys(PlannerRestrictionContext *
|
|||
return true;
|
||||
}
|
||||
|
||||
allAttributeEquivalenceList =
|
||||
GenerateAllAttributeEquivalences(plannerRestrictionContext);
|
||||
|
||||
return EquivalenceListContainsRelationsEquality(allAttributeEquivalenceList,
|
||||
restrictionContext);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* GenerateAllAttributeEquivalances gets the planner restriction context and returns
|
||||
* the list of all attribute equivalences based on both join restrictions and relation
|
||||
* restrictions.
|
||||
*/
|
||||
List *
|
||||
GenerateAllAttributeEquivalences(PlannerRestrictionContext *plannerRestrictionContext)
|
||||
{
|
||||
RelationRestrictionContext *relationRestrictionContext =
|
||||
plannerRestrictionContext->relationRestrictionContext;
|
||||
JoinRestrictionContext *joinRestrictionContext =
|
||||
plannerRestrictionContext->joinRestrictionContext;
|
||||
|
||||
List *relationRestrictionAttributeEquivalenceList = NIL;
|
||||
List *joinRestrictionAttributeEquivalenceList = NIL;
|
||||
List *allAttributeEquivalenceList = NIL;
|
||||
|
||||
/* reset the equivalence id counter per call to prevent overflows */
|
||||
attributeEquivalenceId = 1;
|
||||
|
||||
relationRestrictionAttributeEquivalenceList =
|
||||
GenerateAttributeEquivalencesForRelationRestrictions(restrictionContext);
|
||||
GenerateAttributeEquivalencesForRelationRestrictions(relationRestrictionContext);
|
||||
joinRestrictionAttributeEquivalenceList =
|
||||
GenerateAttributeEquivalencesForJoinRestrictions(joinRestrictionContext);
|
||||
|
||||
allAttributeEquivalenceList =
|
||||
list_concat(relationRestrictionAttributeEquivalenceList,
|
||||
allAttributeEquivalenceList = list_concat(relationRestrictionAttributeEquivalenceList,
|
||||
joinRestrictionAttributeEquivalenceList);
|
||||
|
||||
return EquivalenceListContainsRelationsEquality(allAttributeEquivalenceList,
|
||||
restrictionContext);
|
||||
return allAttributeEquivalenceList;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
extern bool ContainsUnionSubquery(Query *queryTree);
|
||||
extern bool RestrictionEquivalenceForPartitionKeys(PlannerRestrictionContext *
|
||||
plannerRestrictionContext);
|
||||
extern List * GenerateAllAttributeEquivalences(PlannerRestrictionContext *
|
||||
plannerRestrictionContext);
|
||||
extern uint32 ReferenceRelationCount(RelationRestrictionContext *restrictionContext);
|
||||
extern bool SafeToPushdownUnionSubquery(
|
||||
PlannerRestrictionContext *plannerRestrictionContext);
|
||||
|
|
Loading…
Reference in New Issue