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

Reply via email to