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 e1f7f62c224 Refactor DMLStatement (#35583)
e1f7f62c224 is described below

commit e1f7f62c22486b86afec1366257cb92987b37c18
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Jun 4 14:32:51 2025 +0800

    Refactor DMLStatement (#35583)
    
    * Refactor DMLStatement
    
    * Refactor DMLStatement
    
    * Refactor DMLStatement
    
    * Refactor DMLStatement
---
 .../engine/statement/dml/CopyStatementBinder.java  | 24 ++++++-----
 .../statement/dml/LoadDataStatementBinder.java     | 11 ++----
 .../statement/dml/LoadXMLStatementBinder.java      | 11 ++----
 .../statement/type/DorisDMLStatementVisitor.java   | 17 ++------
 .../statement/type/MySQLDMLStatementVisitor.java   | 17 ++------
 .../type/OpenGaussDMLStatementVisitor.java         | 12 +++---
 .../type/PostgreSQLDMLStatementVisitor.java        | 43 +++++---------------
 .../core/statement/dml/CallStatement.java          | 11 +++---
 .../core/statement/dml/CopyStatement.java          | 32 +++++----------
 .../statement/core/statement/dml/DoStatement.java  |  7 ++--
 .../core/statement/dml/HandlerStatement.java       |  2 +-
 .../core/statement/dml/ImportStatement.java        |  2 +-
 .../core/statement/dml/LoadDataStatement.java      |  8 ++--
 .../core/statement/dml/LoadXMLStatement.java       |  8 ++--
 .../core/statement/dml/TableStatement.java         | 26 ------------
 .../postgresql/dml/PostgreSQLCopyStatement.java    | 46 ----------------------
 .../prepare/MySQLComStmtPrepareCheckerTest.java    | 11 +++---
 17 files changed, 79 insertions(+), 209 deletions(-)

diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/CopyStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/CopyStatementBinder.java
index 6f69d87d4c1..3d7f6c11941 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/CopyStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/CopyStatementBinder.java
@@ -20,7 +20,6 @@ package 
org.apache.shardingsphere.infra.binder.engine.statement.dml;
 import com.cedarsoftware.util.CaseInsensitiveMap.CaseInsensitiveString;
 import com.google.common.collect.LinkedHashMultimap;
 import com.google.common.collect.Multimap;
-import lombok.SneakyThrows;
 import org.apache.shardingsphere.infra.binder.engine.segment.SegmentType;
 import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.expression.type.ColumnSegmentBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.from.context.TableSegmentBinderContext;
@@ -28,8 +27,15 @@ import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.from.type.Simpl
 import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.prepare.PrepareStatementQuerySegmentBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinderContext;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.prepare.PrepareStatementQuerySegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.CopyStatement;
 
+import java.util.Collection;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
 /**
  * Copy statement binder.
  */
@@ -37,17 +43,17 @@ public final class CopyStatementBinder implements 
SQLStatementBinder<CopyStateme
     
     @Override
     public CopyStatement bind(final CopyStatement sqlStatement, final 
SQLStatementBinderContext binderContext) {
-        CopyStatement result = copy(sqlStatement);
         Multimap<CaseInsensitiveString, TableSegmentBinderContext> 
tableBinderContexts = LinkedHashMultimap.create();
-        sqlStatement.getTable().ifPresent(optional -> 
result.setTable(SimpleTableSegmentBinder.bind(optional, binderContext, 
tableBinderContexts)));
-        sqlStatement.getPrepareStatementQuery().ifPresent(optional -> 
result.setPrepareStatementQuery(PrepareStatementQuerySegmentBinder.bind(optional,
 binderContext)));
-        sqlStatement.getColumns().forEach(each -> 
result.getColumns().add(ColumnSegmentBinder.bind(each, SegmentType.COPY, 
binderContext, tableBinderContexts, LinkedHashMultimap.create())));
-        return result;
+        Optional<SimpleTableSegment> boundTable = 
sqlStatement.getTable().map(optional -> SimpleTableSegmentBinder.bind(optional, 
binderContext, tableBinderContexts));
+        Collection<ColumnSegment> boundColumns = 
sqlStatement.getColumns().stream()
+                .map(each -> ColumnSegmentBinder.bind(each, SegmentType.COPY, 
binderContext, tableBinderContexts, 
LinkedHashMultimap.create())).collect(Collectors.toList());
+        Optional<PrepareStatementQuerySegment> boundPrepareStatementQuery = 
sqlStatement.getPrepareStatementQuery().map(optional -> 
PrepareStatementQuerySegmentBinder.bind(optional, binderContext));
+        return copy(sqlStatement, boundTable.orElse(null), boundColumns, 
boundPrepareStatementQuery.orElse(null));
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
-    private CopyStatement copy(final CopyStatement sqlStatement) {
-        CopyStatement result = 
sqlStatement.getClass().getDeclaredConstructor().newInstance();
+    private CopyStatement copy(final CopyStatement sqlStatement,
+                               final SimpleTableSegment boundTable, final 
Collection<ColumnSegment> boundColumns, final PrepareStatementQuerySegment 
boundPrepareStatementQuery) {
+        CopyStatement result = new CopyStatement(boundTable, boundColumns, 
boundPrepareStatementQuery);
         
result.addParameterMarkerSegments(sqlStatement.getParameterMarkerSegments());
         result.getCommentSegments().addAll(sqlStatement.getCommentSegments());
         result.getVariableNames().addAll(sqlStatement.getVariableNames());
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/LoadDataStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/LoadDataStatementBinder.java
index 2c69c1281b0..aaac5207bfa 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/LoadDataStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/LoadDataStatementBinder.java
@@ -20,11 +20,11 @@ package 
org.apache.shardingsphere.infra.binder.engine.statement.dml;
 import com.cedarsoftware.util.CaseInsensitiveMap;
 import com.google.common.collect.LinkedHashMultimap;
 import com.google.common.collect.Multimap;
-import lombok.SneakyThrows;
 import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.from.context.TableSegmentBinderContext;
 import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.from.type.SimpleTableSegmentBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinderContext;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.LoadDataStatement;
 
 /**
@@ -34,15 +34,12 @@ public final class LoadDataStatementBinder implements 
SQLStatementBinder<LoadDat
     
     @Override
     public LoadDataStatement bind(final LoadDataStatement sqlStatement, final 
SQLStatementBinderContext binderContext) {
-        LoadDataStatement result = copy(sqlStatement);
         Multimap<CaseInsensitiveMap.CaseInsensitiveString, 
TableSegmentBinderContext> tableBinderContexts = LinkedHashMultimap.create();
-        
result.setTableSegment(SimpleTableSegmentBinder.bind(sqlStatement.getTableSegment(),
 binderContext, tableBinderContexts));
-        return result;
+        return copy(sqlStatement, 
SimpleTableSegmentBinder.bind(sqlStatement.getTableSegment(), binderContext, 
tableBinderContexts));
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
-    private static LoadDataStatement copy(final LoadDataStatement 
sqlStatement) {
-        LoadDataStatement result = 
sqlStatement.getClass().getDeclaredConstructor().newInstance();
+    private LoadDataStatement copy(final LoadDataStatement sqlStatement, final 
SimpleTableSegment boundTableSegment) {
+        LoadDataStatement result = new LoadDataStatement(boundTableSegment);
         
result.addParameterMarkerSegments(sqlStatement.getParameterMarkerSegments());
         result.getCommentSegments().addAll(sqlStatement.getCommentSegments());
         result.getVariableNames().addAll(sqlStatement.getVariableNames());
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/LoadXMLStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/LoadXMLStatementBinder.java
index 2e70c0f21a6..73a3a7cf80e 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/LoadXMLStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/LoadXMLStatementBinder.java
@@ -20,11 +20,11 @@ package 
org.apache.shardingsphere.infra.binder.engine.statement.dml;
 import com.cedarsoftware.util.CaseInsensitiveMap;
 import com.google.common.collect.LinkedHashMultimap;
 import com.google.common.collect.Multimap;
-import lombok.SneakyThrows;
 import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.from.context.TableSegmentBinderContext;
 import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.from.type.SimpleTableSegmentBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinderContext;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.LoadXMLStatement;
 
 /**
@@ -34,15 +34,12 @@ public final class LoadXMLStatementBinder implements 
SQLStatementBinder<LoadXMLS
     
     @Override
     public LoadXMLStatement bind(final LoadXMLStatement sqlStatement, final 
SQLStatementBinderContext binderContext) {
-        LoadXMLStatement result = copy(sqlStatement);
         Multimap<CaseInsensitiveMap.CaseInsensitiveString, 
TableSegmentBinderContext> tableBinderContexts = LinkedHashMultimap.create();
-        
result.setTableSegment(SimpleTableSegmentBinder.bind(sqlStatement.getTableSegment(),
 binderContext, tableBinderContexts));
-        return result;
+        return copy(sqlStatement, 
SimpleTableSegmentBinder.bind(sqlStatement.getTableSegment(), binderContext, 
tableBinderContexts));
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
-    private static LoadXMLStatement copy(final LoadXMLStatement sqlStatement) {
-        LoadXMLStatement result = 
sqlStatement.getClass().getDeclaredConstructor().newInstance();
+    private LoadXMLStatement copy(final LoadXMLStatement sqlStatement, final 
SimpleTableSegment boundTableSegment) {
+        LoadXMLStatement result = new LoadXMLStatement(boundTableSegment);
         
result.addParameterMarkerSegments(sqlStatement.getParameterMarkerSegments());
         result.getCommentSegments().addAll(sqlStatement.getCommentSegments());
         result.getVariableNames().addAll(sqlStatement.getVariableNames());
diff --git 
a/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDMLStatementVisitor.java
 
b/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDMLStatementVisitor.java
index b760aab1fd1..d668a3973f3 100644
--- 
a/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDMLStatementVisitor.java
+++ 
b/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDMLStatementVisitor.java
@@ -61,19 +61,14 @@ public final class DorisDMLStatementVisitor extends 
DorisStatementVisitor implem
     
     @Override
     public ASTNode visitCall(final CallContext ctx) {
-        CallStatement result = new CallStatement();
         String procedureName = null == ctx.owner() ? 
ctx.identifier().getText() : ctx.owner().getText() + "." + 
ctx.identifier().getText();
-        result.setProcedureName(procedureName);
         List<ExpressionSegment> params = ctx.expr().stream().map(each -> 
(ExpressionSegment) visit(each)).collect(Collectors.toList());
-        result.getParameters().addAll(params);
-        return result;
+        return new CallStatement(procedureName, params);
     }
     
     @Override
     public ASTNode visitDoStatement(final DoStatementContext ctx) {
-        DoStatement result = new DoStatement();
-        result.getParameters().addAll(ctx.expr().stream().map(each -> 
(ExpressionSegment) visit(each)).collect(Collectors.toList()));
-        return result;
+        return new DoStatement(ctx.expr().stream().map(each -> 
(ExpressionSegment) visit(each)).collect(Collectors.toList()));
     }
     
     @Override
@@ -93,16 +88,12 @@ public final class DorisDMLStatementVisitor extends 
DorisStatementVisitor implem
     
     @Override
     public ASTNode visitLoadDataStatement(final LoadDataStatementContext ctx) {
-        LoadDataStatement result = new LoadDataStatement();
-        result.setTableSegment((SimpleTableSegment) visit(ctx.tableName()));
-        return result;
+        return new LoadDataStatement((SimpleTableSegment) 
visit(ctx.tableName()));
     }
     
     @Override
     public ASTNode visitLoadXmlStatement(final LoadXmlStatementContext ctx) {
-        LoadXMLStatement result = new LoadXMLStatement();
-        result.setTableSegment((SimpleTableSegment) visit(ctx.tableName()));
-        return result;
+        return new LoadXMLStatement((SimpleTableSegment) 
visit(ctx.tableName()));
     }
     
     @Override
diff --git 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDMLStatementVisitor.java
 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDMLStatementVisitor.java
index 12dd5b93081..99032dc441c 100644
--- 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDMLStatementVisitor.java
+++ 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDMLStatementVisitor.java
@@ -67,19 +67,14 @@ public final class MySQLDMLStatementVisitor extends 
MySQLStatementVisitor implem
     
     @Override
     public ASTNode visitCall(final CallContext ctx) {
-        CallStatement result = new CallStatement();
         String procedureName = null == ctx.owner() ? 
ctx.identifier().getText() : ctx.owner().getText() + "." + 
ctx.identifier().getText();
-        result.setProcedureName(procedureName);
         List<ExpressionSegment> params = ctx.expr().stream().map(each -> 
(ExpressionSegment) visit(each)).collect(Collectors.toList());
-        result.getParameters().addAll(params);
-        return result;
+        return new CallStatement(procedureName, params);
     }
     
     @Override
     public ASTNode visitDoStatement(final DoStatementContext ctx) {
-        DoStatement result = new DoStatement();
-        result.getParameters().addAll(ctx.expr().stream().map(each -> 
(ExpressionSegment) visit(each)).collect(Collectors.toList()));
-        return result;
+        return new DoStatement(ctx.expr().stream().map(each -> 
(ExpressionSegment) visit(each)).collect(Collectors.toList()));
     }
     
     @Override
@@ -99,16 +94,12 @@ public final class MySQLDMLStatementVisitor extends 
MySQLStatementVisitor implem
     
     @Override
     public ASTNode visitLoadDataStatement(final LoadDataStatementContext ctx) {
-        LoadDataStatement result = new LoadDataStatement();
-        result.setTableSegment((SimpleTableSegment) visit(ctx.tableName()));
-        return result;
+        return new LoadDataStatement((SimpleTableSegment) 
visit(ctx.tableName()));
     }
     
     @Override
     public ASTNode visitLoadXmlStatement(final LoadXmlStatementContext ctx) {
-        LoadXMLStatement result = new LoadXMLStatement();
-        result.setTableSegment((SimpleTableSegment) visit(ctx.tableName()));
-        return result;
+        return new LoadXMLStatement((SimpleTableSegment) 
visit(ctx.tableName()));
     }
     
     @Override
diff --git 
a/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDMLStatementVisitor.java
 
b/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDMLStatementVisitor.java
index 546b4e77f0b..97c67aaae42 100644
--- 
a/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDMLStatementVisitor.java
+++ 
b/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDMLStatementVisitor.java
@@ -31,6 +31,8 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.CallSta
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.CopyStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.DoStatement;
 
+import java.util.Collections;
+
 /**
  * DML statement visitor for openGauss.
  */
@@ -38,21 +40,17 @@ public final class OpenGaussDMLStatementVisitor extends 
OpenGaussStatementVisito
     
     @Override
     public ASTNode visitCall(final CallContext ctx) {
-        return new CallStatement();
+        return new CallStatement(null, Collections.emptyList());
     }
     
     @Override
     public ASTNode visitDoStatement(final DoStatementContext ctx) {
-        return new DoStatement();
+        return new DoStatement(Collections.emptyList());
     }
     
     @Override
     public ASTNode visitCopy(final CopyContext ctx) {
-        CopyStatement result = new CopyStatement();
-        if (null != ctx.qualifiedName()) {
-            result.setTable((SimpleTableSegment) visit(ctx.qualifiedName()));
-        }
-        return result;
+        return new CopyStatement(null == ctx.qualifiedName() ? null : 
(SimpleTableSegment) visit(ctx.qualifiedName()), Collections.emptyList(), null);
     }
     
     @Override
diff --git 
a/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDMLStatementVisitor.java
 
b/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDMLStatementVisitor.java
index 2b0d2ba099c..5f742c88c16 100644
--- 
a/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDMLStatementVisitor.java
+++ 
b/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDMLStatementVisitor.java
@@ -38,6 +38,7 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.Proj
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.prepare.PrepareStatementQuerySegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.CallStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.CopyStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.DeleteStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.DoStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.InsertStatement;
@@ -45,7 +46,6 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.SelectS
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.UpdateStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.collection.CollectionValue;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
-import 
org.apache.shardingsphere.sql.parser.statement.postgresql.dml.PostgreSQLCopyStatement;
 
 import java.util.Collections;
 import java.util.List;
@@ -58,14 +58,11 @@ public final class PostgreSQLDMLStatementVisitor extends 
PostgreSQLStatementVisi
     
     @Override
     public ASTNode visitCall(final CallContext ctx) {
-        CallStatement result = new CallStatement();
         String procedureName = ((IdentifierValue) 
visit(ctx.identifier())).getValue();
-        result.setProcedureName(procedureName);
         List<ExpressionSegment> params = null == ctx.callArguments()
                 ? Collections.emptyList()
                 : ctx.callArguments().callArgument().stream().map(each -> 
(ExpressionSegment) visit(each)).collect(Collectors.toList());
-        result.getParameters().addAll(params);
-        return result;
+        return new CallStatement(procedureName, params);
     }
     
     @Override
@@ -79,7 +76,7 @@ public final class PostgreSQLDMLStatementVisitor extends 
PostgreSQLStatementVisi
     
     @Override
     public ASTNode visitDoStatement(final DoStatementContext ctx) {
-        return new DoStatement();
+        return new DoStatement(Collections.emptyList());
     }
     
     @Override
@@ -95,17 +92,9 @@ public final class PostgreSQLDMLStatementVisitor extends 
PostgreSQLStatementVisi
     
     @Override
     public ASTNode visitCopyWithTableOrQuery(final CopyWithTableOrQueryContext 
ctx) {
-        PostgreSQLCopyStatement result = new PostgreSQLCopyStatement();
-        if (null != ctx.qualifiedName()) {
-            result.setTable((SimpleTableSegment) visit(ctx.qualifiedName()));
-            if (null != ctx.columnNames()) {
-                result.getColumns().addAll(((CollectionValue<ColumnSegment>) 
visit(ctx.columnNames())).getValue());
-            }
-        }
-        if (null != ctx.preparableStmt()) {
-            
result.setPrepareStatementQuery(extractPrepareStatementQuerySegmentFromPreparableStmt(ctx.preparableStmt()));
-        }
-        return result;
+        return new CopyStatement(null == ctx.qualifiedName() ? null : 
(SimpleTableSegment) visit(ctx.qualifiedName()),
+                null == ctx.columnNames() ? Collections.emptyList() : 
((CollectionValue<ColumnSegment>) visit(ctx.columnNames())).getValue(),
+                null == ctx.preparableStmt() ? null : 
extractPrepareStatementQuerySegmentFromPreparableStmt(ctx.preparableStmt()));
     }
     
     private PrepareStatementQuerySegment 
extractPrepareStatementQuerySegmentFromPreparableStmt(final 
PreparableStmtContext ctx) {
@@ -124,26 +113,14 @@ public final class PostgreSQLDMLStatementVisitor extends 
PostgreSQLStatementVisi
     
     @Override
     public ASTNode visitCopyWithTableOrQueryBinaryCsv(final 
CopyWithTableOrQueryBinaryCsvContext ctx) {
-        PostgreSQLCopyStatement result = new PostgreSQLCopyStatement();
-        if (null != ctx.qualifiedName()) {
-            result.setTable((SimpleTableSegment) visit(ctx.qualifiedName()));
-            if (null != ctx.columnNames()) {
-                result.getColumns().addAll(((CollectionValue<ColumnSegment>) 
visit(ctx.columnNames())).getValue());
-            }
-        }
-        if (null != ctx.preparableStmt()) {
-            
result.setPrepareStatementQuery(extractPrepareStatementQuerySegmentFromPreparableStmt(ctx.preparableStmt()));
-        }
-        return result;
+        return new CopyStatement(null == ctx.qualifiedName() ? null : 
(SimpleTableSegment) visit(ctx.qualifiedName()),
+                null == ctx.columnNames() ? Collections.emptyList() : 
((CollectionValue<ColumnSegment>) visit(ctx.columnNames())).getValue(),
+                null == ctx.preparableStmt() ? null : 
extractPrepareStatementQuerySegmentFromPreparableStmt(ctx.preparableStmt()));
     }
     
     @Override
     public ASTNode visitCopyWithTableBinary(final CopyWithTableBinaryContext 
ctx) {
-        PostgreSQLCopyStatement result = new PostgreSQLCopyStatement();
-        if (null != ctx.qualifiedName()) {
-            result.setTable((SimpleTableSegment) visit(ctx.qualifiedName()));
-        }
-        return result;
+        return new CopyStatement(null == ctx.qualifiedName() ? null : 
(SimpleTableSegment) visit(ctx.qualifiedName()), Collections.emptyList(), null);
     }
     
     @Override
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/CallStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/CallStatement.java
index 2238248529f..99d1fad4feb 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/CallStatement.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/CallStatement.java
@@ -18,21 +18,20 @@
 package org.apache.shardingsphere.sql.parser.statement.core.statement.dml;
 
 import lombok.Getter;
-import lombok.Setter;
+import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
 
-import java.util.ArrayList;
 import java.util.List;
 
 /**
  * Call statement.
  */
+@RequiredArgsConstructor
 @Getter
-@Setter
-public class CallStatement extends AbstractSQLStatement implements 
DMLStatement {
+public final class CallStatement extends AbstractSQLStatement implements 
DMLStatement {
     
-    private String procedureName;
+    private final String procedureName;
     
-    private final List<ExpressionSegment> parameters = new ArrayList<>();
+    private final List<ExpressionSegment> parameters;
 }
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/CopyStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/CopyStatement.java
index 968d33b4dcb..4ecc3a25229 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/CopyStatement.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/CopyStatement.java
@@ -18,24 +18,27 @@
 package org.apache.shardingsphere.sql.parser.statement.core.statement.dml;
 
 import lombok.Getter;
-import lombok.Setter;
+import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.prepare.PrepareStatementQuerySegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
 
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Optional;
 
 /**
  * Copy statement.
  */
+@RequiredArgsConstructor
 @Getter
-@Setter
-public class CopyStatement extends AbstractSQLStatement implements 
DMLStatement {
+public final class CopyStatement extends AbstractSQLStatement implements 
DMLStatement {
     
-    private SimpleTableSegment table;
+    private final SimpleTableSegment table;
+    
+    private final Collection<ColumnSegment> columns;
+    
+    private final PrepareStatementQuerySegment prepareStatementQuery;
     
     /**
      * Get table.
@@ -46,29 +49,12 @@ public class CopyStatement extends AbstractSQLStatement 
implements DMLStatement
         return Optional.ofNullable(table);
     }
     
-    /**
-     * Set prepare statement query segment.
-     *
-     * @param prepareStatementQuery prepare statement query segment
-     */
-    public void setPrepareStatementQuery(final PrepareStatementQuerySegment 
prepareStatementQuery) {
-    }
-    
     /**
      * Get prepare statement query segment.
      *
      * @return prepare statement query segment
      */
     public Optional<PrepareStatementQuerySegment> getPrepareStatementQuery() {
-        return Optional.empty();
-    }
-    
-    /**
-     * Get columns.
-     *
-     * @return columns
-     */
-    public Collection<ColumnSegment> getColumns() {
-        return Collections.emptyList();
+        return Optional.ofNullable(prepareStatementQuery);
     }
 }
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/DoStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/DoStatement.java
index c70df602540..483a4402ab5 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/DoStatement.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/DoStatement.java
@@ -18,17 +18,18 @@
 package org.apache.shardingsphere.sql.parser.statement.core.statement.dml;
 
 import lombok.Getter;
+import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
 
-import java.util.ArrayList;
 import java.util.List;
 
 /**
  * Do statement.
  */
+@RequiredArgsConstructor
 @Getter
-public class DoStatement extends AbstractSQLStatement implements DMLStatement {
+public final class DoStatement extends AbstractSQLStatement implements 
DMLStatement {
     
-    private final List<ExpressionSegment> parameters = new ArrayList<>();
+    private final List<ExpressionSegment> parameters;
 }
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/HandlerStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/HandlerStatement.java
index d7cb26a1d8e..dfc8e632fd0 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/HandlerStatement.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/HandlerStatement.java
@@ -22,5 +22,5 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQL
 /**
  * Handler statement.
  */
-public class HandlerStatement extends AbstractSQLStatement implements 
DMLStatement {
+public final class HandlerStatement extends AbstractSQLStatement implements 
DMLStatement {
 }
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/ImportStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/ImportStatement.java
index 19eea9e5fdf..2fbd4b8907b 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/ImportStatement.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/ImportStatement.java
@@ -22,5 +22,5 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQL
 /**
  * Import statement.
  */
-public class ImportStatement extends AbstractSQLStatement implements 
DMLStatement {
+public final class ImportStatement extends AbstractSQLStatement implements 
DMLStatement {
 }
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadDataStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadDataStatement.java
index 46130080f77..b995547ff4c 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadDataStatement.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadDataStatement.java
@@ -18,16 +18,16 @@
 package org.apache.shardingsphere.sql.parser.statement.core.statement.dml;
 
 import lombok.Getter;
-import lombok.Setter;
+import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
 
 /**
  * Load data statement.
  */
+@RequiredArgsConstructor
 @Getter
-@Setter
-public class LoadDataStatement extends AbstractSQLStatement implements 
DMLStatement {
+public final class LoadDataStatement extends AbstractSQLStatement implements 
DMLStatement {
     
-    private SimpleTableSegment tableSegment;
+    private final SimpleTableSegment tableSegment;
 }
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadXMLStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadXMLStatement.java
index 80c8b8b8f69..72c24c89800 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadXMLStatement.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadXMLStatement.java
@@ -18,16 +18,16 @@
 package org.apache.shardingsphere.sql.parser.statement.core.statement.dml;
 
 import lombok.Getter;
-import lombok.Setter;
+import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
 
 /**
  * Load xml statement.
  */
-@Setter
+@RequiredArgsConstructor
 @Getter
-public class LoadXMLStatement extends AbstractSQLStatement implements 
DMLStatement {
+public final class LoadXMLStatement extends AbstractSQLStatement implements 
DMLStatement {
     
-    private SimpleTableSegment tableSegment;
+    private final SimpleTableSegment tableSegment;
 }
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/TableStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/TableStatement.java
deleted file mode 100644
index 8ac3b7e5e4a..00000000000
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/TableStatement.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.sql.parser.statement.core.statement.dml;
-
-import 
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
-
-/**
- * Table statement.
- */
-public abstract class TableStatement extends AbstractSQLStatement implements 
DMLStatement {
-}
diff --git 
a/parser/sql/statement/type/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/statement/postgresql/dml/PostgreSQLCopyStatement.java
 
b/parser/sql/statement/type/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/statement/postgresql/dml/PostgreSQLCopyStatement.java
deleted file mode 100644
index d3c653d1ee5..00000000000
--- 
a/parser/sql/statement/type/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/statement/postgresql/dml/PostgreSQLCopyStatement.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.sql.parser.statement.postgresql.dml;
-
-import lombok.Getter;
-import lombok.Setter;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.prepare.PrepareStatementQuerySegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.CopyStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.postgresql.PostgreSQLStatement;
-
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.Optional;
-
-/**
- * PostgreSQL copy statement.
- */
-@Getter
-@Setter
-public final class PostgreSQLCopyStatement extends CopyStatement implements 
PostgreSQLStatement {
-    
-    private final Collection<ColumnSegment> columns = new LinkedList<>();
-    
-    private PrepareStatementQuerySegment prepareStatementQuery;
-    
-    @Override
-    public Optional<PrepareStatementQuerySegment> getPrepareStatementQuery() {
-        return Optional.ofNullable(prepareStatementQuery);
-    }
-}
diff --git 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareCheckerTest.java
 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareCheckerTest.java
index b2a0e6069b3..ccfe80d5d7a 100644
--- 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareCheckerTest.java
+++ 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareCheckerTest.java
@@ -88,17 +88,16 @@ class MySQLComStmtPrepareCheckerTest {
         MySQLCreateTableStatement createTableStatement = new 
MySQLCreateTableStatement();
         Collection<SQLStatement> sqlStatements = Arrays.asList(
                 new MySQLAlterTableStatement(), new AlterUserStatement(), new 
AnalyzeTableStatement(Collections.emptyList()), new CacheIndexStatement(),
-                new CallStatement(), new ChangeMasterStatement(), new 
ChecksumTableStatement(Collections.emptyList()), new CommitStatement(), new 
MySQLCreateIndexStatement(),
-                new MySQLDropIndexStatement(), new CreateDatabaseStatement(), 
new DropDatabaseStatement(), createTableStatement,
+                new CallStatement(null, Collections.emptyList()), new 
ChangeMasterStatement(), new ChecksumTableStatement(Collections.emptyList()), 
new CommitStatement(),
+                new MySQLCreateIndexStatement(), new 
MySQLDropIndexStatement(), new CreateDatabaseStatement(), new 
DropDatabaseStatement(), createTableStatement,
                 new MySQLDropTableStatement(), new MySQLCreateUserStatement(), 
new RenameUserStatement(), new DropUserStatement(Collections.emptyList()),
-                new CreateViewStatement(), new MySQLDropViewStatement(), new 
MySQLDeleteStatement(), new DoStatement(), new 
FlushStatement(Collections.emptyList(), false),
+                new CreateViewStatement(), new MySQLDropViewStatement(), new 
MySQLDeleteStatement(), new DoStatement(Collections.emptyList()), new 
FlushStatement(Collections.emptyList(), false),
                 new MySQLGrantStatement(), new MySQLInsertStatement(), new 
InstallPluginStatement(null), new KillStatement(null, null),
                 new LoadIndexInfoStatement(Collections.emptyList()), new 
OptimizeTableStatement(null), new RenameTableStatement(), new 
RepairTableStatement(Collections.emptyList()),
                 new ResetStatement(Collections.emptyList()), new 
MySQLRevokeStatement(), new MySQLSelectStatement(), new 
SetStatement(Collections.emptyList()), new ShowWarningsStatement(null),
                 new ShowErrorsStatement(null), new 
ShowBinlogEventsStatement(null, null), new ShowCreateProcedureStatement(null), 
new ShowCreateFunctionStatement(null),
-                new ShowCreateEventStatement(null),
-                new ShowCreateTableStatement(null), new 
ShowCreateViewStatement(null), new ShowBinaryLogsStatement(), new 
ShowStatusStatement(null), new StartSlaveStatement(),
-                new StopSlaveStatement(), new TruncateStatement(), new 
UninstallPluginStatement(null), new MySQLUpdateStatement(),
+                new ShowCreateEventStatement(null), new 
ShowCreateTableStatement(null), new ShowCreateViewStatement(null), new 
ShowBinaryLogsStatement(), new ShowStatusStatement(null),
+                new StartSlaveStatement(), new StopSlaveStatement(), new 
TruncateStatement(), new UninstallPluginStatement(null), new 
MySQLUpdateStatement(),
                 new XABeginStatement("1"), new XAPrepareStatement("1"), new 
XACommitStatement("1"), new XARollbackStatement("1"), new XAEndStatement("1"), 
new XARecoveryStatement());
         for (SQLStatement each : sqlStatements) {
             assertTrue(MySQLComStmtPrepareChecker.isAllowedStatement(each));


Reply via email to