diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ExtractAndNormalizeWindowExpression.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ExtractAndNormalizeWindowExpression.java index 20d1662cfc795d..383ad266511f32 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ExtractAndNormalizeWindowExpression.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ExtractAndNormalizeWindowExpression.java @@ -66,8 +66,7 @@ public Rule build() { // 1. handle bottom projects Set existedAlias = ExpressionUtils.collect(outputs, Alias.class::isInstance); - Set toBePushedDown = collectExpressionsToBePushedDown(outputs.stream() - .filter(expr -> !expr.isConstant()).collect(Collectors.toList())); + Set toBePushedDown = collectExpressionsToBePushedDown(outputs); NormalizeToSlotContext context = NormalizeToSlotContext.buildContext(existedAlias, toBePushedDown); // set toBePushedDown exprs as NamedExpression, e.g. (a+1) -> Alias(a+1) Set bottomProjects = context.pushDownToNamedExpression(toBePushedDown); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeV2Literal.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeV2Literal.java index ed6126fb78122d..784167c81ca573 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeV2Literal.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeV2Literal.java @@ -28,6 +28,7 @@ import com.google.common.base.Preconditions; import java.time.LocalDateTime; +import java.util.Objects; /** * date time v2 literal for nereids @@ -219,4 +220,19 @@ public static Expression fromJavaDateType(LocalDateTime dateTime, int precision) dateTime.getMinute(), dateTime.getSecond(), (dateTime.getNano() / 1000) / value * value); } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + if (!super.equals(o)) { + return false; + } + DateTimeV2Literal literal = (DateTimeV2Literal) o; + return Objects.equals(dataType, literal.dataType); + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DecimalLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DecimalLiteral.java index 03973fe6b03d69..1d0281796ba88c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DecimalLiteral.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DecimalLiteral.java @@ -95,4 +95,19 @@ private static void checkPrecisionAndScale(int precision, int scale, BigDecimal precision, scale, realPrecision, realScale)); } } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + if (!super.equals(o)) { + return false; + } + DecimalLiteral literal = (DecimalLiteral) o; + return Objects.equals(dataType, literal.dataType); + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DecimalV3Literal.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DecimalV3Literal.java index 403eeba39044b4..a7c9813fe5d67d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DecimalV3Literal.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DecimalV3Literal.java @@ -106,4 +106,19 @@ private static void checkPrecisionAndScale(int precision, int scale, BigDecimal precision, scale, realPrecision, realScale)); } } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + if (!super.equals(o)) { + return false; + } + DecimalV3Literal literal = (DecimalV3Literal) o; + return Objects.equals(dataType, literal.dataType); + } } diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/ExpressionRewriteTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/ExpressionRewriteTest.java index de859058ecc7d4..434e04c0f0c4b8 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/ExpressionRewriteTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/ExpressionRewriteTest.java @@ -200,13 +200,13 @@ void testSimplifyCastRule() { // decimal literal assertRewrite(new Cast(new TinyIntLiteral((byte) 1), DecimalV2Type.createDecimalV2Type(15, 9)), - new DecimalLiteral(new BigDecimal("1.000000000"))); + new DecimalLiteral(DecimalV2Type.createDecimalV2Type(15, 9), new BigDecimal("1.000000000"))); assertRewrite(new Cast(new SmallIntLiteral((short) 1), DecimalV2Type.createDecimalV2Type(15, 9)), - new DecimalLiteral(new BigDecimal("1.000000000"))); + new DecimalLiteral(DecimalV2Type.createDecimalV2Type(15, 9), new BigDecimal("1.000000000"))); assertRewrite(new Cast(new IntegerLiteral(1), DecimalV2Type.createDecimalV2Type(15, 9)), - new DecimalLiteral(new BigDecimal("1.000000000"))); + new DecimalLiteral(DecimalV2Type.createDecimalV2Type(15, 9), new BigDecimal("1.000000000"))); assertRewrite(new Cast(new BigIntLiteral(1L), DecimalV2Type.createDecimalV2Type(15, 9)), - new DecimalLiteral(new BigDecimal("1.000000000"))); + new DecimalLiteral(DecimalV2Type.createDecimalV2Type(15, 9), new BigDecimal("1.000000000"))); } @Test diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeLiteralTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeLiteralTest.java index 3ff030400e72f7..a7553ef658b3c1 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeLiteralTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeLiteralTest.java @@ -426,32 +426,32 @@ void testIrregularDateTimeHourMinuteSecondMicrosecond() { void testDateTimeV2Scale() { Assertions.assertEquals( new DateTimeV2Literal(DateTimeV2Type.of(3), "2016-07-02 00:00:00.123"), - new DateTimeV2Literal("2016-07-02 00:00:00.123")); + new DateTimeV2Literal(DateTimeV2Type.of(3), "2016-07-02 00:00:00.123")); Assertions.assertEquals( new DateTimeV2Literal(DateTimeV2Type.of(3), "2016-07-02 00:00:00.123456"), - new DateTimeV2Literal("2016-07-02 00:00:00.123")); + new DateTimeV2Literal(DateTimeV2Type.of(3), "2016-07-02 00:00:00.123")); Assertions.assertEquals( new DateTimeV2Literal(DateTimeV2Type.of(4), "2016-07-02 00:00:00.12345"), - new DateTimeV2Literal("2016-07-02 00:00:00.12345")); + new DateTimeV2Literal(DateTimeV2Type.of(4), "2016-07-02 00:00:00.1235")); Assertions.assertEquals( new DateTimeV2Literal(DateTimeV2Type.of(0), "2016-07-02 00:00:00.12345"), - new DateTimeV2Literal("2016-07-02 00:00:00.0")); + new DateTimeV2Literal(DateTimeV2Type.of(0), "2016-07-02 00:00:00")); Assertions.assertEquals( new DateTimeV2Literal(DateTimeV2Type.of(0), "2016-07-02 00:00:00.5123"), - new DateTimeV2Literal("2016-07-02 00:00:01.0")); + new DateTimeV2Literal(DateTimeV2Type.of(0), "2016-07-02 00:00:01")); Assertions.assertEquals( new DateTimeV2Literal(DateTimeV2Type.of(5), "2016-07-02 00:00:00.999999"), - new DateTimeV2Literal("2016-07-02 00:00:01.0")); + new DateTimeV2Literal(DateTimeV2Type.of(5), "2016-07-02 00:00:01.00000")); // test overflow Assertions.assertEquals( new DateTimeV2Literal(DateTimeV2Type.of(5), "2016-12-31 23:59:59.999999"), - new DateTimeV2Literal("2017-01-01 00:00:00.0")); + new DateTimeV2Literal(DateTimeV2Type.of(5), "2017-01-01 00:00:00.00000")); } @Test