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

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new bc1354410f1 Refactor constructor of CreateFunctionStatement to empty 
buildAttributes (#38310)
bc1354410f1 is described below

commit bc1354410f17a9f0dafb1df258b1473361b8999d
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Mar 3 14:51:54 2026 +0800

    Refactor constructor of CreateFunctionStatement to empty buildAttributes 
(#38310)
---
 .../statement/type/DorisDDLStatementVisitor.java     |  7 +++----
 .../statement/type/FirebirdDDLStatementVisitor.java  |  2 +-
 .../statement/type/HiveDDLStatementVisitor.java      |  2 +-
 .../statement/type/MySQLDDLStatementVisitor.java     |  5 +----
 .../statement/type/OpenGaussDDLStatementVisitor.java |  2 +-
 .../statement/type/OracleDDLStatementVisitor.java    |  6 ++----
 .../type/PostgreSQLDDLStatementVisitor.java          |  2 +-
 .../statement/type/SQLServerDDLStatementVisitor.java |  2 +-
 .../type/ddl/function/CreateFunctionStatement.java   | 20 ++++++++++----------
 .../doris/ddl/DorisCreateFunctionStatement.java      |  7 +++++--
 .../ddl/function/OracleCreateFunctionStatement.java  |  8 ++++++--
 11 files changed, 32 insertions(+), 31 deletions(-)

diff --git 
a/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/type/DorisDDLStatementVisitor.java
 
b/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/type/DorisDDLStatementVisitor.java
index 500316eddfd..f3e21e0234e 100644
--- 
a/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/type/DorisDDLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/type/DorisDDLStatementVisitor.java
@@ -1437,9 +1437,9 @@ public final class DorisDDLStatementVisitor extends 
DorisStatementVisitor implem
     
     @Override
     public ASTNode visitCreateFunction(final CreateFunctionContext ctx) {
-        DorisCreateFunctionStatement result = new 
DorisCreateFunctionStatement(getDatabaseType());
-        result.setFunctionName((FunctionNameSegment) 
visit(ctx.functionName()));
-        if (null != ctx.routineBody()) {
+        RoutineBodySegment routineBody = null == ctx.routineBody() ? null : 
(RoutineBodySegment) visit(ctx.routineBody());
+        DorisCreateFunctionStatement result = new 
DorisCreateFunctionStatement(getDatabaseType(), (FunctionNameSegment) 
visit(ctx.functionName()), routineBody, Collections.emptyList());
+        if (null != routineBody) {
             int paramIndex = 0;
             for (int i = 0; i < ctx.dataType().size(); i++) {
                 DataTypeSegment dataType = (DataTypeSegment) 
visit(ctx.dataType(i));
@@ -1451,7 +1451,6 @@ public final class DorisDDLStatementVisitor extends 
DorisStatementVisitor implem
                     paramIndex++;
                 }
             }
-            result.setRoutineBody((RoutineBodySegment) 
visit(ctx.routineBody()));
         } else {
             if (null != ctx.GLOBAL()) {
                 result.setGlobal(true);
diff --git 
a/parser/sql/engine/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/engine/firebird/visitor/statement/type/FirebirdDDLStatementVisitor.java
 
b/parser/sql/engine/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/engine/firebird/visitor/statement/type/FirebirdDDLStatementVisitor.java
index 49743463be0..c7cdde99624 100644
--- 
a/parser/sql/engine/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/engine/firebird/visitor/statement/type/FirebirdDDLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/engine/firebird/visitor/statement/type/FirebirdDDLStatementVisitor.java
@@ -259,7 +259,7 @@ public final class FirebirdDDLStatementVisitor extends 
FirebirdStatementVisitor
     
     @Override
     public ASTNode visitCreateFunction(final CreateFunctionContext ctx) {
-        return new CreateFunctionStatement(getDatabaseType());
+        return new CreateFunctionStatement(getDatabaseType(), null, null, 
Collections.emptyList());
     }
     
     @Override
diff --git 
a/parser/sql/engine/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/engine/hive/visitor/statement/type/HiveDDLStatementVisitor.java
 
b/parser/sql/engine/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/engine/hive/visitor/statement/type/HiveDDLStatementVisitor.java
index 8c74bb97586..87ecb79631b 100644
--- 
a/parser/sql/engine/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/engine/hive/visitor/statement/type/HiveDDLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/engine/hive/visitor/statement/type/HiveDDLStatementVisitor.java
@@ -414,7 +414,7 @@ public final class HiveDDLStatementVisitor extends 
HiveStatementVisitor implemen
     
     @Override
     public ASTNode visitCreateFunction(final CreateFunctionContext ctx) {
-        return new CreateFunctionStatement(getDatabaseType());
+        return new CreateFunctionStatement(getDatabaseType(), null, null, 
Collections.emptyList());
     }
     
     @Override
diff --git 
a/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
 
b/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
index 9ac4f189b28..a536d30b987 100644
--- 
a/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
@@ -792,10 +792,7 @@ public final class MySQLDDLStatementVisitor extends 
MySQLStatementVisitor implem
     
     @Override
     public ASTNode visitCreateFunction(final CreateFunctionContext ctx) {
-        CreateFunctionStatement result = new 
CreateFunctionStatement(getDatabaseType());
-        result.setFunctionName((FunctionNameSegment) 
visit(ctx.functionName()));
-        result.setRoutineBody((RoutineBodySegment) visit(ctx.routineBody()));
-        return result;
+        return new CreateFunctionStatement(getDatabaseType(), 
(FunctionNameSegment) visit(ctx.functionName()), (RoutineBodySegment) 
visit(ctx.routineBody()), Collections.emptyList());
     }
     
     @SuppressWarnings("unchecked")
diff --git 
a/parser/sql/engine/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java
 
b/parser/sql/engine/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java
index dba99c8c10e..aeaae3a78f7 100644
--- 
a/parser/sql/engine/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java
@@ -650,7 +650,7 @@ public final class OpenGaussDDLStatementVisitor extends 
OpenGaussStatementVisito
     
     @Override
     public ASTNode visitCreateFunction(final CreateFunctionContext ctx) {
-        return new CreateFunctionStatement(getDatabaseType());
+        return new CreateFunctionStatement(getDatabaseType(), null, null, 
Collections.emptyList());
     }
     
     @Override
diff --git 
a/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
 
b/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
index 8f10fa7de31..f5bbd661bae 100644
--- 
a/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
@@ -1075,10 +1075,8 @@ public final class OracleDDLStatementVisitor extends 
OracleStatementVisitor impl
         
getSqlStatementsInPlsql().sort(Comparator.comparingInt(SQLStatementSegment::getStartIndex));
         
getProcedureCallNames().sort(Comparator.comparingInt(ProcedureCallNameSegment::getStartIndex));
         
getDynamicSqlStatementExpressions().sort(Comparator.comparingInt(ExpressionSegment::getStartIndex));
-        OracleCreateFunctionStatement result = new 
OracleCreateFunctionStatement(getDatabaseType(), getSqlStatementsInPlsql(), 
getProcedureCallNames());
-        result.setFunctionName(visitFunctionName(ctx.plsqlFunctionSource()));
-        
result.getDynamicSqlStatementExpressions().addAll(getDynamicSqlStatementExpressions());
-        return result;
+        return new OracleCreateFunctionStatement(
+                getDatabaseType(), getSqlStatementsInPlsql(), 
getProcedureCallNames(), visitFunctionName(ctx.plsqlFunctionSource()), null, 
getDynamicSqlStatementExpressions());
     }
     
     private FunctionNameSegment visitFunctionName(final 
PlsqlFunctionSourceContext ctx) {
diff --git 
a/parser/sql/engine/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/engine/postgresql/visitor/statement/type/PostgreSQLDDLStatementVisitor.java
 
b/parser/sql/engine/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/engine/postgresql/visitor/statement/type/PostgreSQLDDLStatementVisitor.java
index 14ab4df7391..768b864623c 100644
--- 
a/parser/sql/engine/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/engine/postgresql/visitor/statement/type/PostgreSQLDDLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/engine/postgresql/visitor/statement/type/PostgreSQLDDLStatementVisitor.java
@@ -792,7 +792,7 @@ public final class PostgreSQLDDLStatementVisitor extends 
PostgreSQLStatementVisi
     
     @Override
     public ASTNode visitCreateFunction(final CreateFunctionContext ctx) {
-        return new CreateFunctionStatement(getDatabaseType());
+        return new CreateFunctionStatement(getDatabaseType(), null, null, 
Collections.emptyList());
     }
     
     @Override
diff --git 
a/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/type/SQLServerDDLStatementVisitor.java
 
b/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/type/SQLServerDDLStatementVisitor.java
index 5c92133b987..a9137d08bd2 100644
--- 
a/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/type/SQLServerDDLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/type/SQLServerDDLStatementVisitor.java
@@ -375,7 +375,7 @@ public final class SQLServerDDLStatementVisitor extends 
SQLServerStatementVisito
     
     @Override
     public ASTNode visitCreateFunction(final CreateFunctionContext ctx) {
-        return new CreateFunctionStatement(getDatabaseType());
+        return new CreateFunctionStatement(getDatabaseType(), null, null, 
Collections.emptyList());
     }
     
     @Override
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/function/CreateFunctionStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/function/CreateFunctionStatement.java
index db648b1c164..b548504574a 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/function/CreateFunctionStatement.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/function/CreateFunctionStatement.java
@@ -18,7 +18,6 @@
 package 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.function;
 
 import lombok.Getter;
-import lombok.Setter;
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import 
org.apache.shardingsphere.sql.parser.statement.core.extractor.TableExtractor;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.routine.FunctionNameSegment;
@@ -28,7 +27,6 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.S
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.DDLStatement;
 
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
@@ -37,19 +35,23 @@ import java.util.Optional;
  * Create function statement.
  */
 @Getter
-@Setter
 public class CreateFunctionStatement extends DDLStatement {
     
-    private FunctionNameSegment functionName;
+    private final FunctionNameSegment functionName;
     
-    private RoutineBodySegment routineBody;
+    private final RoutineBodySegment routineBody;
     
-    private final List<ExpressionSegment> dynamicSqlStatementExpressions = new 
ArrayList<>();
+    private final List<ExpressionSegment> dynamicSqlStatementExpressions;
     
-    private SQLStatementAttributes attributes;
+    private final SQLStatementAttributes attributes;
     
-    public CreateFunctionStatement(final DatabaseType databaseType) {
+    public CreateFunctionStatement(final DatabaseType databaseType,
+                                   final FunctionNameSegment functionName, 
final RoutineBodySegment routineBody, final List<ExpressionSegment> 
dynamicSqlStatementExpressions) {
         super(databaseType);
+        this.functionName = functionName;
+        this.routineBody = routineBody;
+        this.dynamicSqlStatementExpressions = dynamicSqlStatementExpressions;
+        attributes = new SQLStatementAttributes(new 
TableSQLStatementAttribute(null == routineBody ? Collections.emptyList() : new 
TableExtractor().extractExistTableFromRoutineBody(routineBody)));
     }
     
     /**
@@ -72,7 +74,5 @@ public class CreateFunctionStatement extends DDLStatement {
     
     @Override
     public void buildAttributes() {
-        attributes = new SQLStatementAttributes(
-                new TableSQLStatementAttribute(getRoutineBody().map(optional 
-> new 
TableExtractor().extractExistTableFromRoutineBody(optional)).orElseGet(Collections::emptyList)));
     }
 }
diff --git 
a/parser/sql/statement/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/ddl/DorisCreateFunctionStatement.java
 
b/parser/sql/statement/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/ddl/DorisCreateFunctionStatement.java
index 966e548be1f..50c15023102 100644
--- 
a/parser/sql/statement/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/ddl/DorisCreateFunctionStatement.java
+++ 
b/parser/sql/statement/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/ddl/DorisCreateFunctionStatement.java
@@ -20,6 +20,8 @@ package 
org.apache.shardingsphere.sql.parser.statement.doris.ddl;
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.routine.FunctionNameSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.routine.RoutineBodySegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DataTypeSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.function.CreateFunctionStatement;
@@ -55,8 +57,9 @@ public final class DorisCreateFunctionStatement extends 
CreateFunctionStatement
     
     private final Map<String, String> properties = new LinkedHashMap<>();
     
-    public DorisCreateFunctionStatement(final DatabaseType databaseType) {
-        super(databaseType);
+    public DorisCreateFunctionStatement(final DatabaseType databaseType,
+                                        final FunctionNameSegment 
functionName, final RoutineBodySegment routineBody, final 
List<ExpressionSegment> dynamicSqlStatementExpressions) {
+        super(databaseType, functionName, routineBody, 
dynamicSqlStatementExpressions);
     }
     
     /**
diff --git 
a/parser/sql/statement/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/statement/oracle/ddl/function/OracleCreateFunctionStatement.java
 
b/parser/sql/statement/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/statement/oracle/ddl/function/OracleCreateFunctionStatement.java
index 115c093db28..227be85b539 100644
--- 
a/parser/sql/statement/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/statement/oracle/ddl/function/OracleCreateFunctionStatement.java
+++ 
b/parser/sql/statement/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/statement/oracle/ddl/function/OracleCreateFunctionStatement.java
@@ -19,6 +19,9 @@ package 
org.apache.shardingsphere.sql.parser.statement.oracle.ddl.function;
 
 import lombok.Getter;
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.routine.FunctionNameSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.routine.RoutineBodySegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.procedure.ProcedureCallNameSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.procedure.SQLStatementSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.function.CreateFunctionStatement;
@@ -35,8 +38,9 @@ public final class OracleCreateFunctionStatement extends 
CreateFunctionStatement
     
     private final List<ProcedureCallNameSegment> procedureCallNames;
     
-    public OracleCreateFunctionStatement(final DatabaseType databaseType, 
final List<SQLStatementSegment> sqlStatements, final 
List<ProcedureCallNameSegment> procedureCallNames) {
-        super(databaseType);
+    public OracleCreateFunctionStatement(final DatabaseType databaseType, 
final List<SQLStatementSegment> sqlStatements, final 
List<ProcedureCallNameSegment> procedureCallNames,
+                                         final FunctionNameSegment 
functionName, final RoutineBodySegment routineBody, final 
List<ExpressionSegment> dynamicSqlStatementExpressions) {
+        super(databaseType, functionName, routineBody, 
dynamicSqlStatementExpressions);
         this.sqlStatements = sqlStatements;
         this.procedureCallNames = procedureCallNames;
     }

Reply via email to