From 5a54d518dcafabfb34d49c2f6f7854c4f478b29c Mon Sep 17 00:00:00 2001 From: 924060929 <924060929@qq.com> Date: Mon, 11 Jul 2022 22:30:42 +0800 Subject: [PATCH] [Refactor](Nereids) remove generic type from concrete expressions (#10761) in the past, we use generic type for plan and expression to support pattern match framework, it can support type inference without unsafely type cast. then, we observed that expression usually traverse or rewrite by visitor pattern, so generic type is useless for expression and introduces complexity. so we remove generic type from concrete expressions. --- .../doris/nereids/analyzer/UnboundAlias.java | 8 ++--- .../translator/PhysicalPlanTranslator.java | 4 +-- .../rewrite/rules/BetweenToCompoundRule.java | 6 ++-- .../rewrite/rules/SimplifyNotExprRule.java | 4 +-- .../rules/rewrite/AggregateDisassemble.java | 4 +-- .../doris/nereids/trees/expressions/Add.java | 7 ++-- .../nereids/trees/expressions/Alias.java | 9 +++--- .../doris/nereids/trees/expressions/And.java | 7 ++-- .../nereids/trees/expressions/Between.java | 10 ++---- .../trees/expressions/BinaryExpression.java | 13 +++----- .../expressions/ComparisonPredicate.java | 5 ++- .../trees/expressions/CompoundPredicate.java | 7 ++-- .../nereids/trees/expressions/Divide.java | 7 ++-- .../nereids/trees/expressions/EqualTo.java | 9 +++--- .../trees/expressions/GreaterThan.java | 9 +++--- .../trees/expressions/GreaterThanEqual.java | 9 +++--- .../nereids/trees/expressions/LessThan.java | 9 +++--- .../trees/expressions/LessThanEqual.java | 9 +++--- .../doris/nereids/trees/expressions/Like.java | 9 +++--- .../doris/nereids/trees/expressions/Mod.java | 7 ++-- .../nereids/trees/expressions/Multiply.java | 7 ++-- .../doris/nereids/trees/expressions/Not.java | 11 +++---- .../trees/expressions/NullSafeEqual.java | 7 ++-- .../doris/nereids/trees/expressions/Or.java | 7 ++-- .../nereids/trees/expressions/Regexp.java | 9 +++--- .../expressions/StringRegexPredicate.java | 5 ++- .../nereids/trees/expressions/Subtract.java | 7 ++-- .../trees/expressions/TernaryExpression.java | 18 ++++------- .../trees/expressions/UnaryExpression.java | 7 ++-- .../trees/expressions/functions/Sum.java | 2 +- .../doris/nereids/util/ExpressionUtils.java | 2 +- .../logical/AggregateDisassembleTest.java | 16 +++++----- .../logical/PushDownPredicateTest.java | 32 +++++++++---------- 33 files changed, 124 insertions(+), 158 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundAlias.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundAlias.java index 42a6751564..2c5f372c70 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundAlias.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundAlias.java @@ -32,11 +32,9 @@ import java.util.List; /** * Expression for unbound alias. */ -public class UnboundAlias - extends NamedExpression - implements UnaryExpression, Unbound { +public class UnboundAlias extends NamedExpression implements UnaryExpression, Unbound { - public UnboundAlias(CHILD_TYPE child) { + public UnboundAlias(Expression child) { super(NodeType.UNBOUND_ALIAS, child); } @@ -58,6 +56,6 @@ public class UnboundAlias @Override public Expression withChildren(List children) { Preconditions.checkArgument(children.size() == 1); - return new UnboundAlias<>(children.get(0)); + return new UnboundAlias(children.get(0)); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java index 9f580390f0..b790f37085 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java @@ -93,13 +93,13 @@ public class PhysicalPlanTranslator extends PlanOperatorVisitor t1.id=t2.id. */ - private static Expression swapEqualToForChildrenOrder(EqualTo equalTo, List leftOutput) { + private static Expression swapEqualToForChildrenOrder(EqualTo equalTo, List leftOutput) { Set leftSlots = SlotExtractor.extractSlot(equalTo.left()).stream() .map(NamedExpression::getExprId).collect(Collectors.toSet()); if (leftOutput.stream().map(NamedExpression::getExprId).collect(Collectors.toSet()).containsAll(leftSlots)) { return equalTo; } else { - return new EqualTo<>(equalTo.right(), equalTo.left()); + return new EqualTo(equalTo.right(), equalTo.left()); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/rules/BetweenToCompoundRule.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/rules/BetweenToCompoundRule.java index f728e24a47..0ed915d2e7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/rules/BetweenToCompoundRule.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/rules/BetweenToCompoundRule.java @@ -37,8 +37,8 @@ public class BetweenToCompoundRule extends AbstractExpressionRewriteRule { @Override public Expression visitBetween(Between expr, ExpressionRewriteContext context) { - Expression left = new GreaterThanEqual<>(expr.getCompareExpr(), expr.getLowerBound()); - Expression right = new LessThanEqual<>(expr.getCompareExpr(), expr.getUpperBound()); - return new And<>(left, right); + Expression left = new GreaterThanEqual(expr.getCompareExpr(), expr.getLowerBound()); + Expression right = new LessThanEqual(expr.getCompareExpr(), expr.getUpperBound()); + return new And(left, right); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/rules/SimplifyNotExprRule.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/rules/SimplifyNotExprRule.java index 43aa3ecad3..eb26bdab82 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/rules/SimplifyNotExprRule.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/rules/SimplifyNotExprRule.java @@ -78,9 +78,9 @@ public class SimplifyNotExprRule extends AbstractExpressionRewriteRule { NodeType type = cp.getType(); switch (type) { case AND: - return new Or<>(left, right); + return new Or(left, right); case OR: - return new And<>(left, right); + return new And(left, right); default: return expr; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/AggregateDisassemble.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/AggregateDisassemble.java index fda08547d9..9d26605e7e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/AggregateDisassemble.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/AggregateDisassemble.java @@ -97,7 +97,7 @@ public class AggregateDisassemble extends OneRewriteRuleFactory { inputSubstitutionMap.put(originGroupByExpr, originGroupByExpr); localOutputExprs.add((SlotReference) originGroupByExpr); } else { - NamedExpression localOutputExpr = new Alias<>(originGroupByExpr, originGroupByExpr.toSql()); + NamedExpression localOutputExpr = new Alias(originGroupByExpr, originGroupByExpr.toSql()); inputSubstitutionMap.put(originGroupByExpr, localOutputExpr.toSlot()); localOutputExprs.add(localOutputExpr); } @@ -109,7 +109,7 @@ public class AggregateDisassemble extends OneRewriteRuleFactory { if (inputSubstitutionMap.containsKey(aggregateFunction)) { continue; } - NamedExpression localOutputExpr = new Alias<>(aggregateFunction, aggregateFunction.toSql()); + NamedExpression localOutputExpr = new Alias(aggregateFunction, aggregateFunction.toSql()); Expression substitutionValue = aggregateFunction.withChildren( Lists.newArrayList(localOutputExpr.toSlot())); inputSubstitutionMap.put(aggregateFunction, substitutionValue); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Add.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Add.java index 96bd7045dc..503ec9ed4d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Add.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Add.java @@ -27,9 +27,8 @@ import java.util.List; /** * Add Expression. */ -public class Add - extends Arithmetic implements BinaryExpression { - public Add(LEFT_CHILD_TYPE left, RIGHT_CHILD_TYPE right) { +public class Add extends Arithmetic implements BinaryExpression { + public Add(Expression left, Expression right) { super(ArithmeticOperator.ADD, left, right); } @@ -42,7 +41,7 @@ public class Add children) { Preconditions.checkArgument(children.size() == 2); - return new Add<>(children.get(0), children.get(1)); + return new Add(children.get(0), children.get(1)); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Alias.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Alias.java index f5c97071e7..5941d6d7f1 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Alias.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Alias.java @@ -30,8 +30,7 @@ import java.util.List; /** * Expression for alias, such as col1 as c1. */ -public class Alias extends NamedExpression - implements UnaryExpression { +public class Alias extends NamedExpression implements UnaryExpression { private final ExprId exprId; private final String name; @@ -43,11 +42,11 @@ public class Alias extends NamedExpression * @param child expression that alias represents for * @param name alias name */ - public Alias(CHILD_TYPE child, String name) { + public Alias(Expression child, String name) { this(NamedExpressionUtil.newExprId(), child, name); } - private Alias(ExprId exprId, CHILD_TYPE child, String name) { + private Alias(ExprId exprId, Expression child, String name) { super(NodeType.ALIAS, child); this.exprId = exprId; this.name = name; @@ -101,7 +100,7 @@ public class Alias extends NamedExpression @Override public Expression withChildren(List children) { Preconditions.checkArgument(children.size() == 1); - return new Alias<>(exprId, children.get(0), name); + return new Alias(exprId, children.get(0), name); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/And.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/And.java index 9fcafe49b4..ddef7d956b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/And.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/And.java @@ -26,21 +26,20 @@ import java.util.List; /** * And predicate expression. */ -public class And - extends CompoundPredicate { +public class And extends CompoundPredicate { /** * Desc: Constructor for CompoundPredicate. * * @param left left child of comparison predicate * @param right right child of comparison predicate */ - public And(LEFT_CHILD_TYPE left, RIGHT_CHILD_TYPE right) { + public And(Expression left, Expression right) { super(NodeType.AND, left, right); } @Override public Expression withChildren(List children) { Preconditions.checkArgument(children.size() == 2); - return new And<>(children.get(0), children.get(1)); + return new And(children.get(0), children.get(1)); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Between.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Between.java index 5f448cc597..63087372fc 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Between.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Between.java @@ -31,11 +31,7 @@ import java.util.Objects; /** * Between predicate expression. */ -public class Between< - FIRST_CHILD_TYPE extends Expression, - SECOND_CHILD_TYPE extends Expression, - THIRD_CHILD_TYPE extends Expression> - extends Expression implements TernaryExpression { +public class Between extends Expression implements TernaryExpression { private Expression compareExpr; private Expression lowerBound; @@ -95,7 +91,7 @@ public class Between< @Override public Expression withChildren(List children) { Preconditions.checkArgument(children.size() == 3); - return new Between<>(children.get(0), children.get(1), children.get(2)); + return new Between(children.get(0), children.get(1), children.get(2)); } @Override @@ -106,7 +102,7 @@ public class Between< if (o == null || getClass() != o.getClass()) { return false; } - Between between = (Between) o; + Between between = (Between) o; return Objects.equals(compareExpr, between.compareExpr) && Objects.equals(lowerBound, between.lowerBound) && Objects.equals(upperBound, between.upperBound); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/BinaryExpression.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/BinaryExpression.java index d29a182f4c..ccf9ea9b61 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/BinaryExpression.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/BinaryExpression.java @@ -22,19 +22,16 @@ import org.apache.doris.nereids.trees.BinaryNode; /** * Interface for all expression that have two children. */ -public interface BinaryExpression< - LEFT_CHILD_TYPE extends Expression, - RIGHT_CHILD_TYPE extends Expression> - extends BinaryNode { +public interface BinaryExpression extends BinaryNode { @Override - default LEFT_CHILD_TYPE left() { - return (LEFT_CHILD_TYPE) child(0); + default Expression left() { + return child(0); } @Override - default RIGHT_CHILD_TYPE right() { - return (RIGHT_CHILD_TYPE) child(1); + default Expression right() { + return child(1); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ComparisonPredicate.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ComparisonPredicate.java index 4bdd20485a..97d0bca534 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ComparisonPredicate.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ComparisonPredicate.java @@ -29,8 +29,7 @@ import java.util.Objects; * Comparison predicate expression. * Such as: "=", "<", "<=", ">", ">=", "<=>" */ -public abstract class ComparisonPredicate - extends Expression implements BinaryExpression { +public abstract class ComparisonPredicate extends Expression implements BinaryExpression { /** * Constructor of ComparisonPredicate. * @@ -38,7 +37,7 @@ public abstract class ComparisonPredicate - extends Expression implements BinaryExpression { +public class CompoundPredicate extends Expression implements BinaryExpression { /** * Desc: Constructor for CompoundPredicate. @@ -38,7 +37,7 @@ public class CompoundPredicate children) { - return new CompoundPredicate<>(getType(), children.get(0), children.get(1)); + return new CompoundPredicate(getType(), children.get(0), children.get(1)); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Divide.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Divide.java index 967eb9633f..25eba66388 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Divide.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Divide.java @@ -26,9 +26,8 @@ import java.util.List; /** * Divide Expression. */ -public class Divide - extends Arithmetic implements BinaryExpression { - public Divide(LEFT_CHILD_TYPE left, RIGHT_CHILD_TYPE right) { +public class Divide extends Arithmetic implements BinaryExpression { + public Divide(Expression left, Expression right) { super(ArithmeticOperator.DIVIDE, left, right); } @@ -41,7 +40,7 @@ public class Divide children) { Preconditions.checkArgument(children.size() == 2); - return new Divide<>(children.get(0), children.get(1)); + return new Divide(children.get(0), children.get(1)); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/EqualTo.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/EqualTo.java index 01dce277e1..0c5caf2212 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/EqualTo.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/EqualTo.java @@ -28,10 +28,9 @@ import java.util.List; /** * Equal to expression: a = b. */ -public class EqualTo - extends ComparisonPredicate { +public class EqualTo extends ComparisonPredicate { - public EqualTo(LEFT_CHILD_TYPE left, RIGHT_CHILD_TYPE right) { + public EqualTo(Expression left, Expression right) { super(NodeType.EQUAL_TO, left, right); } @@ -46,9 +45,9 @@ public class EqualTo withChildren(List children) { + public EqualTo withChildren(List children) { Preconditions.checkArgument(children.size() == 2); - return new EqualTo<>(children.get(0), children.get(1)); + return new EqualTo(children.get(0), children.get(1)); } public R accept(ExpressionVisitor visitor, C context) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/GreaterThan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/GreaterThan.java index e00889ff2f..70a1c37643 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/GreaterThan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/GreaterThan.java @@ -28,15 +28,14 @@ import java.util.List; /** * Greater than expression: a > b. */ -public class GreaterThan - extends ComparisonPredicate { +public class GreaterThan extends ComparisonPredicate { /** * Constructor of Greater Than ComparisonPredicate. * * @param left left child of greater than * @param right right child of greater than */ - public GreaterThan(LEFT_CHILD_TYPE left, RIGHT_CHILD_TYPE right) { + public GreaterThan(Expression left, Expression right) { super(NodeType.GREATER_THAN, left, right); } @@ -51,9 +50,9 @@ public class GreaterThan withChildren(List children) { + public GreaterThan withChildren(List children) { Preconditions.checkArgument(children.size() == 2); - return new GreaterThan<>(children.get(0), children.get(1)); + return new GreaterThan(children.get(0), children.get(1)); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/GreaterThanEqual.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/GreaterThanEqual.java index e0cf57c7c9..fae5db7017 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/GreaterThanEqual.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/GreaterThanEqual.java @@ -28,15 +28,14 @@ import java.util.List; /** * Greater than and equal expression: a >= b. */ -public class GreaterThanEqual - extends ComparisonPredicate { +public class GreaterThanEqual extends ComparisonPredicate { /** * Constructor of Greater Than And Equal. * * @param left left child of Greater Than And Equal * @param right right child of Greater Than And Equal */ - public GreaterThanEqual(LEFT_CHILD_TYPE left, RIGHT_CHILD_TYPE right) { + public GreaterThanEqual(Expression left, Expression right) { super(NodeType.GREATER_THAN_EQUAL, left, right); } @@ -51,9 +50,9 @@ public class GreaterThanEqual withChildren(List children) { + public GreaterThanEqual withChildren(List children) { Preconditions.checkArgument(children.size() == 2); - return new GreaterThanEqual<>(children.get(0), children.get(1)); + return new GreaterThanEqual(children.get(0), children.get(1)); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/LessThan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/LessThan.java index 4351cf64b6..22ef01176c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/LessThan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/LessThan.java @@ -28,15 +28,14 @@ import java.util.List; /** * Less than expression: a < b. */ -public class LessThan - extends ComparisonPredicate { +public class LessThan extends ComparisonPredicate { /** * Constructor of Less Than Comparison Predicate. * * @param left left child of Less Than * @param right right child of Less Than */ - public LessThan(LEFT_CHILD_TYPE left, RIGHT_CHILD_TYPE right) { + public LessThan(Expression left, Expression right) { super(NodeType.LESS_THAN, left, right); } @@ -51,9 +50,9 @@ public class LessThan withChildren(List children) { + public LessThan withChildren(List children) { Preconditions.checkArgument(children.size() == 2); - return new LessThan<>(children.get(0), children.get(1)); + return new LessThan(children.get(0), children.get(1)); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/LessThanEqual.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/LessThanEqual.java index 85e2d157ab..b3fa4de423 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/LessThanEqual.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/LessThanEqual.java @@ -28,15 +28,14 @@ import java.util.List; /** * Less than and equal expression: a <= b. */ -public class LessThanEqual - extends ComparisonPredicate { +public class LessThanEqual extends ComparisonPredicate { /** * Constructor of Less Than And Equal. * * @param left left child of Less Than And Equal * @param right right child of Less Than And Equal */ - public LessThanEqual(LEFT_CHILD_TYPE left, RIGHT_CHILD_TYPE right) { + public LessThanEqual(Expression left, Expression right) { super(NodeType.LESS_THAN_EQUAL, left, right); } @@ -51,9 +50,9 @@ public class LessThanEqual withChildren(List children) { + public LessThanEqual withChildren(List children) { Preconditions.checkArgument(children.size() == 2); - return new LessThanEqual<>(children.get(0), children.get(1)); + return new LessThanEqual(children.get(0), children.get(1)); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Like.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Like.java index 5b5de06185..f7c3bd2192 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Like.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Like.java @@ -28,10 +28,9 @@ import java.util.List; /** * like expression: a like 'xxx%'. */ -public class Like - extends StringRegexPredicate { +public class Like extends StringRegexPredicate { - public Like(LEFT_CHILD_TYPE left, RIGHT_CHILD_TYPE right) { + public Like(Expression left, Expression right) { super(NodeType.LIKE, left, right); } @@ -46,9 +45,9 @@ public class Like withChildren(List children) { + public Like withChildren(List children) { Preconditions.checkArgument(children.size() == 2); - return new Like<>(children.get(0), children.get(1)); + return new Like(children.get(0), children.get(1)); } public R accept(ExpressionVisitor visitor, C context) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Mod.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Mod.java index 168d131ab6..02eac22d39 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Mod.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Mod.java @@ -26,9 +26,8 @@ import java.util.List; /** * Mod Expression. */ -public class Mod - extends Arithmetic implements BinaryExpression { - public Mod(LEFT_CHILD_TYPE left, RIGHT_CHILD_TYPE right) { +public class Mod extends Arithmetic implements BinaryExpression { + public Mod(Expression left, Expression right) { super(ArithmeticOperator.MOD, left, right); } @@ -41,7 +40,7 @@ public class Mod children) { Preconditions.checkArgument(children.size() == 2); - return new Mod<>(children.get(0), children.get(1)); + return new Mod(children.get(0), children.get(1)); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Multiply.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Multiply.java index d1d611c4fa..a19386231b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Multiply.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Multiply.java @@ -26,10 +26,9 @@ import java.util.List; /** * Multiply Expression. */ -public class Multiply - extends Arithmetic implements BinaryExpression { +public class Multiply extends Arithmetic implements BinaryExpression { - public Multiply(LEFT_CHILD_TYPE left, RIGHT_CHILD_TYPE right) { + public Multiply(Expression left, Expression right) { super(ArithmeticOperator.MULTIPLY, left, right); } @@ -47,6 +46,6 @@ public class Multiply children) { Preconditions.checkArgument(children.size() == 2); - return new Multiply<>(children.get(0), children.get(1)); + return new Multiply(children.get(0), children.get(1)); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Not.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Not.java index 3a976991c0..3b0d1973cc 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Not.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Not.java @@ -29,10 +29,9 @@ import java.util.Objects; /** * Not expression: not a. */ -public class Not extends Expression - implements UnaryExpression { +public class Not extends Expression implements UnaryExpression { - public Not(CHILD_TYPE child) { + public Not(Expression child) { super(NodeType.NOT, child); } @@ -54,7 +53,7 @@ public class Not extends Expression if (o == null || getClass() != o.getClass()) { return false; } - Not other = (Not) o; + Not other = (Not) o; return Objects.equals(child(), other.child()); } @@ -64,8 +63,8 @@ public class Not extends Expression } @Override - public Not withChildren(List children) { + public Not withChildren(List children) { Preconditions.checkArgument(children.size() == 1); - return new Not<>(children.get(0)); + return new Not(children.get(0)); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/NullSafeEqual.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/NullSafeEqual.java index 7a72c1ae0d..aa2c63bd63 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/NullSafeEqual.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/NullSafeEqual.java @@ -29,15 +29,14 @@ import java.util.List; * Null safe equal expression: a <=> b. * Unlike normal equal to expression, null <=> null is true. */ -public class NullSafeEqual - extends ComparisonPredicate { +public class NullSafeEqual extends ComparisonPredicate { /** * Constructor of Null Safe Equal ComparisonPredicate. * * @param left left child of Null Safe Equal * @param right right child of Null Safe Equal */ - public NullSafeEqual(LEFT_CHILD_TYPE left, RIGHT_CHILD_TYPE right) { + public NullSafeEqual(Expression left, Expression right) { super(NodeType.NULL_SAFE_EQUAL, left, right); } @@ -59,6 +58,6 @@ public class NullSafeEqual children) { Preconditions.checkArgument(children.size() == 2); - return new NullSafeEqual<>(children.get(0), children.get(1)); + return new NullSafeEqual(children.get(0), children.get(1)); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Or.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Or.java index 6d522765dc..67c805ecfd 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Or.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Or.java @@ -26,21 +26,20 @@ import java.util.List; /** * Or predicate expression. */ -public class Or - extends CompoundPredicate { +public class Or extends CompoundPredicate { /** * Desc: Constructor for CompoundPredicate. * * @param left left child of comparison predicate * @param right right child of comparison predicate */ - public Or(LEFT_CHILD_TYPE left, RIGHT_CHILD_TYPE right) { + public Or(Expression left, Expression right) { super(NodeType.OR, left, right); } @Override public Expression withChildren(List children) { Preconditions.checkArgument(children.size() == 2); - return new Or<>(children.get(0), children.get(1)); + return new Or(children.get(0), children.get(1)); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Regexp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Regexp.java index 28cee58f17..0f8cf5c814 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Regexp.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Regexp.java @@ -28,10 +28,9 @@ import java.util.List; /** * like expression: a regexp '^xxx$'. */ -public class Regexp - extends StringRegexPredicate { +public class Regexp extends StringRegexPredicate { - public Regexp(LEFT_CHILD_TYPE left, RIGHT_CHILD_TYPE right) { + public Regexp(Expression left, Expression right) { super(NodeType.REGEXP, left, right); } @@ -46,9 +45,9 @@ public class Regexp withChildren(List children) { + public Regexp withChildren(List children) { Preconditions.checkArgument(children.size() == 2); - return new Regexp<>(children.get(0), children.get(1)); + return new Regexp(children.get(0), children.get(1)); } public R accept(ExpressionVisitor visitor, C context) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/StringRegexPredicate.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/StringRegexPredicate.java index 5217b2083a..1fc2e485ee 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/StringRegexPredicate.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/StringRegexPredicate.java @@ -29,8 +29,7 @@ import java.util.Objects; * string regex expression. * Such as: like, regexp */ -public abstract class StringRegexPredicate - extends Expression implements BinaryExpression { +public abstract class StringRegexPredicate extends Expression implements BinaryExpression { /** * Constructor of StringRegexPredicate. * @@ -38,7 +37,7 @@ public abstract class StringRegexPredicate - extends Arithmetic implements BinaryExpression { - public Subtract(LEFT_CHILD_TYPE left, RIGHT_CHILD_TYPE right) { +public class Subtract extends Arithmetic implements BinaryExpression { + public Subtract(Expression left, Expression right) { super(ArithmeticOperator.SUBTRACT, left, right); } @@ -41,7 +40,7 @@ public class Subtract children) { Preconditions.checkArgument(children.size() == 2); - return new Subtract<>(children.get(0), children.get(1)); + return new Subtract(children.get(0), children.get(1)); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/TernaryExpression.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/TernaryExpression.java index afece2d4b1..c5a86c5541 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/TernaryExpression.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/TernaryExpression.java @@ -22,22 +22,18 @@ import org.apache.doris.nereids.trees.TernaryNode; /** * Interface for all expression that have three children. */ -public interface TernaryExpression< - FIRST_CHILD_TYPE extends Expression, - SECOND_CHILD_TYPE extends Expression, - THIRD_CHILD_TYPE extends Expression> - extends TernaryNode { +public interface TernaryExpression extends TernaryNode { - default FIRST_CHILD_TYPE first() { - return (FIRST_CHILD_TYPE) child(0); + default Expression first() { + return child(0); } - default SECOND_CHILD_TYPE second() { - return (SECOND_CHILD_TYPE) child(1); + default Expression second() { + return child(1); } - default THIRD_CHILD_TYPE third() { - return (THIRD_CHILD_TYPE) child(2); + default Expression third() { + return child(2); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/UnaryExpression.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/UnaryExpression.java index e84751147b..eca639d13c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/UnaryExpression.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/UnaryExpression.java @@ -22,11 +22,10 @@ import org.apache.doris.nereids.trees.UnaryNode; /** * Abstract class for all expression that have one child. */ -public interface UnaryExpression - extends UnaryNode { +public interface UnaryExpression extends UnaryNode { @Override - default CHILD_TYPE child() { - return (CHILD_TYPE) child(0); + default Expression child() { + return child(0); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/Sum.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/Sum.java index 9e2c8d54e6..c21c3cf170 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/Sum.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/Sum.java @@ -30,7 +30,7 @@ import com.google.common.base.Preconditions; import java.util.List; /** sum agg function. */ -public class Sum extends AggregateFunction implements UnaryExpression { +public class Sum extends AggregateFunction implements UnaryExpression { public Sum(Expression child) { super("sum", child); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/ExpressionUtils.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/ExpressionUtils.java index 5bdb04ef39..d5c80fe562 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/ExpressionUtils.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/ExpressionUtils.java @@ -103,7 +103,7 @@ public class ExpressionUtils { } Optional result = - distinctExpressions.stream().reduce((left, right) -> new CompoundPredicate<>(op, left, right)); + distinctExpressions.stream().reduce((left, right) -> new CompoundPredicate(op, left, right)); return result.orElse(new Literal(op == NodeType.AND)); } } diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/AggregateDisassembleTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/AggregateDisassembleTest.java index d94e6ee925..9e7d868afd 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/AggregateDisassembleTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/AggregateDisassembleTest.java @@ -79,7 +79,7 @@ public class AggregateDisassembleTest implements Plans { rStudent.getOutput().get(2).toSlot()); List outputExpressionList = Lists.newArrayList( rStudent.getOutput().get(2).toSlot(), - new Alias<>(new Sum(rStudent.getOutput().get(0).toSlot()), "sum")); + new Alias(new Sum(rStudent.getOutput().get(0).toSlot()), "sum")); Plan root = plan(new LogicalAggregate(groupExpressionList, outputExpressionList), rStudent); Memo memo = new Memo(); @@ -145,10 +145,10 @@ public class AggregateDisassembleTest implements Plans { @Test public void aliasGroupBy() { List groupExpressionList = Lists.newArrayList( - new Add<>(rStudent.getOutput().get(2).toSlot(), new Literal(1))); + new Add(rStudent.getOutput().get(2).toSlot(), new Literal(1))); List outputExpressionList = Lists.newArrayList( - new Alias<>(new Add<>(rStudent.getOutput().get(2).toSlot(), new Literal(1)), "key"), - new Alias<>(new Sum(rStudent.getOutput().get(0).toSlot()), "sum")); + new Alias(new Add(rStudent.getOutput().get(2).toSlot(), new Literal(1)), "key"), + new Alias(new Sum(rStudent.getOutput().get(0).toSlot()), "sum")); Plan root = plan(new LogicalAggregate(groupExpressionList, outputExpressionList), rStudent); Memo memo = new Memo(); @@ -171,9 +171,9 @@ public class AggregateDisassembleTest implements Plans { Assertions.assertEquals(AggPhase.GLOBAL, global.getAggPhase()); Assertions.assertEquals(AggPhase.LOCAL, local.getAggPhase()); - Expression localOutput0 = new Add<>(rStudent.getOutput().get(2).toSlot(), new Literal(1)); + Expression localOutput0 = new Add(rStudent.getOutput().get(2).toSlot(), new Literal(1)); Expression localOutput1 = new Sum(rStudent.getOutput().get(0).toSlot()); - Expression localGroupBy = new Add<>(rStudent.getOutput().get(2).toSlot(), new Literal(1)); + Expression localGroupBy = new Add(rStudent.getOutput().get(2).toSlot(), new Literal(1)); Assertions.assertEquals(2, local.getOutputExpressionList().size()); Assertions.assertTrue(local.getOutputExpressionList().get(0) instanceof Alias); @@ -215,7 +215,7 @@ public class AggregateDisassembleTest implements Plans { public void globalAggregate() { List groupExpressionList = Lists.newArrayList(); List outputExpressionList = Lists.newArrayList( - new Alias<>(new Sum(rStudent.getOutput().get(0).toSlot()), "sum")); + new Alias(new Sum(rStudent.getOutput().get(0).toSlot()), "sum")); Plan root = plan(new LogicalAggregate(groupExpressionList, outputExpressionList), rStudent); Memo memo = new Memo(); @@ -271,7 +271,7 @@ public class AggregateDisassembleTest implements Plans { List groupExpressionList = Lists.newArrayList( rStudent.getOutput().get(2).toSlot()); List outputExpressionList = Lists.newArrayList( - new Alias<>(new Sum(rStudent.getOutput().get(0).toSlot()), "sum")); + new Alias(new Sum(rStudent.getOutput().get(0).toSlot()), "sum")); Plan root = plan(new LogicalAggregate(groupExpressionList, outputExpressionList), rStudent); Memo memo = new Memo(); diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/PushDownPredicateTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/PushDownPredicateTest.java index d30bd59f8a..86753e89f6 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/PushDownPredicateTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/PushDownPredicateTest.java @@ -103,13 +103,13 @@ public class PushDownPredicateTest implements Plans { public void pushDownPredicateIntoScanTest1() { // select id,name,grade from student join score on student.id = score.sid and student.id > 1 // and score.cid > 2 where student.age > 18 and score.grade > 60 - Expression onCondition1 = new EqualTo<>(rStudent.getOutput().get(0), rScore.getOutput().get(0)); - Expression onCondition2 = new GreaterThan<>(rStudent.getOutput().get(0), Literal.of(1)); - Expression onCondition3 = new GreaterThan<>(rScore.getOutput().get(0), Literal.of(2)); + Expression onCondition1 = new EqualTo(rStudent.getOutput().get(0), rScore.getOutput().get(0)); + Expression onCondition2 = new GreaterThan(rStudent.getOutput().get(0), Literal.of(1)); + Expression onCondition3 = new GreaterThan(rScore.getOutput().get(0), Literal.of(2)); Expression onCondition = ExpressionUtils.and(onCondition1, onCondition2, onCondition3); - Expression whereCondition1 = new GreaterThan<>(rStudent.getOutput().get(1), Literal.of(18)); - Expression whereCondition2 = new GreaterThan<>(rScore.getOutput().get(2), Literal.of(60)); + Expression whereCondition1 = new GreaterThan(rStudent.getOutput().get(1), Literal.of(18)); + Expression whereCondition2 = new GreaterThan(rScore.getOutput().get(2), Literal.of(60)); Expression whereCondition = ExpressionUtils.and(whereCondition1, whereCondition2); @@ -157,10 +157,10 @@ public class PushDownPredicateTest implements Plans { public void pushDownPredicateIntoScanTest3() { //select id,name,grade from student left join score on student.id + 1 = score.sid - 2 //where student.age > 18 and score.grade > 60 - Expression whereCondition1 = new EqualTo<>(new Add<>(rStudent.getOutput().get(0), Literal.of(1)), - new Subtract<>(rScore.getOutput().get(0), Literal.of(2))); - Expression whereCondition2 = new GreaterThan<>(rStudent.getOutput().get(1), Literal.of(18)); - Expression whereCondition3 = new GreaterThan<>(rScore.getOutput().get(2), Literal.of(60)); + Expression whereCondition1 = new EqualTo(new Add(rStudent.getOutput().get(0), Literal.of(1)), + new Subtract(rScore.getOutput().get(0), Literal.of(2))); + Expression whereCondition2 = new GreaterThan(rStudent.getOutput().get(1), Literal.of(18)); + Expression whereCondition3 = new GreaterThan(rScore.getOutput().get(2), Literal.of(60)); Expression whereCondition = ExpressionUtils.and(whereCondition1, whereCondition2, whereCondition3); Plan join = plan(new LogicalJoin(JoinType.INNER_JOIN, Optional.empty()), rStudent, rScore); @@ -213,18 +213,18 @@ public class PushDownPredicateTest implements Plans { */ // student.id = score.sid - Expression whereCondition1 = new EqualTo<>(rStudent.getOutput().get(0), rScore.getOutput().get(0)); + Expression whereCondition1 = new EqualTo(rStudent.getOutput().get(0), rScore.getOutput().get(0)); // score.cid = course.cid - Expression whereCondition2 = new EqualTo<>(rScore.getOutput().get(1), rCourse.getOutput().get(0)); + Expression whereCondition2 = new EqualTo(rScore.getOutput().get(1), rCourse.getOutput().get(0)); // student.age between 18 and 20 - Expression whereCondition3 = new Between<>(rStudent.getOutput().get(2), Literal.of(18), Literal.of(20)); + Expression whereCondition3 = new Between(rStudent.getOutput().get(2), Literal.of(18), Literal.of(20)); // student.age >= 18 and student.age <= 20 - Expression whereCondition3result = new And<>( - new GreaterThanEqual<>(rStudent.getOutput().get(2), Literal.of(18)), - new LessThanEqual<>(rStudent.getOutput().get(2), Literal.of(20))); + Expression whereCondition3result = new And( + new GreaterThanEqual(rStudent.getOutput().get(2), Literal.of(18)), + new LessThanEqual(rStudent.getOutput().get(2), Literal.of(20))); // score.grade > 60 - Expression whereCondition4 = new GreaterThan<>(rScore.getOutput().get(2), Literal.of(60)); + Expression whereCondition4 = new GreaterThan(rScore.getOutput().get(2), Literal.of(60)); Expression whereCondition = ExpressionUtils.and(whereCondition1, whereCondition2, whereCondition3, whereCondition4);