diff --git a/.gitignore b/.gitignore index 5c9626e2ec..59ad7208bd 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ *.pyc *.class *.iml -*.swp *.jar *.log *.so.tmp @@ -76,6 +75,7 @@ fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisLexer.tokens fe/fe-core/src/main/antlr4/org/apache/doris/nereids/gen/ fe/fe-common/src/main/java/org/apache/doris/thrift fe/fe-common/src/main/java/org/apache/parquet +fe/fe-core/src/main/java/org/apache/parquet # BE be/build*/ diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/MergeSetOperations.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/MergeSetOperations.java index 56f924684c..757388c417 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/MergeSetOperations.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/MergeSetOperations.java @@ -30,22 +30,20 @@ import java.util.List; import java.util.stream.Stream; /** - * optimization. * Merge nodes of the same type and same qualifier. - * + *
* eg: select k1, k2 from t1 union select 1, 2 union select d1, d2 from t2; - * before: - * logicalUnion() - * / \ - * logicalUnion() logicalProject - * / \ - * logicalProject logicalOneRowRelation - * - * after: - * 2. MERGE_SET_OPERATION - * logicalUnion() - * / \ \ - * logicalProject logicalOneRowRelation logicalProject + *
+ * union + * / \ + * union scan3 + * / \ + * scan1 scan2 + * --> + * union + * / | \ + * scan1 scan2 scan3 + **/ public class MergeSetOperations implements RewriteRuleFactory { @Override @@ -72,22 +70,17 @@ public class MergeSetOperations implements RewriteRuleFactory { /** canMerge */ public static boolean canMerge(LogicalSetOperation parent) { Plan left = parent.child(0); - if (canMerge(parent, left)) { - return true; - } Plan right = parent.child(1); - if (canMerge(parent, right)) { - return true; - } - return false; + + return canMerge(parent, left) || canMerge(parent, right); } - public static final boolean canMerge(LogicalSetOperation parent, Plan child) { + public static boolean canMerge(LogicalSetOperation parent, Plan child) { return child.getClass().equals(parent.getClass()) && isSameQualifierOrChildQualifierIsAll(parent, (LogicalSetOperation) child); } - public static final boolean isSameQualifierOrChildQualifierIsAll(LogicalSetOperation parentSetOperation, + public static boolean isSameQualifierOrChildQualifierIsAll(LogicalSetOperation parentSetOperation, LogicalSetOperation childSetOperation) { return parentSetOperation.getQualifier() == childSetOperation.getQualifier() || childSetOperation.getQualifier() == Qualifier.ALL;