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 =
|
RelationRestrictionContext *restrictionContext =
|
||||||
plannerRestrictionContext->relationRestrictionContext;
|
plannerRestrictionContext->relationRestrictionContext;
|
||||||
JoinRestrictionContext *joinRestrictionContext =
|
|
||||||
plannerRestrictionContext->joinRestrictionContext;
|
|
||||||
|
|
||||||
List *relationRestrictionAttributeEquivalenceList = NIL;
|
|
||||||
List *joinRestrictionAttributeEquivalenceList = NIL;
|
|
||||||
List *allAttributeEquivalenceList = NIL;
|
List *allAttributeEquivalenceList = NIL;
|
||||||
|
|
||||||
uint32 referenceRelationCount = ReferenceRelationCount(restrictionContext);
|
uint32 referenceRelationCount = ReferenceRelationCount(restrictionContext);
|
||||||
|
@ -433,20 +428,43 @@ RestrictionEquivalenceForPartitionKeys(PlannerRestrictionContext *
|
||||||
return true;
|
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 */
|
/* reset the equivalence id counter per call to prevent overflows */
|
||||||
attributeEquivalenceId = 1;
|
attributeEquivalenceId = 1;
|
||||||
|
|
||||||
relationRestrictionAttributeEquivalenceList =
|
relationRestrictionAttributeEquivalenceList =
|
||||||
GenerateAttributeEquivalencesForRelationRestrictions(restrictionContext);
|
GenerateAttributeEquivalencesForRelationRestrictions(relationRestrictionContext);
|
||||||
joinRestrictionAttributeEquivalenceList =
|
joinRestrictionAttributeEquivalenceList =
|
||||||
GenerateAttributeEquivalencesForJoinRestrictions(joinRestrictionContext);
|
GenerateAttributeEquivalencesForJoinRestrictions(joinRestrictionContext);
|
||||||
|
|
||||||
allAttributeEquivalenceList =
|
allAttributeEquivalenceList = list_concat(relationRestrictionAttributeEquivalenceList,
|
||||||
list_concat(relationRestrictionAttributeEquivalenceList,
|
|
||||||
joinRestrictionAttributeEquivalenceList);
|
joinRestrictionAttributeEquivalenceList);
|
||||||
|
|
||||||
return EquivalenceListContainsRelationsEquality(allAttributeEquivalenceList,
|
return allAttributeEquivalenceList;
|
||||||
restrictionContext);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,8 @@
|
||||||
extern bool ContainsUnionSubquery(Query *queryTree);
|
extern bool ContainsUnionSubquery(Query *queryTree);
|
||||||
extern bool RestrictionEquivalenceForPartitionKeys(PlannerRestrictionContext *
|
extern bool RestrictionEquivalenceForPartitionKeys(PlannerRestrictionContext *
|
||||||
plannerRestrictionContext);
|
plannerRestrictionContext);
|
||||||
|
extern List * GenerateAllAttributeEquivalences(PlannerRestrictionContext *
|
||||||
|
plannerRestrictionContext);
|
||||||
extern uint32 ReferenceRelationCount(RelationRestrictionContext *restrictionContext);
|
extern uint32 ReferenceRelationCount(RelationRestrictionContext *restrictionContext);
|
||||||
extern bool SafeToPushdownUnionSubquery(
|
extern bool SafeToPushdownUnionSubquery(
|
||||||
PlannerRestrictionContext *plannerRestrictionContext);
|
PlannerRestrictionContext *plannerRestrictionContext);
|
||||||
|
|
Loading…
Reference in New Issue