This is an automated email from the ASF dual-hosted git repository.

starocean999 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 fbab935e85d [clean](planner)alias function removes dependency on the 
old optimizer (#51509)
fbab935e85d is described below

commit fbab935e85dd06d768795bab1b11b8844cfd0aca
Author: zhangdong <zhangd...@selectdb.com>
AuthorDate: Fri Jun 13 14:30:52 2025 +0800

    [clean](planner)alias function removes dependency on the old optimizer 
(#51509)
    
    Manually spell function expr, no longer parse SQL
---
 .../org/apache/doris/catalog/AliasFunction.java    | 65 +++++++---------------
 1 file changed, 19 insertions(+), 46 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/catalog/AliasFunction.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/AliasFunction.java
index 6ee9e2a4fec..4b3ab644ffc 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/AliasFunction.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/AliasFunction.java
@@ -21,15 +21,13 @@ import org.apache.doris.analysis.CastExpr;
 import org.apache.doris.analysis.Expr;
 import org.apache.doris.analysis.FunctionCallExpr;
 import org.apache.doris.analysis.FunctionName;
-import org.apache.doris.analysis.SelectStmt;
+import org.apache.doris.analysis.FunctionParams;
+import org.apache.doris.analysis.IntLiteral;
 import org.apache.doris.analysis.SlotRef;
-import org.apache.doris.analysis.SqlParser;
-import org.apache.doris.analysis.SqlScanner;
+import org.apache.doris.analysis.StringLiteral;
 import org.apache.doris.analysis.TypeDef;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.io.Text;
-import org.apache.doris.common.util.SqlParserUtils;
-import org.apache.doris.qe.SqlModeHelper;
 import org.apache.doris.thrift.TFunctionBinaryType;
 
 import com.google.common.base.Strings;
@@ -41,7 +39,6 @@ import org.apache.logging.log4j.Logger;
 
 import java.io.DataInput;
 import java.io.IOException;
-import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -84,50 +81,26 @@ public class AliasFunction extends Function {
     }
 
     public static void initBuiltins(FunctionSet functionSet) {
-        String oriStmt = "select concat(left(id,3),'****',right(id,4));";
-        try {
-            /**
-             * Please ensure that the condition checks in {@link #analyze} are 
satisfied
-             */
-            functionSet.addBuiltin(createBuiltin(DIGITAL_MASKING, 
Lists.newArrayList(Type.BIGINT), Type.VARCHAR,
-                    false, Lists.newArrayList("id"), getExpr(oriStmt), true, 
false));
 
-            functionSet.addBuiltin(createBuiltin(DIGITAL_MASKING, 
Lists.newArrayList(Type.BIGINT), Type.VARCHAR,
-                    false, Lists.newArrayList("id"), getExpr(oriStmt), true, 
true));
+        /**
+         * Please ensure that the condition checks in {@link #analyze} are 
satisfied
+         */
+        functionSet.addBuiltin(createBuiltin(DIGITAL_MASKING, 
Lists.newArrayList(Type.BIGINT), Type.VARCHAR,
+                false, Lists.newArrayList("id"), getConcatFunctionExpr(), 
true, false));
 
-        } catch (AnalysisException e) {
-            LOG.error("Add builtin alias function error {}", e);
-        }
-    }
+        functionSet.addBuiltin(createBuiltin(DIGITAL_MASKING, 
Lists.newArrayList(Type.BIGINT), Type.VARCHAR,
+                false, Lists.newArrayList("id"), getConcatFunctionExpr(), 
true, true));
 
-    public static Expr getExpr(String sql) throws AnalysisException {
-        SelectStmt parsedStmt;
-        // Parse statement with parser generated by CUP&FLEX
-        SqlScanner input = new SqlScanner(new StringReader(sql), 
SqlModeHelper.MODE_DEFAULT);
-        SqlParser parser = new SqlParser(input);
-        try {
-            parsedStmt = (SelectStmt) SqlParserUtils.getFirstStmt(parser);
-        } catch (Error e) {
-            LOG.info("error happened when parsing stmt {}", sql, e);
-            throw new AnalysisException("sql parsing error, please check your 
sql");
-        } catch (AnalysisException e) {
-            String syntaxError = parser.getErrorMsg(sql);
-            LOG.info("analysis exception happened when parsing stmt {}, error: 
{}",
-                    sql, syntaxError, e);
-            if (syntaxError == null) {
-                throw e;
-            } else {
-                throw new AnalysisException(syntaxError, e);
-            }
-        } catch (Exception e) {
-            // TODO(lingbin): we catch 'Exception' to prevent unexpected error,
-            // should be removed this try-catch clause future.
-            LOG.info("unexpected exception happened when parsing stmt {}, 
error: {}",
-                    sql, parser.getErrorMsg(sql), e);
-            throw new AnalysisException("Unexpected exception: " + 
e.getMessage());
-        }
+    }
 
-        return parsedStmt.getSelectList().getItems().get(0).getExpr();
+    public static Expr getConcatFunctionExpr() {
+        // "concat(left(id,3),'****',right(id,4));";
+        FunctionCallExpr left = new FunctionCallExpr("left",
+                new FunctionParams(Lists.newArrayList(new SlotRef(null, "id"), 
new IntLiteral(3))));
+        FunctionCallExpr right = new FunctionCallExpr("right",
+                new FunctionParams(Lists.newArrayList(new SlotRef(null, "id"), 
new IntLiteral(4))));
+        return new FunctionCallExpr("concat",
+                new FunctionParams(Lists.newArrayList(left, new 
StringLiteral("****"), right)));
     }
 
     private static AliasFunction createBuiltin(String name, ArrayList<Type> 
argTypes, Type retType,


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to