From bdbce77227d16a1fe731dc4aa55b108f291fd24d Mon Sep 17 00:00:00 2001 From: Kikyou1997 <33112463+Kikyou1997@users.noreply.github.com> Date: Wed, 7 Sep 2022 20:32:47 +0800 Subject: [PATCH] [fix](nereids) cast left child of TimestampArithmetic to wrong type in BindFunction (#12423) --- .../org/apache/doris/nereids/rules/analysis/BindFunction.java | 2 +- .../doris/nereids/trees/expressions/TimestampArithmetic.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindFunction.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindFunction.java index 567d2169ff..d1a4a4cd2c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindFunction.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindFunction.java @@ -175,7 +175,7 @@ public class BindFunction implements AnalysisRuleFactory { } catch (Exception e) { // ignore } - if (!left.getDataType().isDateType() && arithmetic.getTimeUnit().isDateTimeUnit()) { + if (!left.getDataType().isDateType() && !arithmetic.getTimeUnit().isDateTimeUnit()) { left = arithmetic.left().castTo(DateType.INSTANCE); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/TimestampArithmetic.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/TimestampArithmetic.java index ec5c5ce02f..c288698451 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/TimestampArithmetic.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/TimestampArithmetic.java @@ -36,6 +36,7 @@ import java.util.List; * Describes the addition and subtraction of time units from timestamps. * Arithmetic expressions on timestamps are syntactic sugar. * They are executed as function call exprs in the BE. + * Example: '1996-01-01' + INTERVAL '3' month; * TODO: we need to rethink this, and maybe need to add a new type of Interval then implement IntervalLiteral as others */ public class TimestampArithmetic extends Expression implements BinaryExpression {