morrySnow commented on code in PR #38025: URL: https://github.com/apache/doris/pull/38025#discussion_r1696192066
########## fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/DateTrunc.java: ########## @@ -91,4 +92,19 @@ public List<FunctionSignature> getSignatures() { public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) { return visitor.visitDateTrunc(this, context); } + + @Override + public Expression withConstantArgs(Literal literal) { + return new DateTrunc(literal, child(1)); + } + + @Override + public int getMonotonicFunctionChildIndex() { + return 0; + } + + @Override + public Monotonicity getMonotonicity() { + return new Monotonicity(true, true); Review Comment: maybe, u should use some static variables generated in Monotonicity class. refer to `org.apache.doris.nereids.properties.PhysicalProperties` ########## fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/Function.java: ########## @@ -46,4 +58,16 @@ public boolean isHighOrder() { public final String getName() { return name; } + + public Expression withConstantArgs(Literal literal) { + return this; + } + + public int getMonotonicFunctionChildIndex() { + return -1; + } + + public Monotonicity getMonotonicity() { + return new Monotonicity(false, true); + } Review Comment: add comment to these interfaces ########## fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/Function.java: ########## @@ -46,4 +58,16 @@ public boolean isHighOrder() { public final String getName() { return name; } + + public Expression withConstantArgs(Literal literal) { + return this; Review Comment: return this is not a good idea. i think we should throw exceptions if on function not support Monotonicity ########## fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/OneRangePartitionEvaluator.java: ########## @@ -616,6 +630,19 @@ private List<Literal> toMultiNereidsLiterals(PartitionKey partitionKey) { return literals; } + @Override + public EvaluateRangeResult visitDateTrunc(DateTrunc dateTrunc, EvaluateRangeInput context) { + EvaluateRangeResult result = super.visitDateTrunc(dateTrunc, context); + if (!(result.result instanceof DateTrunc)) { + return result; + } + Expression dateTruncChild = dateTrunc.child(0); + if (partitionSlotContainsNull.containsKey(dateTruncChild)) { + partitionSlotContainsNull.put(dateTrunc, true); + } + return computeMonotonicFunctionRange(result); + } Review Comment: if we add a new trait class Monotonic for expression, could we here use visit Monotoic to do same things for all monotonic functions? then we only need add trait on different function ########## fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/Function.java: ########## @@ -27,6 +28,17 @@ * function in nereids. */ public abstract class Function extends Expression { + /**Monotonicity*/ + public class Monotonicity { + public boolean isMonotonic; + public boolean isPositive; + + public Monotonicity(boolean isMonotonic, boolean isPositive) { + this.isMonotonic = isMonotonic; + this.isPositive = isPositive; + } + } Review Comment: move out from function, it should be expression trait? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org