This is an automated email from the ASF dual-hosted git repository.
huajianlan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new f6071a3833b [enhance](nereids) date_add, date_sub, date_diff,
date_floor, date_ceil function implement Monotonic (#44943)
f6071a3833b is described below
commit f6071a3833bb095f01065a9d10bc828f59cac883
Author: feiniaofeiafei <[email protected]>
AuthorDate: Sat Dec 21 18:00:07 2024 +0800
[enhance](nereids) date_add, date_sub, date_diff, date_floor, date_ceil
function implement Monotonic (#44943)
date_add, date_sub, date_diff, date_floor, date_ceil function implement
Monotonic, so we can do prune range partition for this functions, for example
`date_add(dt, 1) = '2024-01-01'`
---
.../rules/OneRangePartitionEvaluator.java | 15 +-
.../{Monotonic.java => DateAddSubMonotonic.java} | 27 +-
...{Monotonic.java => DateCeilFloorMonotonic.java} | 36 +-
.../{Monotonic.java => DateDiffMonotonic.java} | 28 +-
.../trees/expressions/functions/Monotonic.java | 5 +
.../expressions/functions/scalar/DayCeil.java | 17 +-
.../expressions/functions/scalar/DayFloor.java | 17 +-
.../expressions/functions/scalar/DaysAdd.java | 8 +-
.../expressions/functions/scalar/DaysDiff.java | 13 +-
.../expressions/functions/scalar/DaysSub.java | 8 +-
.../expressions/functions/scalar/FromDays.java | 18 +-
.../expressions/functions/scalar/HourCeil.java | 17 +-
.../expressions/functions/scalar/HourFloor.java | 17 +-
.../expressions/functions/scalar/HoursAdd.java | 9 +-
.../expressions/functions/scalar/HoursDiff.java | 13 +-
.../expressions/functions/scalar/HoursSub.java | 9 +-
.../functions/scalar/MicroSecondsAdd.java | 9 +-
.../functions/scalar/MicroSecondsDiff.java | 13 +-
.../functions/scalar/MicroSecondsSub.java | 9 +-
.../functions/scalar/MilliSecondsAdd.java | 9 +-
.../functions/scalar/MilliSecondsDiff.java | 13 +-
.../functions/scalar/MilliSecondsSub.java | 9 +-
.../expressions/functions/scalar/MinuteCeil.java | 17 +-
.../expressions/functions/scalar/MinuteFloor.java | 17 +-
.../expressions/functions/scalar/MinutesAdd.java | 9 +-
.../expressions/functions/scalar/MinutesDiff.java | 13 +-
.../expressions/functions/scalar/MinutesSub.java | 9 +-
.../expressions/functions/scalar/MonthCeil.java | 17 +-
.../expressions/functions/scalar/MonthFloor.java | 17 +-
.../expressions/functions/scalar/MonthsAdd.java | 8 +-
.../expressions/functions/scalar/MonthsDiff.java | 13 +-
.../expressions/functions/scalar/MonthsSub.java | 8 +-
.../expressions/functions/scalar/SecondCeil.java | 17 +-
.../expressions/functions/scalar/SecondFloor.java | 17 +-
.../expressions/functions/scalar/SecondsAdd.java | 9 +-
.../expressions/functions/scalar/SecondsDiff.java | 13 +-
.../expressions/functions/scalar/SecondsSub.java | 9 +-
.../functions/scalar/UnixTimestamp.java | 39 +-
.../expressions/functions/scalar/YearCeil.java | 17 +-
.../expressions/functions/scalar/YearFloor.java | 17 +-
.../expressions/functions/scalar/YearsAdd.java | 8 +-
.../expressions/functions/scalar/YearsDiff.java | 13 +-
.../expressions/functions/scalar/YearsSub.java | 8 +-
.../trees/expressions/literal/DateTimeLiteral.java | 5 +-
.../test_add_sub_diff_ceil_floor.groovy | 407 +++++++++++++++++++++
.../partition_prune/test_convert_tz.groovy | 6 +-
46 files changed, 950 insertions(+), 82 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/OneRangePartitionEvaluator.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/OneRangePartitionEvaluator.java
index 7e91d5502f7..eb9fd6e1491 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/OneRangePartitionEvaluator.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/OneRangePartitionEvaluator.java
@@ -48,6 +48,7 @@ import
org.apache.doris.nereids.trees.expressions.functions.scalar.Nullable;
import org.apache.doris.nereids.trees.expressions.literal.BooleanLiteral;
import org.apache.doris.nereids.trees.expressions.literal.Literal;
import org.apache.doris.nereids.trees.expressions.literal.MaxLiteral;
+import org.apache.doris.nereids.trees.expressions.literal.NullLiteral;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.BooleanType;
import org.apache.doris.nereids.util.ExpressionUtils;
@@ -807,22 +808,29 @@ public class OneRangePartitionEvaluator<K>
: new NonNullable(funcChild));
partitionSlotContainsNull.put((Expression) func,
withNullable.nullable());
- if (!result.childrenResult.get(0).columnRanges.containsKey(funcChild))
{
+ if
(!result.childrenResult.get(childIndex).columnRanges.containsKey(funcChild)) {
return result;
}
- ColumnRange childRange =
result.childrenResult.get(0).columnRanges.get(funcChild);
+ ColumnRange childRange =
result.childrenResult.get(childIndex).columnRanges.get(funcChild);
if (childRange.isEmptyRange() || childRange.asRanges().size() != 1
|| (!childRange.span().hasLowerBound() &&
!childRange.span().hasUpperBound())) {
return result;
}
Range<ColumnBound> span = childRange.span();
+ // null means positive infinity or negative infinity
Literal lower = span.hasLowerBound() ? span.lowerEndpoint().getValue()
: null;
Literal upper = span.hasUpperBound() &&
!(span.upperEndpoint().getValue() instanceof MaxLiteral)
? span.upperEndpoint().getValue() : null;
+ if (!func.isMonotonic(lower, upper)) {
+ return result;
+ }
Expression lowerValue = lower != null ?
FoldConstantRuleOnFE.evaluate(func.withConstantArgs(lower),
expressionRewriteContext) : null;
Expression upperValue = upper != null ?
FoldConstantRuleOnFE.evaluate(func.withConstantArgs(upper),
expressionRewriteContext) : null;
+ if (lowerValue instanceof NullLiteral || upperValue instanceof
NullLiteral) {
+ return result;
+ }
if (!func.isPositive()) {
Expression temp = lowerValue;
lowerValue = upperValue;
@@ -842,6 +850,9 @@ public class OneRangePartitionEvaluator<K>
if (upperValue instanceof Literal) {
newRange = newRange.withUpperBound((Literal) upperValue);
}
+ if (newRange.isEmptyRange() || !newRange.span().hasLowerBound() &&
!newRange.span().hasUpperBound()) {
+ return result;
+ }
context.rangeMap.put((Expression) func, newRange);
newRanges.put((Expression) func, newRange);
return new EvaluateRangeResult((Expression) func, newRanges,
result.childrenResult);
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/Monotonic.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/DateAddSubMonotonic.java
similarity index 57%
copy from
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/Monotonic.java
copy to
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/DateAddSubMonotonic.java
index bcaa040cb2a..7fec22fd9d3 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/Monotonic.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/DateAddSubMonotonic.java
@@ -17,19 +17,22 @@
package org.apache.doris.nereids.trees.expressions.functions;
-import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.expressions.literal.Literal;
-/** monotonicity of expressions */
-public interface Monotonic extends ExpressionTrait {
- // true means that the function is an increasing function
- boolean isPositive();
+/** monotonicity for XX_ADD XX_SUB */
+public interface DateAddSubMonotonic extends Monotonic {
+ @Override
+ default boolean isMonotonic(Literal lower, Literal upper) {
+ return child(1) instanceof Literal;
+ }
- // return the range input child index
- // e.g. date_trunc(dt,'xxx') return 0
- int getMonotonicFunctionChildIndex();
+ @Override
+ default boolean isPositive() {
+ return true;
+ }
- // return the function with the arguments replaced by literal
- // e.g. date_trunc(dt, 'day'), dt in range ['2020-01-01 10:00:00',
'2020-01-03 10:00:00']
- // return date_trunc('2020-01-01 10:00:00', 'day')
- Expression withConstantArgs(Expression literal);
+ @Override
+ default int getMonotonicFunctionChildIndex() {
+ return 0;
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/Monotonic.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/DateCeilFloorMonotonic.java
similarity index 52%
copy from
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/Monotonic.java
copy to
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/DateCeilFloorMonotonic.java
index bcaa040cb2a..71ad80a3471 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/Monotonic.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/DateCeilFloorMonotonic.java
@@ -17,19 +17,31 @@
package org.apache.doris.nereids.trees.expressions.functions;
-import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.expressions.literal.Literal;
-/** monotonicity of expressions */
-public interface Monotonic extends ExpressionTrait {
- // true means that the function is an increasing function
- boolean isPositive();
+/** monotonicity of XX_CEIL and XX_FLOOR */
+public interface DateCeilFloorMonotonic extends Monotonic {
+ @Override
+ default boolean isMonotonic(Literal lower, Literal upper) {
+ switch (arity()) {
+ case 1:
+ return true;
+ case 2:
+ return !(child(0) instanceof Literal) && child(1) instanceof
Literal;
+ case 3:
+ return !(child(0) instanceof Literal) && child(1) instanceof
Literal && child(2) instanceof Literal;
+ default:
+ return false;
+ }
+ }
- // return the range input child index
- // e.g. date_trunc(dt,'xxx') return 0
- int getMonotonicFunctionChildIndex();
+ @Override
+ default boolean isPositive() {
+ return true;
+ }
- // return the function with the arguments replaced by literal
- // e.g. date_trunc(dt, 'day'), dt in range ['2020-01-01 10:00:00',
'2020-01-03 10:00:00']
- // return date_trunc('2020-01-01 10:00:00', 'day')
- Expression withConstantArgs(Expression literal);
+ @Override
+ default int getMonotonicFunctionChildIndex() {
+ return 0;
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/Monotonic.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/DateDiffMonotonic.java
similarity index 57%
copy from
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/Monotonic.java
copy to
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/DateDiffMonotonic.java
index bcaa040cb2a..daaea895b6d 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/Monotonic.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/DateDiffMonotonic.java
@@ -17,19 +17,23 @@
package org.apache.doris.nereids.trees.expressions.functions;
-import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.expressions.literal.Literal;
-/** monotonicity of expressions */
-public interface Monotonic extends ExpressionTrait {
- // true means that the function is an increasing function
- boolean isPositive();
+/** monotonicity for XX_DIFF */
+public interface DateDiffMonotonic extends Monotonic {
+ @Override
+ default boolean isMonotonic(Literal lower, Literal upper) {
+ return !(child(0) instanceof Literal) && child(1) instanceof Literal
+ || child(0) instanceof Literal && !(child(1) instanceof
Literal);
+ }
- // return the range input child index
- // e.g. date_trunc(dt,'xxx') return 0
- int getMonotonicFunctionChildIndex();
+ @Override
+ default boolean isPositive() {
+ return child(1) instanceof Literal;
+ }
- // return the function with the arguments replaced by literal
- // e.g. date_trunc(dt, 'day'), dt in range ['2020-01-01 10:00:00',
'2020-01-03 10:00:00']
- // return date_trunc('2020-01-01 10:00:00', 'day')
- Expression withConstantArgs(Expression literal);
+ @Override
+ default int getMonotonicFunctionChildIndex() {
+ return child(1) instanceof Literal ? 0 : 1;
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/Monotonic.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/Monotonic.java
index bcaa040cb2a..feec5933890 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/Monotonic.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/Monotonic.java
@@ -18,9 +18,14 @@
package org.apache.doris.nereids.trees.expressions.functions;
import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.expressions.literal.Literal;
/** monotonicity of expressions */
public interface Monotonic extends ExpressionTrait {
+ default boolean isMonotonic(Literal lower, Literal upper) {
+ return true;
+ }
+
// true means that the function is an increasing function
boolean isPositive();
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/DayCeil.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/DayCeil.java
index e77c307b523..740363b50aa 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/DayCeil.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/DayCeil.java
@@ -20,6 +20,7 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable;
+import
org.apache.doris.nereids.trees.expressions.functions.DateCeilFloorMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullLiteral;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
@@ -37,7 +38,7 @@ import java.util.List;
* ScalarFunction 'day_ceil'. This class is generated by GenerateFunction.
*/
public class DayCeil extends ScalarFunction
- implements ExplicitlyCastableSignature, AlwaysNullable,
PropagateNullLiteral {
+ implements ExplicitlyCastableSignature, AlwaysNullable,
PropagateNullLiteral, DateCeilFloorMonotonic {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT).args(DateTimeV2Type.SYSTEM_DEFAULT),
@@ -106,4 +107,18 @@ public class DayCeil extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitDayCeil(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ switch (arity()) {
+ case 1:
+ return new DayCeil(literal);
+ case 2:
+ return new DayCeil(literal, child(1));
+ case 3:
+ return new DayCeil(literal, child(1), child(2));
+ default:
+ throw new IllegalStateException("The function " + getName() +
" has invalid child number.");
+ }
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/DayFloor.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/DayFloor.java
index b7e04e3a374..5ba7fc13c75 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/DayFloor.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/DayFloor.java
@@ -20,6 +20,7 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable;
+import
org.apache.doris.nereids.trees.expressions.functions.DateCeilFloorMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullLiteral;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
@@ -37,7 +38,7 @@ import java.util.List;
* ScalarFunction 'day_floor'. This class is generated by GenerateFunction.
*/
public class DayFloor extends ScalarFunction
- implements ExplicitlyCastableSignature, AlwaysNullable,
PropagateNullLiteral {
+ implements ExplicitlyCastableSignature, AlwaysNullable,
PropagateNullLiteral, DateCeilFloorMonotonic {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT).args(DateTimeV2Type.SYSTEM_DEFAULT),
@@ -106,4 +107,18 @@ public class DayFloor extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitDayFloor(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ switch (arity()) {
+ case 1:
+ return new DayFloor(literal);
+ case 2:
+ return new DayFloor(literal, child(1));
+ case 3:
+ return new DayFloor(literal, child(1), child(2));
+ default:
+ throw new IllegalStateException("The function " + getName() +
" has invalid child number.");
+ }
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/DaysAdd.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/DaysAdd.java
index e02c20eee82..a231816a330 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/DaysAdd.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/DaysAdd.java
@@ -21,6 +21,7 @@ import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.common.Config;
import org.apache.doris.nereids.trees.expressions.Expression;
import
org.apache.doris.nereids.trees.expressions.functions.ComputeSignatureForDateArithmetic;
+import
org.apache.doris.nereids.trees.expressions.functions.DateAddSubMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
@@ -41,7 +42,7 @@ import java.util.List;
*/
public class DaysAdd extends ScalarFunction
implements BinaryExpression, ExplicitlyCastableSignature,
- ComputeSignatureForDateArithmetic, PropagateNullableOnDateLikeV2Args {
+ ComputeSignatureForDateArithmetic, PropagateNullableOnDateLikeV2Args,
DateAddSubMonotonic {
// When enable_date_conversion is true, we prefer to V2 signature.
// This preference follows original planner. refer to
ScalarType.getDefaultDateType()
private static final List<FunctionSignature> SIGNATURES =
Config.enable_date_conversion ? ImmutableList.of(
@@ -77,4 +78,9 @@ public class DaysAdd extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitDaysAdd(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ return new DaysAdd(literal, child(1));
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/DaysDiff.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/DaysDiff.java
index e0343f1148f..c6f3377fdc9 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/DaysDiff.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/DaysDiff.java
@@ -19,8 +19,10 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.expressions.functions.DateDiffMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
+import org.apache.doris.nereids.trees.expressions.literal.Literal;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.BigIntType;
@@ -37,7 +39,7 @@ import java.util.List;
* ScalarFunction 'days_diff'. This class is generated by GenerateFunction.
*/
public class DaysDiff extends ScalarFunction
- implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args, DateDiffMonotonic {
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(BigIntType.INSTANCE)
@@ -73,4 +75,13 @@ public class DaysDiff extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitDaysDiff(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ if (child(1) instanceof Literal) {
+ return new DaysDiff(literal, child(1));
+ } else {
+ return new DaysDiff(child(0), literal);
+ }
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/DaysSub.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/DaysSub.java
index 8d135dc6c9c..5dab58ecdf6 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/DaysSub.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/DaysSub.java
@@ -21,6 +21,7 @@ import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.common.Config;
import org.apache.doris.nereids.trees.expressions.Expression;
import
org.apache.doris.nereids.trees.expressions.functions.ComputeSignatureForDateArithmetic;
+import
org.apache.doris.nereids.trees.expressions.functions.DateAddSubMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
@@ -41,7 +42,7 @@ import java.util.List;
*/
public class DaysSub extends ScalarFunction
implements BinaryExpression, ExplicitlyCastableSignature,
- ComputeSignatureForDateArithmetic, PropagateNullableOnDateLikeV2Args {
+ ComputeSignatureForDateArithmetic, PropagateNullableOnDateLikeV2Args,
DateAddSubMonotonic {
// When enable_date_conversion is true, we prefer to V2 signature.
// This preference follows original planner. refer to
ScalarType.getDefaultDateType()
private static final List<FunctionSignature> SIGNATURES =
Config.enable_date_conversion ? ImmutableList.of(
@@ -77,4 +78,9 @@ public class DaysSub extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitDaysSub(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ return new DaysSub(literal, child(1));
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/FromDays.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/FromDays.java
index c3d19588ce5..1799c1461fc 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/FromDays.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/FromDays.java
@@ -21,6 +21,7 @@ import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
+import org.apache.doris.nereids.trees.expressions.functions.Monotonic;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullLiteral;
import org.apache.doris.nereids.trees.expressions.shape.UnaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
@@ -36,7 +37,7 @@ import java.util.List;
* ScalarFunction 'from_days'. This class is generated by GenerateFunction.
*/
public class FromDays extends ScalarFunction
- implements UnaryExpression, ExplicitlyCastableSignature,
AlwaysNullable, PropagateNullLiteral {
+ implements UnaryExpression, ExplicitlyCastableSignature,
AlwaysNullable, PropagateNullLiteral, Monotonic {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateV2Type.INSTANCE).args(IntegerType.INSTANCE)
@@ -67,4 +68,19 @@ public class FromDays extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitFromDays(this, context);
}
+
+ @Override
+ public boolean isPositive() {
+ return true;
+ }
+
+ @Override
+ public int getMonotonicFunctionChildIndex() {
+ return 0;
+ }
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ return new FromDays(literal);
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HourCeil.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HourCeil.java
index e76151ef9d6..13358e18d74 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HourCeil.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HourCeil.java
@@ -20,6 +20,7 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable;
+import
org.apache.doris.nereids.trees.expressions.functions.DateCeilFloorMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullLiteral;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
@@ -36,7 +37,7 @@ import java.util.List;
* ScalarFunction 'hour_ceil'. This class is generated by GenerateFunction.
*/
public class HourCeil extends ScalarFunction
- implements ExplicitlyCastableSignature, AlwaysNullable,
PropagateNullLiteral {
+ implements ExplicitlyCastableSignature, AlwaysNullable,
PropagateNullLiteral, DateCeilFloorMonotonic {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT).args(DateTimeV2Type.SYSTEM_DEFAULT),
@@ -100,4 +101,18 @@ public class HourCeil extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitHourCeil(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ switch (arity()) {
+ case 1:
+ return new HourCeil(literal);
+ case 2:
+ return new HourCeil(literal, child(1));
+ case 3:
+ return new HourCeil(literal, child(1), child(2));
+ default:
+ throw new IllegalStateException("The function " + getName() +
" has invalid child number.");
+ }
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HourFloor.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HourFloor.java
index 567f0a2dd18..f48e26ea443 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HourFloor.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HourFloor.java
@@ -20,6 +20,7 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable;
+import
org.apache.doris.nereids.trees.expressions.functions.DateCeilFloorMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullLiteral;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
@@ -36,7 +37,7 @@ import java.util.List;
* ScalarFunction 'hour_floor'. This class is generated by GenerateFunction.
*/
public class HourFloor extends ScalarFunction
- implements ExplicitlyCastableSignature, AlwaysNullable,
PropagateNullLiteral {
+ implements ExplicitlyCastableSignature, AlwaysNullable,
PropagateNullLiteral, DateCeilFloorMonotonic {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT).args(DateTimeV2Type.SYSTEM_DEFAULT),
@@ -100,4 +101,18 @@ public class HourFloor extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitHourFloor(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ switch (arity()) {
+ case 1:
+ return new HourFloor(literal);
+ case 2:
+ return new HourFloor(literal, child(1));
+ case 3:
+ return new HourFloor(literal, child(1), child(2));
+ default:
+ throw new IllegalStateException("The function " + getName() +
" has invalid child number.");
+ }
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HoursAdd.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HoursAdd.java
index cb4e601b14d..4c10b204597 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HoursAdd.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HoursAdd.java
@@ -19,6 +19,7 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
+import
org.apache.doris.nereids.trees.expressions.functions.DateAddSubMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
@@ -38,7 +39,8 @@ import java.util.List;
* ScalarFunction 'days_add'.
*/
public class HoursAdd extends ScalarFunction
- implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args,
+ DateAddSubMonotonic {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT)
@@ -67,4 +69,9 @@ public class HoursAdd extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitHoursAdd(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ return new HoursAdd(literal, child(1));
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HoursDiff.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HoursDiff.java
index 452e3110ff7..63942cd56e9 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HoursDiff.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HoursDiff.java
@@ -19,8 +19,10 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.expressions.functions.DateDiffMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
+import org.apache.doris.nereids.trees.expressions.literal.Literal;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.BigIntType;
@@ -37,7 +39,7 @@ import java.util.List;
* ScalarFunction 'hours_diff'. This class is generated by GenerateFunction.
*/
public class HoursDiff extends ScalarFunction
- implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args, DateDiffMonotonic {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(BigIntType.INSTANCE)
@@ -73,4 +75,13 @@ public class HoursDiff extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitHoursDiff(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ if (child(1) instanceof Literal) {
+ return new HoursDiff(literal, child(1));
+ } else {
+ return new HoursDiff(child(0), literal);
+ }
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HoursSub.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HoursSub.java
index e53f8ecb905..49e8e5cb50f 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HoursSub.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HoursSub.java
@@ -19,6 +19,7 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
+import
org.apache.doris.nereids.trees.expressions.functions.DateAddSubMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
@@ -38,7 +39,8 @@ import java.util.List;
* ScalarFunction 'hours_sub'.
*/
public class HoursSub extends ScalarFunction
- implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args,
+ DateAddSubMonotonic {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT)
@@ -67,4 +69,9 @@ public class HoursSub extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitHoursSub(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ return new HoursSub(literal, child(1));
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MicroSecondsAdd.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MicroSecondsAdd.java
index 8d792259440..33dd5809f2b 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MicroSecondsAdd.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MicroSecondsAdd.java
@@ -19,6 +19,7 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
+import
org.apache.doris.nereids.trees.expressions.functions.DateAddSubMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
@@ -35,7 +36,8 @@ import java.util.List;
* ScalarFunction 'MicroSeconds_add'.
*/
public class MicroSecondsAdd extends ScalarFunction
- implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args,
+ DateAddSubMonotonic {
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateTimeV2Type.MAX)
@@ -66,4 +68,9 @@ public class MicroSecondsAdd extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitMicroSecondsAdd(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ return new MicroSecondsAdd(literal, child(1));
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MicroSecondsDiff.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MicroSecondsDiff.java
index 8bf3a964839..160e8a96b13 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MicroSecondsDiff.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MicroSecondsDiff.java
@@ -19,8 +19,10 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.expressions.functions.DateDiffMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
+import org.apache.doris.nereids.trees.expressions.literal.Literal;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.BigIntType;
@@ -35,7 +37,7 @@ import java.util.List;
* ScalarFunction 'microseconds_diff'. This class is generated by
GenerateFunction.
*/
public class MicroSecondsDiff extends ScalarFunction
- implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args, DateDiffMonotonic {
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(BigIntType.INSTANCE)
@@ -67,4 +69,13 @@ public class MicroSecondsDiff extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitMicroSecondsDiff(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ if (child(1) instanceof Literal) {
+ return new MicroSecondsDiff(literal, child(1));
+ } else {
+ return new MicroSecondsDiff(child(0), literal);
+ }
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MicroSecondsSub.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MicroSecondsSub.java
index 2894d1fffc9..20c880fb879 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MicroSecondsSub.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MicroSecondsSub.java
@@ -19,6 +19,7 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
+import
org.apache.doris.nereids.trees.expressions.functions.DateAddSubMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
@@ -35,7 +36,8 @@ import java.util.List;
* ScalarFunction 'MicroSeconds_sub'.
*/
public class MicroSecondsSub extends ScalarFunction
- implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args,
+ DateAddSubMonotonic {
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateTimeV2Type.MAX)
@@ -66,4 +68,9 @@ public class MicroSecondsSub extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitMicroSecondsSub(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ return new MicroSecondsSub(literal, child(1));
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MilliSecondsAdd.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MilliSecondsAdd.java
index 1cb56b13f84..244b661db3a 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MilliSecondsAdd.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MilliSecondsAdd.java
@@ -19,6 +19,7 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
+import
org.apache.doris.nereids.trees.expressions.functions.DateAddSubMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
@@ -35,7 +36,8 @@ import java.util.List;
* ScalarFunction 'MilliSeconds_add'.
*/
public class MilliSecondsAdd extends ScalarFunction
- implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args,
+ DateAddSubMonotonic {
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateTimeV2Type.MAX)
@@ -66,4 +68,9 @@ public class MilliSecondsAdd extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitMilliSecondsAdd(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ return new MilliSecondsAdd(literal, child(1));
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MilliSecondsDiff.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MilliSecondsDiff.java
index 4500bd69460..0e8c623ce17 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MilliSecondsDiff.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MilliSecondsDiff.java
@@ -19,8 +19,10 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.expressions.functions.DateDiffMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
+import org.apache.doris.nereids.trees.expressions.literal.Literal;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.BigIntType;
@@ -35,7 +37,7 @@ import java.util.List;
* ScalarFunction 'milliseconds_diff'. This class is generated by
GenerateFunction.
*/
public class MilliSecondsDiff extends ScalarFunction
- implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args, DateDiffMonotonic {
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(BigIntType.INSTANCE)
@@ -67,4 +69,13 @@ public class MilliSecondsDiff extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitMilliSecondsDiff(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ if (child(1) instanceof Literal) {
+ return new MilliSecondsDiff(literal, child(1));
+ } else {
+ return new MilliSecondsDiff(child(0), literal);
+ }
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MilliSecondsSub.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MilliSecondsSub.java
index 42891b7e7e0..10b4f8184d1 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MilliSecondsSub.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MilliSecondsSub.java
@@ -19,6 +19,7 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
+import
org.apache.doris.nereids.trees.expressions.functions.DateAddSubMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
@@ -35,7 +36,8 @@ import java.util.List;
* ScalarFunction 'MilliSeconds_sub'.
*/
public class MilliSecondsSub extends ScalarFunction
- implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args,
+ DateAddSubMonotonic {
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateTimeV2Type.MAX)
@@ -66,4 +68,9 @@ public class MilliSecondsSub extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitMilliSecondsSub(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ return new MilliSecondsSub(literal, child(1));
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MinuteCeil.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MinuteCeil.java
index b00eaff07c2..4f3e317d00e 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MinuteCeil.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MinuteCeil.java
@@ -20,6 +20,7 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable;
+import
org.apache.doris.nereids.trees.expressions.functions.DateCeilFloorMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.DateTimeType;
@@ -35,7 +36,7 @@ import java.util.List;
* ScalarFunction 'minute_ceil'. This class is generated by GenerateFunction.
*/
public class MinuteCeil extends ScalarFunction
- implements ExplicitlyCastableSignature, AlwaysNullable {
+ implements ExplicitlyCastableSignature, AlwaysNullable,
DateCeilFloorMonotonic {
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT).args(DateTimeV2Type.SYSTEM_DEFAULT),
@@ -99,4 +100,18 @@ public class MinuteCeil extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitMinuteCeil(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ switch (arity()) {
+ case 1:
+ return new MinuteCeil(literal);
+ case 2:
+ return new MinuteCeil(literal, child(1));
+ case 3:
+ return new MinuteCeil(literal, child(1), child(2));
+ default:
+ throw new IllegalStateException("The function " + getName() +
" has invalid child number.");
+ }
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MinuteFloor.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MinuteFloor.java
index 683acc3a483..cefb5222c76 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MinuteFloor.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MinuteFloor.java
@@ -20,6 +20,7 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable;
+import
org.apache.doris.nereids.trees.expressions.functions.DateCeilFloorMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.DateTimeType;
@@ -35,7 +36,7 @@ import java.util.List;
* ScalarFunction 'minute_floor'. This class is generated by GenerateFunction.
*/
public class MinuteFloor extends ScalarFunction
- implements ExplicitlyCastableSignature, AlwaysNullable {
+ implements ExplicitlyCastableSignature, AlwaysNullable,
DateCeilFloorMonotonic {
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT).args(DateTimeV2Type.SYSTEM_DEFAULT),
@@ -99,4 +100,18 @@ public class MinuteFloor extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitMinuteFloor(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ switch (arity()) {
+ case 1:
+ return new MinuteFloor(literal);
+ case 2:
+ return new MinuteFloor(literal, child(1));
+ case 3:
+ return new MinuteFloor(literal, child(1), child(2));
+ default:
+ throw new IllegalStateException("The function " + getName() +
" has invalid child number.");
+ }
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MinutesAdd.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MinutesAdd.java
index f4c02fb84ca..8ba1642f624 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MinutesAdd.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MinutesAdd.java
@@ -19,6 +19,7 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
+import
org.apache.doris.nereids.trees.expressions.functions.DateAddSubMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
@@ -38,7 +39,8 @@ import java.util.List;
* ScalarFunction 'minutes_add'.
*/
public class MinutesAdd extends ScalarFunction
- implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args,
+ DateAddSubMonotonic {
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT)
@@ -67,4 +69,9 @@ public class MinutesAdd extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitMinutesAdd(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ return new MinutesAdd(literal, child(1));
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MinutesDiff.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MinutesDiff.java
index 4d011116334..91c254be7c1 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MinutesDiff.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MinutesDiff.java
@@ -19,8 +19,10 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.expressions.functions.DateDiffMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
+import org.apache.doris.nereids.trees.expressions.literal.Literal;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.BigIntType;
@@ -37,7 +39,7 @@ import java.util.List;
* ScalarFunction 'minutes_diff'. This class is generated by GenerateFunction.
*/
public class MinutesDiff extends ScalarFunction
- implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args, DateDiffMonotonic {
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(BigIntType.INSTANCE)
@@ -73,4 +75,13 @@ public class MinutesDiff extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitMinutesDiff(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ if (child(1) instanceof Literal) {
+ return new MinutesDiff(literal, child(1));
+ } else {
+ return new MinutesDiff(child(0), literal);
+ }
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MinutesSub.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MinutesSub.java
index 4fb61695781..2a29d9e1659 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MinutesSub.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MinutesSub.java
@@ -19,6 +19,7 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
+import
org.apache.doris.nereids.trees.expressions.functions.DateAddSubMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
@@ -38,7 +39,8 @@ import java.util.List;
* ScalarFunction 'minutes_sub'.
*/
public class MinutesSub extends ScalarFunction
- implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args,
+ DateAddSubMonotonic {
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT)
@@ -67,4 +69,9 @@ public class MinutesSub extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitMinutesSub(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ return new MinutesSub(literal, child(1));
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MonthCeil.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MonthCeil.java
index 627568cf28a..a1f4628dd6a 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MonthCeil.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MonthCeil.java
@@ -20,6 +20,7 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable;
+import
org.apache.doris.nereids.trees.expressions.functions.DateCeilFloorMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullLiteral;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
@@ -37,7 +38,7 @@ import java.util.List;
* ScalarFunction 'month_ceil'. This class is generated by GenerateFunction.
*/
public class MonthCeil extends ScalarFunction
- implements ExplicitlyCastableSignature, AlwaysNullable,
PropagateNullLiteral {
+ implements ExplicitlyCastableSignature, AlwaysNullable,
PropagateNullLiteral, DateCeilFloorMonotonic {
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT).args(DateTimeV2Type.SYSTEM_DEFAULT),
@@ -106,4 +107,18 @@ public class MonthCeil extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitMonthCeil(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ switch (arity()) {
+ case 1:
+ return new MonthCeil(literal);
+ case 2:
+ return new MonthCeil(literal, child(1));
+ case 3:
+ return new MonthCeil(literal, child(1), child(2));
+ default:
+ throw new IllegalStateException("The function " + getName() +
" has invalid child number.");
+ }
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MonthFloor.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MonthFloor.java
index f3b0b66c139..d55d52ab68c 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MonthFloor.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MonthFloor.java
@@ -20,6 +20,7 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable;
+import
org.apache.doris.nereids.trees.expressions.functions.DateCeilFloorMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullLiteral;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
@@ -37,7 +38,7 @@ import java.util.List;
* ScalarFunction 'month_floor'. This class is generated by GenerateFunction.
*/
public class MonthFloor extends ScalarFunction
- implements ExplicitlyCastableSignature, AlwaysNullable,
PropagateNullLiteral {
+ implements ExplicitlyCastableSignature, AlwaysNullable,
PropagateNullLiteral, DateCeilFloorMonotonic {
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT).args(DateTimeV2Type.SYSTEM_DEFAULT),
@@ -106,4 +107,18 @@ public class MonthFloor extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitMonthFloor(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ switch (arity()) {
+ case 1:
+ return new MonthFloor(literal);
+ case 2:
+ return new MonthFloor(literal, child(1));
+ case 3:
+ return new MonthFloor(literal, child(1), child(2));
+ default:
+ throw new IllegalStateException("The function " + getName() +
" has invalid child number.");
+ }
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MonthsAdd.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MonthsAdd.java
index 5126400b71e..1cca6d8446f 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MonthsAdd.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MonthsAdd.java
@@ -21,6 +21,7 @@ import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.common.Config;
import org.apache.doris.nereids.trees.expressions.Expression;
import
org.apache.doris.nereids.trees.expressions.functions.ComputeSignatureForDateArithmetic;
+import
org.apache.doris.nereids.trees.expressions.functions.DateAddSubMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
@@ -41,7 +42,7 @@ import java.util.List;
*/
public class MonthsAdd extends ScalarFunction
implements BinaryExpression, ExplicitlyCastableSignature,
- ComputeSignatureForDateArithmetic, PropagateNullableOnDateLikeV2Args {
+ ComputeSignatureForDateArithmetic, PropagateNullableOnDateLikeV2Args,
DateAddSubMonotonic {
// When enable_date_conversion is true, we prefer to V2 signature.
// This preference follows original planner. refer to
ScalarType.getDefaultDateType()
@@ -78,4 +79,9 @@ public class MonthsAdd extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitMonthsAdd(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ return new MonthsAdd(literal, child(1));
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MonthsDiff.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MonthsDiff.java
index 373265b1e38..a850767a49f 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MonthsDiff.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MonthsDiff.java
@@ -19,8 +19,10 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.expressions.functions.DateDiffMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
+import org.apache.doris.nereids.trees.expressions.literal.Literal;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.BigIntType;
@@ -37,7 +39,7 @@ import java.util.List;
* ScalarFunction 'months_diff'. This class is generated by GenerateFunction.
*/
public class MonthsDiff extends ScalarFunction
- implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args, DateDiffMonotonic {
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(BigIntType.INSTANCE).args(DateV2Type.INSTANCE,
DateV2Type.INSTANCE),
@@ -73,4 +75,13 @@ public class MonthsDiff extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitMonthsDiff(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ if (child(1) instanceof Literal) {
+ return new MonthsDiff(literal, child(1));
+ } else {
+ return new MonthsDiff(child(0), literal);
+ }
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MonthsSub.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MonthsSub.java
index 1c2985a6e13..9c5824a1b9e 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MonthsSub.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MonthsSub.java
@@ -21,6 +21,7 @@ import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.common.Config;
import org.apache.doris.nereids.trees.expressions.Expression;
import
org.apache.doris.nereids.trees.expressions.functions.ComputeSignatureForDateArithmetic;
+import
org.apache.doris.nereids.trees.expressions.functions.DateAddSubMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
@@ -41,7 +42,7 @@ import java.util.List;
*/
public class MonthsSub extends ScalarFunction
implements BinaryExpression, ExplicitlyCastableSignature,
- ComputeSignatureForDateArithmetic, PropagateNullableOnDateLikeV2Args {
+ ComputeSignatureForDateArithmetic, PropagateNullableOnDateLikeV2Args,
DateAddSubMonotonic {
// When enable_date_conversion is true, we prefer to V2 signature.
// This preference follows original planner. refer to
ScalarType.getDefaultDateType()
@@ -78,4 +79,9 @@ public class MonthsSub extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitMonthsSub(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ return new MonthsSub(literal, child(1));
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SecondCeil.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SecondCeil.java
index 04cd08f4c8c..3b0e6576987 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SecondCeil.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SecondCeil.java
@@ -20,6 +20,7 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable;
+import
org.apache.doris.nereids.trees.expressions.functions.DateCeilFloorMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullLiteral;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
@@ -36,7 +37,7 @@ import java.util.List;
* ScalarFunction 'second_ceil'. This class is generated by GenerateFunction.
*/
public class SecondCeil extends ScalarFunction
- implements ExplicitlyCastableSignature, AlwaysNullable,
PropagateNullLiteral {
+ implements ExplicitlyCastableSignature, AlwaysNullable,
PropagateNullLiteral, DateCeilFloorMonotonic {
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT).args(DateTimeV2Type.SYSTEM_DEFAULT),
@@ -100,4 +101,18 @@ public class SecondCeil extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitSecondCeil(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ switch (arity()) {
+ case 1:
+ return new SecondCeil(literal);
+ case 2:
+ return new SecondCeil(literal, child(1));
+ case 3:
+ return new SecondCeil(literal, child(1), child(2));
+ default:
+ throw new IllegalStateException("The function " + getName() +
" has invalid child number.");
+ }
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SecondFloor.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SecondFloor.java
index ae0af110607..c06fff06aed 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SecondFloor.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SecondFloor.java
@@ -20,6 +20,7 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable;
+import
org.apache.doris.nereids.trees.expressions.functions.DateCeilFloorMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullLiteral;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
@@ -36,7 +37,7 @@ import java.util.List;
* ScalarFunction 'second_floor'. This class is generated by GenerateFunction.
*/
public class SecondFloor extends ScalarFunction
- implements ExplicitlyCastableSignature, AlwaysNullable,
PropagateNullLiteral {
+ implements ExplicitlyCastableSignature, AlwaysNullable,
PropagateNullLiteral, DateCeilFloorMonotonic {
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT).args(DateTimeV2Type.SYSTEM_DEFAULT),
@@ -101,4 +102,18 @@ public class SecondFloor extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitSecondFloor(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ switch (arity()) {
+ case 1:
+ return new SecondFloor(literal);
+ case 2:
+ return new SecondFloor(literal, child(1));
+ case 3:
+ return new SecondFloor(literal, child(1), child(2));
+ default:
+ throw new IllegalStateException("The function " + getName() +
" has invalid child number.");
+ }
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SecondsAdd.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SecondsAdd.java
index a6e131f5263..3afa8f13419 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SecondsAdd.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SecondsAdd.java
@@ -19,6 +19,7 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
+import
org.apache.doris.nereids.trees.expressions.functions.DateAddSubMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
@@ -38,7 +39,8 @@ import java.util.List;
* ScalarFunction 'minutes_add'.
*/
public class SecondsAdd extends ScalarFunction
- implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args,
+ DateAddSubMonotonic {
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT)
@@ -67,4 +69,9 @@ public class SecondsAdd extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitSecondsAdd(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ return new SecondsAdd(literal, child(1));
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SecondsDiff.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SecondsDiff.java
index 4dd7e12b9e2..c81999d4fa2 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SecondsDiff.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SecondsDiff.java
@@ -19,8 +19,10 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.expressions.functions.DateDiffMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
+import org.apache.doris.nereids.trees.expressions.literal.Literal;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.BigIntType;
@@ -37,7 +39,7 @@ import java.util.List;
* ScalarFunction 'seconds_diff'. This class is generated by GenerateFunction.
*/
public class SecondsDiff extends ScalarFunction
- implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args, DateDiffMonotonic {
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(BigIntType.INSTANCE)
@@ -73,4 +75,13 @@ public class SecondsDiff extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitSecondsDiff(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ if (child(1) instanceof Literal) {
+ return new SecondsDiff(literal, child(1));
+ } else {
+ return new SecondsDiff(child(0), literal);
+ }
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SecondsSub.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SecondsSub.java
index 37c59b2168b..d3093f84e1a 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SecondsSub.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SecondsSub.java
@@ -19,6 +19,7 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
+import
org.apache.doris.nereids.trees.expressions.functions.DateAddSubMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
@@ -38,7 +39,8 @@ import java.util.List;
* ScalarFunction 'Seconds_sub'.
*/
public class SecondsSub extends ScalarFunction
- implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args,
+ DateAddSubMonotonic {
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT)
@@ -67,4 +69,9 @@ public class SecondsSub extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitSecondsSub(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ return new SecondsSub(literal, child(1));
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/UnixTimestamp.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/UnixTimestamp.java
index 633e1e7d4f3..178187ad9cb 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/UnixTimestamp.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/UnixTimestamp.java
@@ -20,6 +20,9 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
+import org.apache.doris.nereids.trees.expressions.functions.Monotonic;
+import org.apache.doris.nereids.trees.expressions.literal.DateTimeLiteral;
+import org.apache.doris.nereids.trees.expressions.literal.Literal;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.DataType;
import org.apache.doris.nereids.types.DateTimeType;
@@ -39,7 +42,8 @@ import java.util.List;
/**
* ScalarFunction 'unix_timestamp'. This class is generated by
GenerateFunction.
*/
-public class UnixTimestamp extends ScalarFunction implements
ExplicitlyCastableSignature {
+public class UnixTimestamp extends ScalarFunction implements
ExplicitlyCastableSignature, Monotonic {
+ private static final DateTimeLiteral MAX = new DateTimeLiteral("2038-01-19
03:14:07");
// we got changes when computeSignature
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
@@ -145,4 +149,37 @@ public class UnixTimestamp extends ScalarFunction
implements ExplicitlyCastableS
public boolean isDeterministic() {
return !this.children.isEmpty();
}
+
+ @Override
+ public boolean isPositive() {
+ return true;
+ }
+
+ @Override
+ public int getMonotonicFunctionChildIndex() {
+ return 0;
+ }
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ return new UnixTimestamp(literal);
+ }
+
+ @Override
+ public boolean isMonotonic(Literal lower, Literal upper) {
+ if (arity() != 1) {
+ return false;
+ }
+ if (null == lower) {
+ lower = DateTimeLiteral.MIN_DATETIME;
+ }
+ if (null == upper) {
+ upper = DateTimeLiteral.MAX_DATETIME;
+ }
+ if (lower.compareTo(MAX) <= 0 && upper.compareTo(MAX) > 0) {
+ return false;
+ } else {
+ return true;
+ }
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/YearCeil.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/YearCeil.java
index bc294638be9..37c952af815 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/YearCeil.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/YearCeil.java
@@ -20,6 +20,7 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable;
+import
org.apache.doris.nereids.trees.expressions.functions.DateCeilFloorMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.DateTimeType;
@@ -36,7 +37,7 @@ import java.util.List;
* ScalarFunction 'year_ceil'. This class is generated by GenerateFunction.
*/
public class YearCeil extends ScalarFunction
- implements ExplicitlyCastableSignature, AlwaysNullable {
+ implements ExplicitlyCastableSignature, AlwaysNullable,
DateCeilFloorMonotonic {
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT).args(DateTimeV2Type.SYSTEM_DEFAULT),
@@ -105,4 +106,18 @@ public class YearCeil extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitYearCeil(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ switch (arity()) {
+ case 1:
+ return new YearCeil(literal);
+ case 2:
+ return new YearCeil(literal, child(1));
+ case 3:
+ return new YearCeil(literal, child(1), child(2));
+ default:
+ throw new IllegalStateException("The function " + getName() +
" has invalid child number.");
+ }
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/YearFloor.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/YearFloor.java
index 5415502a769..00a1ad918f7 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/YearFloor.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/YearFloor.java
@@ -20,6 +20,7 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable;
+import
org.apache.doris.nereids.trees.expressions.functions.DateCeilFloorMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.DateTimeType;
@@ -36,7 +37,7 @@ import java.util.List;
* ScalarFunction 'year_floor'. This class is generated by GenerateFunction.
*/
public class YearFloor extends ScalarFunction
- implements ExplicitlyCastableSignature, AlwaysNullable {
+ implements ExplicitlyCastableSignature, AlwaysNullable,
DateCeilFloorMonotonic {
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT).args(DateTimeV2Type.SYSTEM_DEFAULT),
@@ -105,4 +106,18 @@ public class YearFloor extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitYearFloor(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ switch (arity()) {
+ case 1:
+ return new YearFloor(literal);
+ case 2:
+ return new YearFloor(literal, child(1));
+ case 3:
+ return new YearFloor(literal, child(1), child(2));
+ default:
+ throw new IllegalStateException("The function " + getName() +
" has invalid child number.");
+ }
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/YearsAdd.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/YearsAdd.java
index 33c9e1c6dfa..9b81378d987 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/YearsAdd.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/YearsAdd.java
@@ -21,6 +21,7 @@ import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.common.Config;
import org.apache.doris.nereids.trees.expressions.Expression;
import
org.apache.doris.nereids.trees.expressions.functions.ComputeSignatureForDateArithmetic;
+import
org.apache.doris.nereids.trees.expressions.functions.DateAddSubMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
@@ -41,7 +42,7 @@ import java.util.List;
*/
public class YearsAdd extends ScalarFunction
implements BinaryExpression, ExplicitlyCastableSignature,
- ComputeSignatureForDateArithmetic, PropagateNullableOnDateLikeV2Args {
+ ComputeSignatureForDateArithmetic, PropagateNullableOnDateLikeV2Args,
DateAddSubMonotonic {
// When enable_date_conversion is true, we prefer to V2 signature.
// This preference follows original planner. refer to
ScalarType.getDefaultDateType()
@@ -78,4 +79,9 @@ public class YearsAdd extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitYearsAdd(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ return new YearsAdd(literal, child(1));
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/YearsDiff.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/YearsDiff.java
index e217d8da729..61b637449f1 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/YearsDiff.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/YearsDiff.java
@@ -19,8 +19,10 @@ package
org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.expressions.functions.DateDiffMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
+import org.apache.doris.nereids.trees.expressions.literal.Literal;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.BigIntType;
@@ -37,7 +39,7 @@ import java.util.List;
* ScalarFunction 'years_diff'. This class is generated by GenerateFunction.
*/
public class YearsDiff extends ScalarFunction
- implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args, DateDiffMonotonic {
private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(BigIntType.INSTANCE).args(DateV2Type.INSTANCE,
DateV2Type.INSTANCE),
@@ -73,4 +75,13 @@ public class YearsDiff extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitYearsDiff(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ if (child(1) instanceof Literal) {
+ return new YearsDiff(literal, child(1));
+ } else {
+ return new YearsDiff(child(0), literal);
+ }
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/YearsSub.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/YearsSub.java
index b70444178df..6f46727d937 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/YearsSub.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/YearsSub.java
@@ -21,6 +21,7 @@ import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.common.Config;
import org.apache.doris.nereids.trees.expressions.Expression;
import
org.apache.doris.nereids.trees.expressions.functions.ComputeSignatureForDateArithmetic;
+import
org.apache.doris.nereids.trees.expressions.functions.DateAddSubMonotonic;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
@@ -41,7 +42,7 @@ import java.util.List;
*/
public class YearsSub extends ScalarFunction
implements BinaryExpression, ExplicitlyCastableSignature,
- ComputeSignatureForDateArithmetic, PropagateNullableOnDateLikeV2Args {
+ ComputeSignatureForDateArithmetic, PropagateNullableOnDateLikeV2Args,
DateAddSubMonotonic {
// When enable_date_conversion is true, we prefer to V2 signature.
// This preference follows original planner. refer to
ScalarType.getDefaultDateType()
@@ -78,4 +79,9 @@ public class YearsSub extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitYearsSub(this, context);
}
+
+ @Override
+ public Expression withConstantArgs(Expression literal) {
+ return new YearsSub(literal, child(1));
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeLiteral.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeLiteral.java
index 27470187eae..0a5c02409c1 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeLiteral.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DateTimeLiteral.java
@@ -43,11 +43,10 @@ import java.util.Objects;
* date time literal.
*/
public class DateTimeLiteral extends DateLiteral {
+ public static final DateTimeLiteral MIN_DATETIME = new
DateTimeLiteral(0000, 1, 1, 0, 0, 0);
+ public static final DateTimeLiteral MAX_DATETIME = new
DateTimeLiteral(9999, 12, 31, 23, 59, 59);
protected static final int MAX_MICROSECOND = 999999;
- private static final DateTimeLiteral MIN_DATETIME = new
DateTimeLiteral(0000, 1, 1, 0, 0, 0);
- private static final DateTimeLiteral MAX_DATETIME = new
DateTimeLiteral(9999, 12, 31, 23, 59, 59);
-
private static final Logger LOG =
LogManager.getLogger(DateTimeLiteral.class);
protected long hour;
diff --git
a/regression-test/suites/nereids_rules_p0/partition_prune/test_add_sub_diff_ceil_floor.groovy
b/regression-test/suites/nereids_rules_p0/partition_prune/test_add_sub_diff_ceil_floor.groovy
new file mode 100644
index 00000000000..bda9dc81af7
--- /dev/null
+++
b/regression-test/suites/nereids_rules_p0/partition_prune/test_add_sub_diff_ceil_floor.groovy
@@ -0,0 +1,407 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite("test_add_sub_diff_ceil_floor") {
+ sql "set disable_nereids_rules='REWRITE_FILTER_EXPRESSION'"
+ sql "drop table if exists test_add_sub_diff_ceil_floor_t"
+ sql """create table test_add_sub_diff_ceil_floor_t (a int, dt datetime, d
date, c varchar(100)) duplicate key(a)
+ partition by range(dt) (
+ partition p1 values less than ("2017-01-01"),
+ partition p2 values less than ("2018-01-01"),
+ partition p3 values less than ("2019-01-01"),
+ partition p4 values less than ("2020-01-01"),
+ partition p5 values less than ("2021-01-01")
+ ) distributed by hash(a) properties("replication_num"="1");"""
+ sql """INSERT INTO test_add_sub_diff_ceil_floor_t SELECT number,
+ date_add('2016-01-01 00:00:00', interval number month),
+ cast(date_add('2022-01-01 00:00:00', interval number month) as date),
cast(number as varchar(65533)) FROM numbers('number'='55');"""
+ sql "INSERT INTO test_add_sub_diff_ceil_floor_t values(3,null,null,null);"
+
+ // xx_add
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
years_add(dt,1) >'2019-01-01' """
+ contains("partitions=3/5 (p3,p4,p5)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
months_add(dt,2) >'2019-01-01' """
+ contains("partitions=3/5 (p3,p4,p5)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
days_add(dt,10) >'2019-01-01' """
+ contains("partitions=3/5 (p3,p4,p5)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
hours_add(dt,1) >'2019-01-01' """
+ contains("partitions=3/5 (p3,p4,p5)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
minutes_add(dt,2) >'2019-01-01' """
+ contains("partitions=3/5 (p3,p4,p5)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
seconds_add(dt,10) >'2019-01-01' """
+ contains("partitions=3/5 (p3,p4,p5)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
milliseconds_add(dt,2) >'2019-01-01' """
+ contains("partitions=3/5 (p3,p4,p5)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
microseconds_add(dt,10) >'2019-01-01' """
+ contains("partitions=3/5 (p3,p4,p5)")
+ }
+ // xx_sub
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
years_sub(dt,1) <='2018-01-01' """
+ contains("4/5 (p1,p2,p3,p4)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
months_sub(dt,2) <='2018-01-01' """
+ contains("partitions=3/5 (p1,p2,p3)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
days_sub(dt,10) <='2018-01-01' """
+ contains("partitions=3/5 (p1,p2,p3)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
hours_sub(dt,1) <='2018-01-01' """
+ contains("partitions=3/5 (p1,p2,p3)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
minutes_sub(dt,2) <= '2018-01-01' """
+ contains("partitions=3/5 (p1,p2,p3)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
seconds_sub(dt,10) <= '2018-01-01' """
+ contains("partitions=3/5 (p1,p2,p3)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
milliseconds_sub(dt,2) <= '2018-01-01' """
+ contains("partitions=3/5 (p1,p2,p3)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
microseconds_sub(dt,10) <= '2018-01-01' """
+ contains("partitions=3/5 (p1,p2,p3)")
+ }
+
+ // xx_diff
+ // first arg is dt. positive
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
years_diff(dt,'2017-01-01') <2 """
+ contains("partitions=3/5 (p1,p2,p3)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
months_diff(dt,'2017-01-01') <2 """
+ contains("partitions=2/5 (p1,p2)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
days_diff(dt,'2017-01-01') <2 """
+ contains("partitions=2/5 (p1,p2)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
hours_diff(dt,'2017-01-01') <2 """
+ contains("partitions=2/5 (p1,p2)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
minutes_diff(dt,'2017-01-01') <2 """
+ contains("partitions=2/5 (p1,p2)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
seconds_diff(dt,'2017-01-01') <2 """
+ contains("partitions=2/5 (p1,p2)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
milliseconds_diff(dt,'2017-01-01') <2 """
+ contains("partitions=2/5 (p1,p2)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
microseconds_diff(dt,'2017-01-01') <2 """
+ contains("partitions=2/5 (p1,p2)")
+ }
+ // second arg is dt. not positive
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
years_diff('2021-01-01',dt) <2 """
+ contains("partitions=2/5 (p4,p5)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
months_diff('2021-01-01',dt) <2 """
+ contains("partitions=1/5 (p5)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
days_diff('2021-01-01',dt) <2 """
+ contains("partitions=1/5 (p5)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
hours_diff('2021-01-01',dt) <2 """
+ contains("partitions=1/5 (p5)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
minutes_diff('2021-01-01',dt) <2 """
+ contains("partitions=1/5 (p5)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
seconds_diff('2021-01-01',dt) <2 """
+ contains("partitions=1/5 (p5)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
milliseconds_diff('2021-01-01',dt) <2 """
+ contains("partitions=1/5 (p5)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
microseconds_diff('2021-01-01',dt) <2 """
+ contains("partitions=1/5 (p5)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
years_diff('2021-01-01',dt) <=2 """
+ contains("partitions=3/5 (p3,p4,p5)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
months_diff('2020-01-01',dt) >2 """
+ contains("partitions=4/5 (p1,p2,p3,p4)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
days_diff('2020-01-01',dt) >=2 """
+ contains("partitions=4/5 (p1,p2,p3,p4)")
+ }
+
+ // xx_ceil
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
year_ceil(dt) <'2019-01-01' """
+ contains("partitions=3/5 (p1,p2,p3)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
month_ceil(dt) <'2019-02-01' """
+ contains("partitions=4/5 (p1,p2,p3,p4)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where day_ceil(dt)
<'2019-01-01' """
+ contains("partitions=3/5 (p1,p2,p3)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
hour_ceil(dt) <'2019-01-01' """
+ contains("partitions=3/5 (p1,p2,p3)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
minute_ceil(dt) <'2019-01-01' """
+ contains("partitions=3/5 (p1,p2,p3)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
second_ceil(dt) <'2019-01-01' """
+ contains("partitions=3/5 (p1,p2,p3)")
+ }
+ // xx_ceil with other args
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
year_ceil(dt,5) <'2019-01-01' """
+ contains("partitions=1/5 (p1)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
year_ceil(dt,'2013-01-01') <'2019-01-01' """
+ contains("partitions=3/5 (p1,p2,p3)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
year_ceil(dt,5,'2013-01-01') <'2019-01-01'"""
+ contains(" partitions=3/5 (p1,p2,p3)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
hour_ceil(dt,c) <'2019-01-01' """
+ contains("partitions=5/5 (p1,p2,p3,p4,p5)")
+ }
+
+ // xx_floor
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
year_floor(dt) <='2019-01-01' """
+ contains("partitions=4/5 (p1,p2,p3,p4)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
month_floor(dt) <='2019-02-01' """
+ contains("partitions=4/5 (p1,p2,p3,p4)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
day_floor(dt) <='2019-01-01' """
+ contains("partitions=4/5 (p1,p2,p3,p4)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
hour_floor(dt) <='2019-01-01' """
+ contains("partitions=4/5 (p1,p2,p3,p4)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
minute_floor(dt) <='2019-01-01' """
+ contains("partitions=4/5 (p1,p2,p3,p4)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
second_floor(dt) <'2019-01-01' """
+ contains("partitions=3/5 (p1,p2,p3)")
+ }
+
+ // xx_floor with other args
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
month_floor(dt,'2015-01-01') <='2019-02-01' """
+ contains("partitions=4/5 (p1,p2,p3,p4)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
month_floor(dt,5,'2015-01-01') <='2019-02-01' """
+ contains("partitions=4/5 (p1,p2,p3,p4)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
month_floor(dt,5) <='2019-02-01' """
+ contains("partitions=4/5 (p1,p2,p3,p4)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
hour_floor(dt,c,'2015-01-01') <='2019-01-01' """
+ contains("partitions=5/5 (p1,p2,p3,p4,p5)")
+ }
+
+ // diff nest function
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
years_diff('2021-01-01',month_ceil(hours_add(dt, 1))) <=2 """
+ contains("partitions=4/5 (p2,p3,p4,p5)")
+ }
+ explain {
+ sql "select * from test_add_sub_diff_ceil_floor_t where
years_diff('2021-01-01',month_ceil(hours_sub(dt, 1))) <=2"
+ contains("partitions=4/5 (p1,p3,p4,p5)")
+ }
+ // mixed with non-function predicates
+ explain {
+ sql "select * from test_add_sub_diff_ceil_floor_t where
years_diff('2021-01-01',month_ceil(hours_sub(dt, 1))) <=2 and dt>'2019-06-01'"
+ contains("partitions=2/5 (p4,p5)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
years_diff('2021-01-01',month_ceil(hours_sub(dt, 1))) <=2 and
date_trunc(dt,'day')>'2019-06-01' """
+ contains("partitions=2/5 (p4,p5)")
+ }
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
months_diff(months_add(dt,10), '2018-01-01') =2 """
+ contains("partitions=1/5 (p2)")
+ }
+
+ // hours_add second arg is not literal, so will not do pruning
+ explain {
+ sql """select * from test_add_sub_diff_ceil_floor_t where
hours_add(dt, years_diff(dt,'2018-01-01')) <'2018-01-01' """
+ contains("partitions=5/5 (p1,p2,p3,p4,p5)")
+ }
+
+ // max
+ sql "drop table if exists max_t"
+ sql """create table max_t (a int, dt datetime, d date, c varchar(100))
duplicate key(a)
+ partition by range(dt) (
+ partition p1 values less than ("2017-01-01"),
+ partition p2 values less than ("2018-01-01"),
+ partition p3 values less than ("2019-01-01"),
+ partition p4 values less than ("2020-01-01"),
+ partition p5 values less than ("2021-01-01"),
+ partition p6 values less than MAXVALUE
+ ) distributed by hash(a) properties("replication_num"="1");"""
+ sql """INSERT INTO max_t SELECT number,
+ date_add('2016-01-01 00:00:00', interval number month),
+ cast(date_add('2022-01-01 00:00:00', interval number month) as date),
cast(number as varchar(65533)) FROM numbers('number'='100');"""
+ sql "INSERT INTO max_t values(3,null,null,null);"
+
+ explain {
+ sql "select * from max_t where
years_diff('2021-01-01',month_ceil(hours_add(dt, 1),'1990-01-05')) <=2 ;"
+ contains("partitions=5/6 (p2,p3,p4,p5,p6)")
+ }
+ explain {
+ sql "select * from max_t where
years_diff('2021-01-01',month_ceil(hours_add(dt, 1),10,'1990-01-05')) <=2 ;"
+ contains("partitions=5/6 (p2,p3,p4,p5,p6)")
+ }
+
+ explain {
+ sql """select * from max_t where
years_diff('2021-01-01',month_ceil(hours_add(dt, 1),10,'1990-01-05')) <=2 and
dt >'2018-01-01';"""
+ contains("partitions=4/6 (p3,p4,p5,p6)")
+ }
+
+ explain {
+ sql """select * from max_t where
months_diff('2021-01-01',month_floor(hours_add(dt, 1),10,'1990-01-05')) <=2;"""
+ contains("partitions=3/6 (p1,p5,p6)")
+ }
+
+ explain {
+ sql """select * from max_t where
months_diff('2021-01-01',month_floor(hours_add(dt, 1),12,'1000-01-01')) > 2"""
+ contains("partitions=5/6 (p1,p2,p3,p4,p5)")
+ }
+ explain {
+ sql """select * from max_t where
months_diff('2021-01-01',month_floor(hours_add(dt, 1),12,'1000-01-01')) > 2 and
month_floor(dt) >'2018-01-01' """
+ contains("partitions=3/6 (p3,p4,p5)")
+ }
+ explain {
+ sql """select * from max_t where hours_sub(hours_add(dt, 1),1)
>'2018-01-01' and days_diff(hours_sub(hours_add(dt, 1),1),'2021-01-01') >2"""
+ contains("partitions=1/6 (p6)")
+ }
+
+ // from_days and unix_timestamp
+ explain {
+ sql """select * from max_t where unix_timestamp(dt) > 1547838847 """
+ contains("partitions=3/6 (p4,p5,p6)")
+ }
+
+ sql "drop table if exists partition_int_from_days"
+ sql """
+ CREATE TABLE `partition_int_from_days` (
+ `a` int NULL,
+ `b` int NULL
+ ) ENGINE=OLAP
+ DUPLICATE KEY(`a`, `b`)
+ PARTITION BY RANGE(`a`)
+ (PARTITION p1 VALUES [("-2147483648"), ("100000")),
+ PARTITION p2 VALUES [("100000"), ("738000")),
+ PARTITION p3 VALUES [("738000"), ("90000000")),
+ PARTITION p4 VALUES [("90000000"), (MAXVALUE)))
+ DISTRIBUTED BY HASH(`a`) BUCKETS 10
+ PROPERTIES (
+ "replication_allocation" = "tag.location.default: 1"
+ ); """
+ sql """
+ insert into partition_int_from_days
values(100,100),(100022,1002),(738004,33),(90000003,89);
+ """
+ explain {
+ sql """select * from partition_int_from_days where
from_days(a)>'2020-07-29' """
+ contains("partitions=3/4 (p1,p3,p4)")
+ }
+
+
+ sql "drop table if exists unix_time_t"
+ sql """create table unix_time_t (a int, dt datetime, d date, c
varchar(100)) duplicate key(a)
+ partition by range(dt) (
+ partition p1 values less than ("1980-01-01"),
+ partition p2 values less than ("2018-01-01"),
+ partition p3 values less than ("2039-01-01"),
+ partition p4 values less than MAXVALUE
+ ) distributed by hash(a) properties("replication_num"="1");"""
+ sql """INSERT INTO unix_time_t
values(1,'1979-01-01','1979-01-01','abc'),(1,'2012-01-01','2012-01-01','abc'),(1,'2020-01-01','2020-01-01','abc'),(1,'2045-01-01','2045-01-01','abc')"""
+ sql "INSERT INTO unix_time_t values(3,null,null,null);"
+ explain {
+ sql """ select * from unix_time_t where unix_timestamp(dt) >
1514822400 """
+ contains("partitions=2/4 (p3,p4)")
+ }
+ explain {
+ sql """select * from unix_time_t where unix_timestamp(dt) <
2147454847;"""
+ contains("partitions=4/4 (p1,p2,p3,p4)")
+ }
+ explain {
+ sql """select * from unix_time_t where unix_timestamp(dt) =
2147454847"""
+ contains("partitions=2/4 (p3,p4)")
+ }
+ explain {
+ sql """select * from unix_time_t where unix_timestamp(dt) = 2147454847
and dt<'2038-01-01'"""
+ contains("partitions=1/4 (p3)")
+ }
+ explain {
+ sql """select * from unix_time_t where unix_timestamp(dt) <=0"""
+ contains("partitions=3/4 (p1,p3,p4)")
+ }
+
+}
\ No newline at end of file
diff --git
a/regression-test/suites/nereids_rules_p0/partition_prune/test_convert_tz.groovy
b/regression-test/suites/nereids_rules_p0/partition_prune/test_convert_tz.groovy
index c309d10d067..3e033a78eb9 100644
---
a/regression-test/suites/nereids_rules_p0/partition_prune/test_convert_tz.groovy
+++
b/regression-test/suites/nereids_rules_p0/partition_prune/test_convert_tz.groovy
@@ -46,13 +46,13 @@ suite("test_convert_tz") {
}
explain {
sql "SELECT * FROM test_convert_tz WHERE convert_tz(timestamp,
'Asia/Shanghai', 'Europe/Paris') > '2021-01-01';";
- contains("partitions=2/3 (p2,p3)")
+ contains("partitions=3/3 (p1,p2,p3)")
}
explain {
sql """SELECT * FROM test_convert_tz WHERE convert_tz(timestamp,
'Asia/Shanghai', 'Europe/Paris') < '2021-02-24'
and convert_tz(timestamp, 'Asia/Shanghai', 'Europe/Paris') >
'2021-01-01';"""
- contains("partitions=2/3 (p2,p3)")
+ contains("partitions=3/3 (p1,p2,p3)")
}
explain {
@@ -93,7 +93,7 @@ suite("test_convert_tz") {
}
explain {
sql "SELECT * FROM test_convert_tz WHERE not convert_tz(timestamp,
'Asia/Shanghai', 'Europe/Paris') <= '2021-01-01';";
- contains("partitions=2/3 (p2,p3)")
+ contains("partitions=3/3 (p1,p2,p3)")
}
}
}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]