Fix typos

Equivalance -> Equivalence
utillity -> utility
shorted lived one -> shortly lived one
elegible -> eligible
pull/3517/head
Philip Dubé 2020-02-18 17:14:40 +00:00
parent 3e7d4fd739
commit 08f6842d50
7 changed files with 80 additions and 80 deletions

View File

@ -347,7 +347,7 @@ multi_ProcessUtility(PlannedStmt *pstmt,
* we need to set the parsetree here already as we copy and replace the original * we need to set the parsetree here already as we copy and replace the original
* parsetree during ddl propagation. In reality we need to refactor the code above * parsetree during ddl propagation. In reality we need to refactor the code above
* to not juggle copy the parsetree and leak it to a potential cache above the * to not juggle copy the parsetree and leak it to a potential cache above the
* utillity hook. * utility hook.
*/ */
pstmt->utilityStmt = parsetree; pstmt->utilityStmt = parsetree;
} }

View File

@ -224,7 +224,7 @@ UpdateRelationToShardNames(Node *node, List *relationShardList)
/* /*
* Search for the restrictions associated with the RTE. There better be * Search for the restrictions associated with the RTE. There better be
* some, otherwise this query wouldn't be elegible as a router query. * some, otherwise this query wouldn't be eligible as a router query.
* *
* FIXME: We should probably use a hashtable here, to do efficient * FIXME: We should probably use a hashtable here, to do efficient
* lookup. * lookup.
@ -299,7 +299,7 @@ UpdateRelationsToLocalShardTables(Node *node, List *relationShardList)
/* /*
* Search for the restrictions associated with the RTE. There better be * Search for the restrictions associated with the RTE. There better be
* some, otherwise this query wouldn't be elegible as a router query. * some, otherwise this query wouldn't be eligible as a router query.
* *
* FIXME: We should probably use a hashtable here, to do efficient * FIXME: We should probably use a hashtable here, to do efficient
* lookup. * lookup.

View File

@ -1729,7 +1729,7 @@ multi_join_restriction_hook(PlannerInfo *root,
{ {
/* /*
* Use a memory context that's guaranteed to live long enough, could be * Use a memory context that's guaranteed to live long enough, could be
* called in a more shorted lived one (e.g. with GEQO). * called in a more shortly lived one (e.g. with GEQO).
*/ */
PlannerRestrictionContext *plannerRestrictionContext = PlannerRestrictionContext *plannerRestrictionContext =
CurrentPlannerRestrictionContext(); CurrentPlannerRestrictionContext();
@ -1790,7 +1790,7 @@ multi_relation_restriction_hook(PlannerInfo *root, RelOptInfo *relOptInfo,
/* /*
* Use a memory context that's guaranteed to live long enough, could be * Use a memory context that's guaranteed to live long enough, could be
* called in a more shorted lived one (e.g. with GEQO). * called in a more shortly lived one (e.g. with GEQO).
*/ */
PlannerRestrictionContext *plannerRestrictionContext = PlannerRestrictionContext *plannerRestrictionContext =
CurrentPlannerRestrictionContext(); CurrentPlannerRestrictionContext();

View File

@ -12,7 +12,7 @@
* *
* We also used a hacky solution for picking relations as the anchor range * We also used a hacky solution for picking relations as the anchor range
* table entries. The hack is that we wrap them into a subquery. This is only * table entries. The hack is that we wrap them into a subquery. This is only
* necessary since some of the attribute equivalance checks are based on * necessary since some of the attribute equivalence checks are based on
* queries rather than range table entries. * queries rather than range table entries.
* *
* Copyright (c) Citus Data, Inc. * Copyright (c) Citus Data, Inc.
@ -135,7 +135,7 @@ AnchorRte(Query *subquery)
* distributed table and doesn't have a set operation. * distributed table and doesn't have a set operation.
* *
* TODO: The set operation restriction might sound weird, but, the restriction * TODO: The set operation restriction might sound weird, but, the restriction
* equivalance generation functions ignore set operations. We should * equivalence generation functions ignore set operations. We should
* integrate the logic in SafeToPushdownUnionSubquery() to * integrate the logic in SafeToPushdownUnionSubquery() to
* GenerateAllAttributeEquivalences() such that the latter becomes aware of * GenerateAllAttributeEquivalences() such that the latter becomes aware of
* the set operations. * the set operations.
@ -179,7 +179,7 @@ bool
SubqueryColocated(Query *subquery, ColocatedJoinChecker *checker) SubqueryColocated(Query *subquery, ColocatedJoinChecker *checker)
{ {
List *anchorRelationRestrictionList = checker->anchorRelationRestrictionList; List *anchorRelationRestrictionList = checker->anchorRelationRestrictionList;
List *anchorAttributeEquivalances = checker->anchorAttributeEquivalences; List *anchorAttributeEquivalences = checker->anchorAttributeEquivalences;
PlannerRestrictionContext *restrictionContext = checker->subqueryPlannerRestriction; PlannerRestrictionContext *restrictionContext = checker->subqueryPlannerRestriction;
PlannerRestrictionContext *filteredPlannerContext = PlannerRestrictionContext *filteredPlannerContext =
@ -211,10 +211,10 @@ SubqueryColocated(Query *subquery, ColocatedJoinChecker *checker)
filteredRestrictionList); filteredRestrictionList);
/* /*
* We already have the attributeEquivalances, thus, only need to prepare * We already have the attributeEquivalences, thus, only need to prepare
* the planner restrictions with unioned relations for our purpose of * the planner restrictions with unioned relations for our purpose of
* distribution key equality. Note that we don't need to calculate the * distribution key equality. Note that we don't need to calculate the
* join restrictions, we're already relying on the attributeEquivalances * join restrictions, we're already relying on the attributeEquivalences
* provided by the context. * provided by the context.
*/ */
RelationRestrictionContext *unionedRelationRestrictionContext = palloc0( RelationRestrictionContext *unionedRelationRestrictionContext = palloc0(
@ -227,9 +227,9 @@ SubqueryColocated(Query *subquery, ColocatedJoinChecker *checker)
unionedPlannerRestrictionContext->relationRestrictionContext = unionedPlannerRestrictionContext->relationRestrictionContext =
unionedRelationRestrictionContext; unionedRelationRestrictionContext;
if (!RestrictionEquivalenceForPartitionKeysViaEquivalances( if (!RestrictionEquivalenceForPartitionKeysViaEquivalences(
unionedPlannerRestrictionContext, unionedPlannerRestrictionContext,
anchorAttributeEquivalances)) anchorAttributeEquivalences))
{ {
return false; return false;
} }

View File

@ -80,10 +80,10 @@ static List * GenerateAttributeEquivalencesForRelationRestrictions(
static AttributeEquivalenceClass * AttributeEquivalenceClassForEquivalenceClass( static AttributeEquivalenceClass * AttributeEquivalenceClassForEquivalenceClass(
EquivalenceClass *plannerEqClass, RelationRestriction *relationRestriction); EquivalenceClass *plannerEqClass, RelationRestriction *relationRestriction);
static void AddToAttributeEquivalenceClass(AttributeEquivalenceClass ** static void AddToAttributeEquivalenceClass(AttributeEquivalenceClass **
attributeEquivalanceClass, attributeEquivalenceClass,
PlannerInfo *root, Var *varToBeAdded); PlannerInfo *root, Var *varToBeAdded);
static void AddRteSubqueryToAttributeEquivalenceClass(AttributeEquivalenceClass * static void AddRteSubqueryToAttributeEquivalenceClass(AttributeEquivalenceClass *
*attributeEquivalanceClass, *attributeEquivalenceClass,
RangeTblEntry * RangeTblEntry *
rangeTableEntry, rangeTableEntry,
PlannerInfo *root, PlannerInfo *root,
@ -92,7 +92,7 @@ static Query * GetTargetSubquery(PlannerInfo *root, RangeTblEntry *rangeTableEnt
Var *varToBeAdded); Var *varToBeAdded);
static void AddUnionAllSetOperationsToAttributeEquivalenceClass( static void AddUnionAllSetOperationsToAttributeEquivalenceClass(
AttributeEquivalenceClass ** AttributeEquivalenceClass **
attributeEquivalanceClass, attributeEquivalenceClass,
PlannerInfo *root, PlannerInfo *root,
Var *varToBeAdded); Var *varToBeAdded);
static void AddUnionSetOperationsToAttributeEquivalenceClass(AttributeEquivalenceClass ** static void AddUnionSetOperationsToAttributeEquivalenceClass(AttributeEquivalenceClass **
@ -116,16 +116,16 @@ static bool AttributeClassContainsAttributeClassMember(AttributeEquivalenceClass
attributeEquivalenceClass); attributeEquivalenceClass);
static List * AddAttributeClassToAttributeClassList(List *attributeEquivalenceList, static List * AddAttributeClassToAttributeClassList(List *attributeEquivalenceList,
AttributeEquivalenceClass * AttributeEquivalenceClass *
attributeEquivalance); attributeEquivalence);
static bool AttributeEquivalancesAreEqual(AttributeEquivalenceClass * static bool AttributeEquivalencesAreEqual(AttributeEquivalenceClass *
firstAttributeEquivalance, firstAttributeEquivalence,
AttributeEquivalenceClass * AttributeEquivalenceClass *
secondAttributeEquivalance); secondAttributeEquivalence);
static AttributeEquivalenceClass * GenerateCommonEquivalence(List * static AttributeEquivalenceClass * GenerateCommonEquivalence(List *
attributeEquivalenceList, attributeEquivalenceList,
RelationRestrictionContext * RelationRestrictionContext *
relationRestrictionContext); relationRestrictionContext);
static AttributeEquivalenceClass * GenerateEquivalanceClassForRelationRestriction( static AttributeEquivalenceClass * GenerateEquivalenceClassForRelationRestriction(
RelationRestrictionContext RelationRestrictionContext
* *
relationRestrictionContext); relationRestrictionContext);
@ -244,11 +244,11 @@ SafeToPushdownUnionSubquery(PlannerRestrictionContext *plannerRestrictionContext
JoinRestrictionContext *joinRestrictionContext = JoinRestrictionContext *joinRestrictionContext =
plannerRestrictionContext->joinRestrictionContext; plannerRestrictionContext->joinRestrictionContext;
Index unionQueryPartitionKeyIndex = 0; Index unionQueryPartitionKeyIndex = 0;
AttributeEquivalenceClass *attributeEquivalance = AttributeEquivalenceClass *attributeEquivalence =
palloc0(sizeof(AttributeEquivalenceClass)); palloc0(sizeof(AttributeEquivalenceClass));
ListCell *relationRestrictionCell = NULL; ListCell *relationRestrictionCell = NULL;
attributeEquivalance->equivalenceId = attributeEquivalenceId++; attributeEquivalence->equivalenceId = attributeEquivalenceId++;
/* /*
* Ensure that the partition column is in the same place across all * Ensure that the partition column is in the same place across all
@ -326,7 +326,7 @@ SafeToPushdownUnionSubquery(PlannerRestrictionContext *plannerRestrictionContext
continue; continue;
} }
AddToAttributeEquivalenceClass(&attributeEquivalance, relationPlannerRoot, AddToAttributeEquivalenceClass(&attributeEquivalence, relationPlannerRoot,
varToBeAdded); varToBeAdded);
} }
@ -347,7 +347,7 @@ SafeToPushdownUnionSubquery(PlannerRestrictionContext *plannerRestrictionContext
joinRestrictionAttributeEquivalenceList); joinRestrictionAttributeEquivalenceList);
allAttributeEquivalenceList = lappend(allAttributeEquivalenceList, allAttributeEquivalenceList = lappend(allAttributeEquivalenceList,
attributeEquivalance); attributeEquivalence);
if (!EquivalenceListContainsRelationsEquality(allAttributeEquivalenceList, if (!EquivalenceListContainsRelationsEquality(allAttributeEquivalenceList,
restrictionContext)) restrictionContext))
@ -480,19 +480,19 @@ RestrictionEquivalenceForPartitionKeys(PlannerRestrictionContext *restrictionCon
List *attributeEquivalenceList = GenerateAllAttributeEquivalences(restrictionContext); List *attributeEquivalenceList = GenerateAllAttributeEquivalences(restrictionContext);
return RestrictionEquivalenceForPartitionKeysViaEquivalances(restrictionContext, return RestrictionEquivalenceForPartitionKeysViaEquivalences(restrictionContext,
attributeEquivalenceList); attributeEquivalenceList);
} }
/* /*
* RestrictionEquivalenceForPartitionKeysViaEquivalances follows the same rules * RestrictionEquivalenceForPartitionKeysViaEquivalences follows the same rules
* with RestrictionEquivalenceForPartitionKeys(). The only difference is that * with RestrictionEquivalenceForPartitionKeys(). The only difference is that
* this function allows passing pre-computed attribute equivalances along with * this function allows passing pre-computed attribute equivalences along with
* the planner restriction context. * the planner restriction context.
*/ */
bool bool
RestrictionEquivalenceForPartitionKeysViaEquivalances(PlannerRestrictionContext * RestrictionEquivalenceForPartitionKeysViaEquivalences(PlannerRestrictionContext *
plannerRestrictionContext, plannerRestrictionContext,
List *allAttributeEquivalenceList) List *allAttributeEquivalenceList)
{ {
@ -548,7 +548,7 @@ ContainsMultipleDistributedRelations(PlannerRestrictionContext *
/* /*
* GenerateAllAttributeEquivalances gets the planner restriction context and returns * GenerateAllAttributeEquivalences gets the planner restriction context and returns
* the list of all attribute equivalences based on both join restrictions and relation * the list of all attribute equivalences based on both join restrictions and relation
* restrictions. * restrictions.
*/ */
@ -700,13 +700,13 @@ GenerateAttributeEquivalencesForRelationRestrictions(RelationRestrictionContext
EquivalenceClass *plannerEqClass = EquivalenceClass *plannerEqClass =
(EquivalenceClass *) lfirst(equivalenceClassCell); (EquivalenceClass *) lfirst(equivalenceClassCell);
AttributeEquivalenceClass *attributeEquivalance = AttributeEquivalenceClass *attributeEquivalence =
AttributeEquivalenceClassForEquivalenceClass(plannerEqClass, AttributeEquivalenceClassForEquivalenceClass(plannerEqClass,
relationRestriction); relationRestriction);
attributeEquivalenceList = attributeEquivalenceList =
AddAttributeClassToAttributeClassList(attributeEquivalenceList, AddAttributeClassToAttributeClassList(attributeEquivalenceList,
attributeEquivalance); attributeEquivalence);
} }
} }
@ -728,12 +728,12 @@ static AttributeEquivalenceClass *
AttributeEquivalenceClassForEquivalenceClass(EquivalenceClass *plannerEqClass, AttributeEquivalenceClassForEquivalenceClass(EquivalenceClass *plannerEqClass,
RelationRestriction *relationRestriction) RelationRestriction *relationRestriction)
{ {
AttributeEquivalenceClass *attributeEquivalance = AttributeEquivalenceClass *attributeEquivalence =
palloc0(sizeof(AttributeEquivalenceClass)); palloc0(sizeof(AttributeEquivalenceClass));
ListCell *equivilanceMemberCell = NULL; ListCell *equivilanceMemberCell = NULL;
PlannerInfo *plannerInfo = relationRestriction->plannerInfo; PlannerInfo *plannerInfo = relationRestriction->plannerInfo;
attributeEquivalance->equivalenceId = attributeEquivalenceId++; attributeEquivalence->equivalenceId = attributeEquivalenceId++;
foreach(equivilanceMemberCell, plannerEqClass->ec_members) foreach(equivilanceMemberCell, plannerEqClass->ec_members)
{ {
@ -755,19 +755,19 @@ AttributeEquivalenceClassForEquivalenceClass(EquivalenceClass *plannerEqClass,
equivalenceParam, &outerNodeRoot); equivalenceParam, &outerNodeRoot);
if (expressionVar) if (expressionVar)
{ {
AddToAttributeEquivalenceClass(&attributeEquivalance, outerNodeRoot, AddToAttributeEquivalenceClass(&attributeEquivalence, outerNodeRoot,
expressionVar); expressionVar);
} }
} }
else if (IsA(strippedEquivalenceExpr, Var)) else if (IsA(strippedEquivalenceExpr, Var))
{ {
expressionVar = (Var *) strippedEquivalenceExpr; expressionVar = (Var *) strippedEquivalenceExpr;
AddToAttributeEquivalenceClass(&attributeEquivalance, plannerInfo, AddToAttributeEquivalenceClass(&attributeEquivalence, plannerInfo,
expressionVar); expressionVar);
} }
} }
return attributeEquivalance; return attributeEquivalence;
} }
@ -868,7 +868,7 @@ SearchPlannerParamList(List *plannerParamList, Param *plannerParam)
/* /*
* GenerateCommonEquivalence gets a list of unrelated AttributeEquiavalanceClass * GenerateCommonEquivalence gets a list of unrelated AttributeEquiavalenceClass
* whose all members are partition keys. * whose all members are partition keys.
* *
* With the equivalence classes, the function follows the algorithm * With the equivalence classes, the function follows the algorithm
@ -903,7 +903,7 @@ GenerateCommonEquivalence(List *attributeEquivalenceList,
* on the common class. * on the common class.
*/ */
AttributeEquivalenceClass *firstEquivalenceClass = AttributeEquivalenceClass *firstEquivalenceClass =
GenerateEquivalanceClassForRelationRestriction(relationRestrictionContext); GenerateEquivalenceClassForRelationRestriction(relationRestrictionContext);
/* we skip the calculation if there are not enough information */ /* we skip the calculation if there are not enough information */
if (equivalenceListSize < 1 || firstEquivalenceClass == NULL) if (equivalenceListSize < 1 || firstEquivalenceClass == NULL)
@ -978,11 +978,11 @@ GenerateCommonEquivalence(List *attributeEquivalenceList,
/* /*
* GenerateEquivalanceClassForRelationRestriction generates an AttributeEquivalenceClass * GenerateEquivalenceClassForRelationRestriction generates an AttributeEquivalenceClass
* with a single AttributeEquivalenceClassMember. * with a single AttributeEquivalenceClassMember.
*/ */
static AttributeEquivalenceClass * static AttributeEquivalenceClass *
GenerateEquivalanceClassForRelationRestriction( GenerateEquivalenceClassForRelationRestriction(
RelationRestrictionContext *relationRestrictionContext) RelationRestrictionContext *relationRestrictionContext)
{ {
ListCell *relationRestrictionCell = NULL; ListCell *relationRestrictionCell = NULL;
@ -1113,19 +1113,19 @@ GenerateAttributeEquivalencesForJoinRestrictions(JoinRestrictionContext *
Var *leftVar = (Var *) strippedLeftExpr; Var *leftVar = (Var *) strippedLeftExpr;
Var *rightVar = (Var *) strippedRightExpr; Var *rightVar = (Var *) strippedRightExpr;
AttributeEquivalenceClass *attributeEquivalance = palloc0( AttributeEquivalenceClass *attributeEquivalence = palloc0(
sizeof(AttributeEquivalenceClass)); sizeof(AttributeEquivalenceClass));
attributeEquivalance->equivalenceId = attributeEquivalenceId++; attributeEquivalence->equivalenceId = attributeEquivalenceId++;
AddToAttributeEquivalenceClass(&attributeEquivalance, AddToAttributeEquivalenceClass(&attributeEquivalence,
joinRestriction->plannerInfo, leftVar); joinRestriction->plannerInfo, leftVar);
AddToAttributeEquivalenceClass(&attributeEquivalance, AddToAttributeEquivalenceClass(&attributeEquivalence,
joinRestriction->plannerInfo, rightVar); joinRestriction->plannerInfo, rightVar);
attributeEquivalenceList = attributeEquivalenceList =
AddAttributeClassToAttributeClassList(attributeEquivalenceList, AddAttributeClassToAttributeClassList(attributeEquivalenceList,
attributeEquivalance); attributeEquivalence);
} }
} }
@ -1161,7 +1161,7 @@ GenerateAttributeEquivalencesForJoinRestrictions(JoinRestrictionContext *
* equivalence class * equivalence class
*/ */
static void static void
AddToAttributeEquivalenceClass(AttributeEquivalenceClass **attributeEquivalanceClass, AddToAttributeEquivalenceClass(AttributeEquivalenceClass **attributeEquivalenceClass,
PlannerInfo *root, Var *varToBeAdded) PlannerInfo *root, Var *varToBeAdded)
{ {
/* punt if it's a whole-row var rather than a plain column reference */ /* punt if it's a whole-row var rather than a plain column reference */
@ -1179,13 +1179,13 @@ AddToAttributeEquivalenceClass(AttributeEquivalenceClass **attributeEquivalanceC
RangeTblEntry *rangeTableEntry = root->simple_rte_array[varToBeAdded->varno]; RangeTblEntry *rangeTableEntry = root->simple_rte_array[varToBeAdded->varno];
if (rangeTableEntry->rtekind == RTE_RELATION) if (rangeTableEntry->rtekind == RTE_RELATION)
{ {
AddRteRelationToAttributeEquivalenceClass(attributeEquivalanceClass, AddRteRelationToAttributeEquivalenceClass(attributeEquivalenceClass,
rangeTableEntry, rangeTableEntry,
varToBeAdded); varToBeAdded);
} }
else if (rangeTableEntry->rtekind == RTE_SUBQUERY) else if (rangeTableEntry->rtekind == RTE_SUBQUERY)
{ {
AddRteSubqueryToAttributeEquivalenceClass(attributeEquivalanceClass, AddRteSubqueryToAttributeEquivalenceClass(attributeEquivalenceClass,
rangeTableEntry, root, rangeTableEntry, root,
varToBeAdded); varToBeAdded);
} }
@ -1200,7 +1200,7 @@ AddToAttributeEquivalenceClass(AttributeEquivalenceClass **attributeEquivalanceC
*/ */
static void static void
AddRteSubqueryToAttributeEquivalenceClass(AttributeEquivalenceClass AddRteSubqueryToAttributeEquivalenceClass(AttributeEquivalenceClass
**attributeEquivalanceClass, **attributeEquivalenceClass,
RangeTblEntry *rangeTableEntry, RangeTblEntry *rangeTableEntry,
PlannerInfo *root, Var *varToBeAdded) PlannerInfo *root, Var *varToBeAdded)
{ {
@ -1257,12 +1257,12 @@ AddRteSubqueryToAttributeEquivalenceClass(AttributeEquivalenceClass
*/ */
if (rangeTableEntry->inh) if (rangeTableEntry->inh)
{ {
AddUnionAllSetOperationsToAttributeEquivalenceClass(attributeEquivalanceClass, AddUnionAllSetOperationsToAttributeEquivalenceClass(attributeEquivalenceClass,
root, varToBeAdded); root, varToBeAdded);
} }
else if (targetSubquery->setOperations) else if (targetSubquery->setOperations)
{ {
AddUnionSetOperationsToAttributeEquivalenceClass(attributeEquivalanceClass, AddUnionSetOperationsToAttributeEquivalenceClass(attributeEquivalenceClass,
baseRelOptInfo->subroot, baseRelOptInfo->subroot,
(SetOperationStmt *) (SetOperationStmt *)
targetSubquery->setOperations, targetSubquery->setOperations,
@ -1270,7 +1270,7 @@ AddRteSubqueryToAttributeEquivalenceClass(AttributeEquivalenceClass
} }
else if (varToBeAdded && IsA(varToBeAdded, Var) && varToBeAdded->varlevelsup == 0) else if (varToBeAdded && IsA(varToBeAdded, Var) && varToBeAdded->varlevelsup == 0)
{ {
AddToAttributeEquivalenceClass(attributeEquivalanceClass, AddToAttributeEquivalenceClass(attributeEquivalenceClass,
baseRelOptInfo->subroot, varToBeAdded); baseRelOptInfo->subroot, varToBeAdded);
} }
} }
@ -1323,7 +1323,7 @@ GetTargetSubquery(PlannerInfo *root, RangeTblEntry *rangeTableEntry, Var *varToB
*/ */
static void static void
AddUnionAllSetOperationsToAttributeEquivalenceClass(AttributeEquivalenceClass ** AddUnionAllSetOperationsToAttributeEquivalenceClass(AttributeEquivalenceClass **
attributeEquivalanceClass, attributeEquivalenceClass,
PlannerInfo *root, PlannerInfo *root,
Var *varToBeAdded) Var *varToBeAdded)
{ {
@ -1347,7 +1347,7 @@ AddUnionAllSetOperationsToAttributeEquivalenceClass(AttributeEquivalenceClass **
/* set the varno accordingly for this specific child */ /* set the varno accordingly for this specific child */
varToBeAdded->varno = appendRelInfo->child_relid; varToBeAdded->varno = appendRelInfo->child_relid;
AddToAttributeEquivalenceClass(attributeEquivalanceClass, root, AddToAttributeEquivalenceClass(attributeEquivalenceClass, root,
varToBeAdded); varToBeAdded);
} }
} }
@ -1462,9 +1462,9 @@ AttributeClassContainsAttributeClassMember(AttributeEquivalenceClassMember *inpu
/* /*
* AddAttributeClassToAttributeClassList checks for certain properties of the * AddAttributeClassToAttributeClassList checks for certain properties of the
* input attributeEquivalance before adding it to the attributeEquivalenceList. * input attributeEquivalence before adding it to the attributeEquivalenceList.
* *
* Firstly, the function skips adding NULL attributeEquivalance to the list. * Firstly, the function skips adding NULL attributeEquivalence to the list.
* Secondly, since an attribute equivalence class with a single member does * Secondly, since an attribute equivalence class with a single member does
* not contribute to our purposes, we skip such classed adding to the list. * not contribute to our purposes, we skip such classed adding to the list.
* Finally, we don't want to add an equivalence class whose exact equivalent * Finally, we don't want to add an equivalence class whose exact equivalent
@ -1472,11 +1472,11 @@ AttributeClassContainsAttributeClassMember(AttributeEquivalenceClassMember *inpu
*/ */
static List * static List *
AddAttributeClassToAttributeClassList(List *attributeEquivalenceList, AddAttributeClassToAttributeClassList(List *attributeEquivalenceList,
AttributeEquivalenceClass *attributeEquivalance) AttributeEquivalenceClass *attributeEquivalence)
{ {
ListCell *attributeEquivalanceCell = NULL; ListCell *attributeEquivalenceCell = NULL;
if (attributeEquivalance == NULL) if (attributeEquivalence == NULL)
{ {
return attributeEquivalenceList; return attributeEquivalenceList;
} }
@ -1485,46 +1485,46 @@ AddAttributeClassToAttributeClassList(List *attributeEquivalenceList,
* Note that in some cases we allow having equivalentAttributes with zero or * Note that in some cases we allow having equivalentAttributes with zero or
* one elements. For the details, see AddToAttributeEquivalenceClass(). * one elements. For the details, see AddToAttributeEquivalenceClass().
*/ */
List *equivalentAttributes = attributeEquivalance->equivalentAttributes; List *equivalentAttributes = attributeEquivalence->equivalentAttributes;
if (list_length(equivalentAttributes) < 2) if (list_length(equivalentAttributes) < 2)
{ {
return attributeEquivalenceList; return attributeEquivalenceList;
} }
/* we don't want to add an attributeEquivalance which already exists */ /* we don't want to add an attributeEquivalence which already exists */
foreach(attributeEquivalanceCell, attributeEquivalenceList) foreach(attributeEquivalenceCell, attributeEquivalenceList)
{ {
AttributeEquivalenceClass *currentAttributeEquivalance = AttributeEquivalenceClass *currentAttributeEquivalence =
(AttributeEquivalenceClass *) lfirst(attributeEquivalanceCell); (AttributeEquivalenceClass *) lfirst(attributeEquivalenceCell);
if (AttributeEquivalancesAreEqual(currentAttributeEquivalance, if (AttributeEquivalencesAreEqual(currentAttributeEquivalence,
attributeEquivalance)) attributeEquivalence))
{ {
return attributeEquivalenceList; return attributeEquivalenceList;
} }
} }
attributeEquivalenceList = lappend(attributeEquivalenceList, attributeEquivalenceList = lappend(attributeEquivalenceList,
attributeEquivalance); attributeEquivalence);
return attributeEquivalenceList; return attributeEquivalenceList;
} }
/* /*
* AttributeEquivalancesAreEqual returns true if both input attribute equivalence * AttributeEquivalencesAreEqual returns true if both input attribute equivalence
* classes contains exactly the same members. * classes contains exactly the same members.
*/ */
static bool static bool
AttributeEquivalancesAreEqual(AttributeEquivalenceClass *firstAttributeEquivalance, AttributeEquivalencesAreEqual(AttributeEquivalenceClass *firstAttributeEquivalence,
AttributeEquivalenceClass *secondAttributeEquivalance) AttributeEquivalenceClass *secondAttributeEquivalence)
{ {
List *firstEquivalenceMemberList = List *firstEquivalenceMemberList =
firstAttributeEquivalance->equivalentAttributes; firstAttributeEquivalence->equivalentAttributes;
List *secondEquivalenceMemberList = List *secondEquivalenceMemberList =
secondAttributeEquivalance->equivalentAttributes; secondAttributeEquivalence->equivalentAttributes;
ListCell *firstAttributeEquivalanceCell = NULL; ListCell *firstAttributeEquivalenceCell = NULL;
ListCell *secondAttributeEquivalanceCell = NULL; ListCell *secondAttributeEquivalenceCell = NULL;
if (list_length(firstEquivalenceMemberList) != list_length( if (list_length(firstEquivalenceMemberList) != list_length(
secondEquivalenceMemberList)) secondEquivalenceMemberList))
@ -1532,17 +1532,17 @@ AttributeEquivalancesAreEqual(AttributeEquivalenceClass *firstAttributeEquivalan
return false; return false;
} }
foreach(firstAttributeEquivalanceCell, firstEquivalenceMemberList) foreach(firstAttributeEquivalenceCell, firstEquivalenceMemberList)
{ {
AttributeEquivalenceClassMember *firstEqMember = AttributeEquivalenceClassMember *firstEqMember =
(AttributeEquivalenceClassMember *) lfirst(firstAttributeEquivalanceCell); (AttributeEquivalenceClassMember *) lfirst(firstAttributeEquivalenceCell);
bool foundAnEquivalentMember = false; bool foundAnEquivalentMember = false;
foreach(secondAttributeEquivalanceCell, secondEquivalenceMemberList) foreach(secondAttributeEquivalenceCell, secondEquivalenceMemberList)
{ {
AttributeEquivalenceClassMember *secondEqMember = AttributeEquivalenceClassMember *secondEqMember =
(AttributeEquivalenceClassMember *) lfirst( (AttributeEquivalenceClassMember *) lfirst(
secondAttributeEquivalanceCell); secondAttributeEquivalenceCell);
if (firstEqMember->rteIdentity == secondEqMember->rteIdentity && if (firstEqMember->rteIdentity == secondEqMember->rteIdentity &&
firstEqMember->varattno == secondEqMember->varattno) firstEqMember->varattno == secondEqMember->varattno)

View File

@ -168,7 +168,7 @@ typedef struct ClauseWalkerContext
*/ */
List *pendingInstances; List *pendingInstances;
/* PruningInstance currently being built, all elegible constraints are added here */ /* PruningInstance currently being built, all eligible constraints are added here */
PruningInstance *currentPruningInstance; PruningInstance *currentPruningInstance;
/* /*

View File

@ -23,7 +23,7 @@ extern bool SafeToPushdownUnionSubquery(PlannerRestrictionContext *
extern bool ContainsUnionSubquery(Query *queryTree); extern bool ContainsUnionSubquery(Query *queryTree);
extern bool RestrictionEquivalenceForPartitionKeys(PlannerRestrictionContext * extern bool RestrictionEquivalenceForPartitionKeys(PlannerRestrictionContext *
plannerRestrictionContext); plannerRestrictionContext);
bool RestrictionEquivalenceForPartitionKeysViaEquivalances(PlannerRestrictionContext * bool RestrictionEquivalenceForPartitionKeysViaEquivalences(PlannerRestrictionContext *
plannerRestrictionContext, plannerRestrictionContext,
List * List *
allAttributeEquivalenceList); allAttributeEquivalenceList);