From c42a92afd2981806061a24842a132e9d0d62f168 Mon Sep 17 00:00:00 2001 From: Onder Kalaci Date: Mon, 4 Dec 2017 16:26:49 +0200 Subject: [PATCH] Fix bug related to incrementing an index not properly --- .../relation_restriction_equivalence.c | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/backend/distributed/planner/relation_restriction_equivalence.c b/src/backend/distributed/planner/relation_restriction_equivalence.c index 13bbb4b3f..3f71cbaa5 100644 --- a/src/backend/distributed/planner/relation_restriction_equivalence.c +++ b/src/backend/distributed/planner/relation_restriction_equivalence.c @@ -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;