From 86b8e95045a633c1d347df3f7ffe2933470b022e Mon Sep 17 00:00:00 2001 From: jakevin Date: Mon, 17 Apr 2023 23:12:26 +0800 Subject: [PATCH] [fix](Nereids): when GroupExpr already exists, we need to remove ParentExpression (#18749) --- .../java/org/apache/doris/nereids/memo/GroupExpression.java | 2 +- .../src/main/java/org/apache/doris/nereids/memo/Memo.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/GroupExpression.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/GroupExpression.java index 12e9816f8e..afa6d51f9b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/GroupExpression.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/GroupExpression.java @@ -182,7 +182,7 @@ public class GroupExpression { */ public boolean isUnused() { if (isUnused) { - Preconditions.checkState(children.isEmpty() || ownerGroup == null); + Preconditions.checkState(children.isEmpty() && ownerGroup == null); return true; } Preconditions.checkState(ownerGroup != null); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Memo.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Memo.java index 7a8d62338d..4ad1b118dc 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Memo.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Memo.java @@ -427,6 +427,9 @@ public class Memo { if (target != null && !target.getGroupId().equals(existedGroupExpression.getOwnerGroup().getGroupId())) { mergeGroup(existedGroupExpression.getOwnerGroup(), target); } + // When we create a GroupExpression, we will add it into ParentExpression of childGroup. + // But if it already exists, we should remove it from ParentExpression of childGroup. + groupExpression.children().forEach(childGroup -> childGroup.removeParentExpression(groupExpression)); return CopyInResult.of(false, existedGroupExpression); } if (target != null) {