Merge pull request #1851 from citusdata/fix_annoying_bug

Fix bug related to incrementing an index not properly
pull/1857/head
Önder Kalacı 2017-12-07 10:33:37 +03:00 committed by GitHub
commit 3ceb15ccdf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 18 additions and 4 deletions

View File

@ -745,11 +745,14 @@ GenerateCommonEquivalence(List *attributeEquivalenceList,
addedEquivalenceIds = bms_add_member(addedEquivalenceIds,
firstEquivalenceClass->equivalenceId);
for (; equivalenceClassIndex < equivalenceListSize; ++equivalenceClassIndex)
while (equivalenceClassIndex < equivalenceListSize)
{
AttributeEquivalenceClass *currentEquivalenceClass =
list_nth(attributeEquivalenceList, equivalenceClassIndex);
AttributeEquivalenceClass *currentEquivalenceClass = NULL;
ListCell *equivalenceMemberCell = NULL;
bool restartLoop = false;
currentEquivalenceClass = list_nth(attributeEquivalenceList,
equivalenceClassIndex);
/*
* This is an optimization. If we already added the same equivalence class,
@ -758,6 +761,8 @@ GenerateCommonEquivalence(List *attributeEquivalenceList,
*/
if (bms_is_member(currentEquivalenceClass->equivalenceId, addedEquivalenceIds))
{
equivalenceClassIndex++;
continue;
}
@ -781,11 +786,20 @@ GenerateCommonEquivalence(List *attributeEquivalenceList,
* But, we should somehow restart from the beginning to test that
* whether the already skipped ones are equal or not.
*/
equivalenceClassIndex = 0;
restartLoop = true;
break;
}
}
if (restartLoop)
{
equivalenceClassIndex = 0;
}
else
{
++equivalenceClassIndex;
}
}
return commonEquivalenceClass;