morrySnow commented on code in PR #14380:
URL: https://github.com/apache/doris/pull/14380#discussion_r1026157027


##########
fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java:
##########
@@ -64,18 +66,30 @@ public class NereidsPlanner extends Planner {
     private List<ScanNode> scanNodeList = null;
     private DescriptorTable descTable;
 
+    private Plan parsedPlan;
+    private Plan analyzedPlan;
+    private Plan rewrittenPlan;
+    private Plan optimizedPlan;
+
     public NereidsPlanner(StatementContext statementContext) {
         this.statementContext = statementContext;
     }
 
     @Override
-    public void plan(StatementBase queryStmt, 
org.apache.doris.thrift.TQueryOptions queryOptions) throws UserException {
+    public void plan(StatementBase queryStmt, 
org.apache.doris.thrift.TQueryOptions queryOptions) {
         if (!(queryStmt instanceof LogicalPlanAdapter)) {
             throw new RuntimeException("Wrong type of queryStmt, expected: <? 
extends LogicalPlanAdapter>");
         }
 
         LogicalPlanAdapter logicalPlanAdapter = (LogicalPlanAdapter) queryStmt;
-        PhysicalPlan physicalPlan = plan(logicalPlanAdapter.getLogicalPlan(), 
PhysicalProperties.ANY);
+        ExplainLevel explainLevel = 
getExplainLevel(queryStmt.getExplainOptions());
+        Plan resultPlan = plan(logicalPlanAdapter.getLogicalPlan(), 
PhysicalProperties.ANY, explainLevel);
+        if (explainLevel == ExplainLevel.PARSED_PLAN || explainLevel == 
ExplainLevel.ANALYZED_PLAN
+                || explainLevel == ExplainLevel.REWRITTEN_PLAN || explainLevel 
== ExplainLevel.OPTIMIZED_PLAN) {

Review Comment:
   nit: add a function to ExplainLevel `isPlanLevel`



##########
fe/fe-core/src/main/java/org/apache/doris/catalog/ScalarFunction.java:
##########
@@ -74,6 +74,13 @@ public ScalarFunction(FunctionName fnName, List<Type> 
argTypes, Type retType, bo
                 NullableMode.DEPEND_ON_ARGUMENT);
     }
 
+    /** nerieds custom scalar function */
+    public ScalarFunction(FunctionName fnName, List<Type> argTypes, Type 
retType, boolean hasVarArgs, String symbolName,
+            TFunctionBinaryType binaryType, boolean userVisible, boolean 
isVec, NullableMode nullableMode) {

Review Comment:
   isVec is always true, right?



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindFunction.java:
##########
@@ -171,7 +171,9 @@ public BoundFunction visitUnboundFunction(UnboundFunction 
unboundFunction, Env e
                 }
                 if (arguments.size() == 1) {
                     boolean isGlobalAgg = true;
-                    AggregateParam aggregateParam = new 
AggregateParam(unboundFunction.isDistinct(), isGlobalAgg);
+                    boolean isDisassembled = false;
+                    AggregateParam aggregateParam = new AggregateParam(
+                            unboundFunction.isDistinct(), isGlobalAgg, 
isDisassembled);

Review Comment:
   remove local var: isGlobalAgg and isDisassembled ?



##########
fe/fe-core/src/main/java/org/apache/doris/catalog/AggregateFunction.java:
##########
@@ -183,6 +183,30 @@ public AggregateFunction(FunctionName fnName, List<Type> 
argTypes,
         returnsNonNullOnEmpty = false;
     }
 
+    public AggregateFunction(FunctionName fnName, List<Type> argTypes,
+            Type retType, Type intermediateType, boolean hasVarArgs,
+            URI location, String updateFnSymbol, String initFnSymbol,
+            String serializeFnSymbol, String mergeFnSymbol, String 
getValueFnSymbol,
+            String removeFnSymbol, String finalizeFnSymbol, boolean 
ignoresDistinct,
+            boolean isAnalyticFn, boolean returnsNonNullOnEmpty, 
TFunctionBinaryType binaryType,
+            boolean userVisible, boolean vectorized, NullableMode 
nullableMode) {
+        // only `count` is always not nullable, other aggregate function is 
always nullable
+        super(0, fnName, argTypes, retType, hasVarArgs, binaryType, 
userVisible, vectorized, nullableMode);
+        setLocation(location);
+        this.intermediateType = (intermediateType.equals(retType)) ? null : 
intermediateType;
+        this.updateFnSymbol = updateFnSymbol;
+        this.initFnSymbol = initFnSymbol;
+        this.serializeFnSymbol = serializeFnSymbol;
+        this.mergeFnSymbol = mergeFnSymbol;
+        this.getValueFnSymbol = getValueFnSymbol;
+        this.removeFnSymbol = removeFnSymbol;
+        this.finalizeFnSymbol = finalizeFnSymbol;

Review Comment:
   do we still need this? use for UDAF?



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java:
##########
@@ -217,11 +217,7 @@ public PlanFragment visitPhysicalAggregate(
             outputTupleDesc = localAggNode.getAggInfo().getOutputTupleDesc();
         }
 
-        if (aggregate.getAggPhase() == AggPhase.GLOBAL) {
-            for (FunctionCallExpr execAggregateFunction : 
execAggregateFunctions) {
-                execAggregateFunction.setMergeForNereids(true);
-            }
-        }

Review Comment:
   why remove this?



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/HllUnion.java:
##########
@@ -32,7 +32,11 @@
 
 /** HllUnion */
 public class HllUnion extends AggregateFunction
-        implements UnaryExpression, PropagateNullable, ImplicitCastInputTypes {
+        implements UnaryExpression, AlwaysNotNullable, 
ExplicitlyCastableSignature {
+    public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
+            FunctionSignature.ret(HllType.INSTANCE).args(HllType.INSTANCE)
+    );
+
     public HllUnion(Expression arg0) {
         // TODO: change to hll_union in the future

Review Comment:
   add a reason to comment?



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/parser/NereidsParser.java:
##########
@@ -53,19 +53,20 @@ public class NereidsParser {
     public List<StatementBase> parseSQL(String originStr) {
         List<Pair<LogicalPlan, StatementContext>> logicalPlans = 
parseMultiple(originStr);
         List<StatementBase> statementBases = Lists.newArrayList();
-        for (Pair<LogicalPlan, StatementContext> logicalPlan : logicalPlans) {
+        for (Pair<LogicalPlan, StatementContext> parsedPlan2Context : 
logicalPlans) {

Review Comment:
   nit: suggest to use To instead of 2



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Substring.java:
##########
@@ -66,8 +66,9 @@ public Substring(Expression arg0, Expression arg1, Expression 
arg2) {
     }
 
     @Override
-    protected FunctionSignature computeSignature(FunctionSignature signature) {
-        Optional<Expression> length = getLength();
+    protected FunctionSignature computeSignature(FunctionSignature signature, 
List<Expression> arguments) {
+        Optional<Expression> length = arguments.size() == 2

Review Comment:
   why == 2 not 3?



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/typecoercion/ExpectsInputTypes.java:
##########
@@ -35,4 +35,8 @@
 public interface ExpectsInputTypes {
 
     List<AbstractDataType> expectedInputTypes();
+
+    default void checkInputTypes() {
+
+    }

Review Comment:
   why we need a blank check?



-- 
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