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 2e753b8e459 Add StatementCopyUtils (#35668)
2e753b8e459 is described below

commit 2e753b8e45933bcd27713f55cb828072d5c81a8a
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Jun 11 01:16:21 2025 +0800

    Add StatementCopyUtils (#35668)
    
    * Add StatementCopyUtils
    
    * Add StatementCopyUtils
    
    * Add StatementCopyUtils
---
 .../engine/statement/SQLStatementCopyUtils.java    | 33 ++++++++++++----------
 .../statement/dal/ExplainStatementBinder.java      |  9 ++----
 .../dal/OptimizeTableStatementBinder.java          |  5 ++--
 .../statement/dal/ShowColumnsStatementBinder.java  |  5 ++--
 .../dal/ShowCreateTableStatementBinder.java        |  5 ++--
 .../statement/dal/ShowIndexStatementBinder.java    |  5 ++--
 .../statement/dcl/DenyUserStatementBinder.java     |  5 ++--
 .../statement/ddl/AlterIndexStatementBinder.java   | 11 +++-----
 .../statement/ddl/AlterTableStatementBinder.java   | 11 +++-----
 .../statement/ddl/AlterViewStatementBinder.java    | 11 +++-----
 .../statement/ddl/CreateIndexStatementBinder.java  | 11 +++-----
 .../statement/ddl/CreateTableStatementBinder.java  |  5 ++--
 .../statement/ddl/CreateViewStatementBinder.java   | 11 +++-----
 .../statement/ddl/CursorStatementBinder.java       |  7 ++---
 .../statement/ddl/DropIndexStatementBinder.java    | 11 +++-----
 .../statement/ddl/DropTableStatementBinder.java    | 11 +++-----
 .../statement/ddl/DropViewStatementBinder.java     | 11 +++-----
 .../statement/ddl/RenameTableStatementBinder.java  |  5 ++--
 .../statement/ddl/TruncateStatementBinder.java     | 11 +++-----
 .../engine/statement/dml/CopyStatementBinder.java  |  5 ++--
 .../statement/dml/DeleteStatementBinder.java       |  5 ++--
 .../statement/dml/InsertStatementBinder.java       |  5 ++--
 .../statement/dml/LoadDataStatementBinder.java     |  5 ++--
 .../statement/dml/LoadXMLStatementBinder.java      |  5 ++--
 .../statement/dml/SelectStatementBinder.java       |  5 ++--
 .../statement/dml/UpdateStatementBinder.java       |  5 ++--
 .../core/statement/ddl/AlterIndexStatement.java    |  2 +-
 .../core/statement/ddl/AlterTableStatement.java    |  2 +-
 .../core/statement/ddl/AlterViewStatement.java     |  2 +-
 .../core/statement/ddl/CreateIndexStatement.java   |  2 +-
 .../core/statement/ddl/DropIndexStatement.java     |  2 +-
 .../core/statement/ddl/DropTableStatement.java     |  2 +-
 .../core/statement/ddl/DropViewStatement.java      |  2 +-
 33 files changed, 95 insertions(+), 137 deletions(-)

diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/DropViewStatement.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/SQLStatementCopyUtils.java
similarity index 51%
copy from 
parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/DropViewStatement.java
copy to 
infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/SQLStatementCopyUtils.java
index 49ca9fcb9dd..ad1484a7469 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/DropViewStatement.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/SQLStatementCopyUtils.java
@@ -15,24 +15,27 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sql.parser.statement.core.statement.ddl;
+package org.apache.shardingsphere.infra.binder.engine.statement;
 
-import lombok.Getter;
-import lombok.Setter;
-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.LinkedList;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
 
 /**
- * Drop view statement.
+ * SQL statement copy utils.
  */
-@Getter
-@Setter
-public class DropViewStatement extends AbstractSQLStatement implements 
DDLStatement {
-    
-    private final Collection<SimpleTableSegment> views = new LinkedList<>();
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class SQLStatementCopyUtils {
     
-    private boolean ifExists;
+    /**
+     * Copy attributes of SQL statement.
+     *
+     * @param originalSQLStatement original SQL statement
+     * @param boundSQLStatement bound SQL statement
+     */
+    public static void copyAttributes(final SQLStatement originalSQLStatement, 
final SQLStatement boundSQLStatement) {
+        
boundSQLStatement.addParameterMarkers(originalSQLStatement.getParameterMarkers());
+        
boundSQLStatement.getVariableNames().addAll(originalSQLStatement.getVariableNames());
+        
boundSQLStatement.getComments().addAll(originalSQLStatement.getComments());
+    }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dal/ExplainStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dal/ExplainStatementBinder.java
index 0de3331fe9a..0038f1d2859 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dal/ExplainStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dal/ExplainStatementBinder.java
@@ -18,9 +18,9 @@
 package org.apache.shardingsphere.infra.binder.engine.statement.dal;
 
 import lombok.RequiredArgsConstructor;
-import lombok.SneakyThrows;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinderContext;
+import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.infra.binder.engine.type.DMLStatementBindEngine;
 import org.apache.shardingsphere.infra.hint.HintValueContext;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
@@ -51,14 +51,11 @@ public final class ExplainStatementBinder implements 
SQLStatementBinder<ExplainS
         return result;
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
     private ExplainStatement copy(final ExplainStatement sqlStatement) {
-        ExplainStatement result = 
sqlStatement.getClass().getDeclaredConstructor().newInstance();
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        ExplainStatement result = new ExplainStatement();
         sqlStatement.getSimpleTable().ifPresent(result::setSimpleTable);
         sqlStatement.getColumnWild().ifPresent(result::setColumnWild);
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dal/OptimizeTableStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dal/OptimizeTableStatementBinder.java
index 038c88dbfc4..d6e0a3e6a9e 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dal/OptimizeTableStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dal/OptimizeTableStatementBinder.java
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.from.context.Ta
 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.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dal.OptimizeTableStatement;
 
 import java.util.LinkedList;
@@ -43,9 +44,7 @@ public final class OptimizeTableStatementBinder implements 
SQLStatementBinder<Op
     
     private OptimizeTableStatement copy(final OptimizeTableStatement 
sqlStatement) {
         OptimizeTableStatement result = new OptimizeTableStatement(new 
LinkedList<>());
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dal/ShowColumnsStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dal/ShowColumnsStatementBinder.java
index e8a72773174..0a007405e0f 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dal/ShowColumnsStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dal/ShowColumnsStatementBinder.java
@@ -25,6 +25,7 @@ import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.from.context.Ta
 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.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.ShowFilterSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowColumnsStatement;
@@ -47,9 +48,7 @@ public final class ShowColumnsStatementBinder implements 
SQLStatementBinder<Show
     
     private ShowColumnsStatement copy(final ShowColumnsStatement sqlStatement, 
final SimpleTableSegment table, final ShowFilterSegment filter) {
         ShowColumnsStatement result = new ShowColumnsStatement(table, 
sqlStatement.getFromDatabase().orElse(null), filter);
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dal/ShowCreateTableStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dal/ShowCreateTableStatementBinder.java
index bda67420b93..9977b246279 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dal/ShowCreateTableStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dal/ShowCreateTableStatementBinder.java
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.from.context.Ta
 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.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowCreateTableStatement;
 
@@ -40,9 +41,7 @@ public final class ShowCreateTableStatementBinder implements 
SQLStatementBinder<
     
     private ShowCreateTableStatement copy(final ShowCreateTableStatement 
sqlStatement, final SimpleTableSegment table) {
         ShowCreateTableStatement result = new ShowCreateTableStatement(table);
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dal/ShowIndexStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dal/ShowIndexStatementBinder.java
index c4522bac746..e533e7d5003 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dal/ShowIndexStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dal/ShowIndexStatementBinder.java
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.from.context.Ta
 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.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowIndexStatement;
 
@@ -40,9 +41,7 @@ public final class ShowIndexStatementBinder implements 
SQLStatementBinder<ShowIn
     
     private ShowIndexStatement copy(final ShowIndexStatement sqlStatement, 
final SimpleTableSegment table) {
         ShowIndexStatement result = new ShowIndexStatement(table, 
sqlStatement.getFromDatabase().orElse(null));
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dcl/DenyUserStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dcl/DenyUserStatementBinder.java
index 37771173994..7dc20625032 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dcl/DenyUserStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dcl/DenyUserStatementBinder.java
@@ -26,6 +26,7 @@ import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.from.context.Ta
 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.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dcl.DenyUserStatement;
 
 /**
@@ -46,9 +47,7 @@ public final class DenyUserStatementBinder implements 
SQLStatementBinder<DenyUse
     private static DenyUserStatement copy(final DenyUserStatement 
sqlStatement) {
         DenyUserStatement result = new DenyUserStatement();
         result.setTable(sqlStatement.getTable());
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/AlterIndexStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/AlterIndexStatementBinder.java
index d7d5c440571..75c9dbe7cf4 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/AlterIndexStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/AlterIndexStatementBinder.java
@@ -20,11 +20,11 @@ package 
org.apache.shardingsphere.infra.binder.engine.statement.ddl;
 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.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.AlterIndexStatement;
 
 /**
@@ -43,14 +43,11 @@ public final class AlterIndexStatementBinder implements 
SQLStatementBinder<Alter
         return result;
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
-    private static AlterIndexStatement copy(final AlterIndexStatement 
sqlStatement) {
-        AlterIndexStatement result = 
sqlStatement.getClass().getDeclaredConstructor().newInstance();
+    private AlterIndexStatement copy(final AlterIndexStatement sqlStatement) {
+        AlterIndexStatement result = new AlterIndexStatement();
         sqlStatement.getIndex().ifPresent(result::setIndex);
         sqlStatement.getSimpleTable().ifPresent(result::setSimpleTable);
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/AlterTableStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/AlterTableStatementBinder.java
index 6759a027470..f954af01796 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/AlterTableStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/AlterTableStatementBinder.java
@@ -20,11 +20,11 @@ package 
org.apache.shardingsphere.infra.binder.engine.statement.ddl;
 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.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.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.AlterTableStatement;
 
 /**
@@ -41,9 +41,8 @@ public final class AlterTableStatementBinder implements 
SQLStatementBinder<Alter
         return result;
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
-    private static AlterTableStatement copy(final AlterTableStatement 
sqlStatement) {
-        AlterTableStatement result = 
sqlStatement.getClass().getDeclaredConstructor().newInstance();
+    private AlterTableStatement copy(final AlterTableStatement sqlStatement) {
+        AlterTableStatement result = new AlterTableStatement();
         // TODO bind column and reference table if kernel need use them
         
sqlStatement.getConvertTableDefinition().ifPresent(result::setConvertTableDefinition);
         
result.getAddColumnDefinitions().addAll(sqlStatement.getAddColumnDefinitions());
@@ -58,9 +57,7 @@ public final class AlterTableStatementBinder implements 
SQLStatementBinder<Alter
         
result.getRenameColumnDefinitions().addAll(sqlStatement.getRenameColumnDefinitions());
         
result.getRenameIndexDefinitions().addAll(sqlStatement.getRenameIndexDefinitions());
         
sqlStatement.getModifyCollectionRetrieval().ifPresent(result::setModifyCollectionRetrieval);
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/AlterViewStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/AlterViewStatementBinder.java
index 0fae4aeec32..c7a255f5c67 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/AlterViewStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/AlterViewStatementBinder.java
@@ -20,11 +20,11 @@ package 
org.apache.shardingsphere.infra.binder.engine.statement.ddl;
 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.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.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.dml.SelectStatementBinder;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.AlterViewStatement;
 
@@ -43,14 +43,11 @@ public final class AlterViewStatementBinder implements 
SQLStatementBinder<AlterV
         return result;
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
-    private static AlterViewStatement copy(final AlterViewStatement 
sqlStatement) {
-        AlterViewStatement result = 
sqlStatement.getClass().getDeclaredConstructor().newInstance();
+    private AlterViewStatement copy(final AlterViewStatement sqlStatement) {
+        AlterViewStatement result = new AlterViewStatement();
         sqlStatement.getViewDefinition().ifPresent(result::setViewDefinition);
         
sqlStatement.getConstraintDefinition().ifPresent(result::setConstraintDefinition);
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CreateIndexStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CreateIndexStatementBinder.java
index d164373b4d5..1219e69523d 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CreateIndexStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CreateIndexStatementBinder.java
@@ -20,13 +20,13 @@ package 
org.apache.shardingsphere.infra.binder.engine.statement.ddl;
 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;
 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.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateIndexStatement;
 
 /**
@@ -44,17 +44,14 @@ public final class CreateIndexStatementBinder implements 
SQLStatementBinder<Crea
         return result;
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
-    private static CreateIndexStatement copy(final CreateIndexStatement 
sqlStatement) {
-        CreateIndexStatement result = 
sqlStatement.getClass().getDeclaredConstructor().newInstance();
+    private CreateIndexStatement copy(final CreateIndexStatement sqlStatement) 
{
+        CreateIndexStatement result = new CreateIndexStatement();
         result.setIndex(sqlStatement.getIndex());
         
sqlStatement.getGeneratedIndexStartIndex().ifPresent(result::setGeneratedIndexStartIndex);
         result.setIfNotExists(sqlStatement.isIfNotExists());
         sqlStatement.getAlgorithmType().ifPresent(result::setAlgorithmType);
         sqlStatement.getLockTable().ifPresent(result::setLockTable);
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CreateTableStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CreateTableStatementBinder.java
index d03f909b002..2384b6b77eb 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CreateTableStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CreateTableStatementBinder.java
@@ -26,6 +26,7 @@ import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.from.context.Ta
 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.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.dml.SelectStatementBinder;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateTableStatement;
 
@@ -53,9 +54,7 @@ public final class CreateTableStatementBinder implements 
SQLStatementBinder<Crea
         result.getColumns().addAll(sqlStatement.getColumns());
         sqlStatement.getLikeTable().ifPresent(result::setLikeTable);
         
sqlStatement.getCreateTableOption().ifPresent(result::setCreateTableOption);
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CreateViewStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CreateViewStatementBinder.java
index 8a50415b50b..2aec42fa9a0 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CreateViewStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CreateViewStatementBinder.java
@@ -20,11 +20,11 @@ package 
org.apache.shardingsphere.infra.binder.engine.statement.ddl;
 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.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.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.dml.SelectStatementBinder;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateViewStatement;
 
@@ -43,13 +43,10 @@ public final class CreateViewStatementBinder implements 
SQLStatementBinder<Creat
         return result;
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
-    private static CreateViewStatement copy(final CreateViewStatement 
sqlStatement) {
-        CreateViewStatement result = 
sqlStatement.getClass().getDeclaredConstructor().newInstance();
+    private CreateViewStatement copy(final CreateViewStatement sqlStatement) {
+        CreateViewStatement result = new CreateViewStatement();
         result.setViewDefinition(sqlStatement.getViewDefinition());
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CursorStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CursorStatementBinder.java
index 92262299705..e50cdc72b6d 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CursorStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CursorStatementBinder.java
@@ -19,6 +19,7 @@ package 
org.apache.shardingsphere.infra.binder.engine.statement.ddl;
 
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinderContext;
+import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.dml.SelectStatementBinder;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CursorStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.SelectStatement;
@@ -33,11 +34,9 @@ public final class CursorStatementBinder implements 
SQLStatementBinder<CursorSta
         return copy(sqlStatement, new 
SelectStatementBinder().bind(sqlStatement.getSelect(), binderContext));
     }
     
-    private static CursorStatement copy(final CursorStatement sqlStatement, 
final SelectStatement boundSelectStatement) {
+    private CursorStatement copy(final CursorStatement sqlStatement, final 
SelectStatement boundSelectStatement) {
         CursorStatement result = new 
CursorStatement(sqlStatement.getCursorName(), boundSelectStatement);
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/DropIndexStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/DropIndexStatementBinder.java
index e9c259eb0af..8aa79baee90 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/DropIndexStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/DropIndexStatementBinder.java
@@ -20,11 +20,11 @@ package 
org.apache.shardingsphere.infra.binder.engine.statement.ddl;
 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.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropIndexStatement;
 
 /**
@@ -44,16 +44,13 @@ public final class DropIndexStatementBinder implements 
SQLStatementBinder<DropIn
         return result;
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
-    private static DropIndexStatement copy(final DropIndexStatement 
sqlStatement) {
-        DropIndexStatement result = 
sqlStatement.getClass().getDeclaredConstructor().newInstance();
+    private DropIndexStatement copy(final DropIndexStatement sqlStatement) {
+        DropIndexStatement result = new DropIndexStatement();
         sqlStatement.getSimpleTable().ifPresent(result::setSimpleTable);
         sqlStatement.getAlgorithmType().ifPresent(result::setAlgorithmType);
         sqlStatement.getLockTable().ifPresent(result::setLockTable);
         result.setIfExists(sqlStatement.isIfExists());
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/DropTableStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/DropTableStatementBinder.java
index 8495ec8fbe1..6f88dbd7247 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/DropTableStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/DropTableStatementBinder.java
@@ -20,11 +20,11 @@ package 
org.apache.shardingsphere.infra.binder.engine.statement.ddl;
 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.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.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropTableStatement;
 
 /**
@@ -40,14 +40,11 @@ public final class DropTableStatementBinder implements 
SQLStatementBinder<DropTa
         return result;
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
-    private static DropTableStatement copy(final DropTableStatement 
sqlStatement) {
-        DropTableStatement result = 
sqlStatement.getClass().getDeclaredConstructor().newInstance();
+    private DropTableStatement copy(final DropTableStatement sqlStatement) {
+        DropTableStatement result = new DropTableStatement();
         result.setIfExists(sqlStatement.isIfExists());
         result.setContainsCascade(sqlStatement.isContainsCascade());
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/DropViewStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/DropViewStatementBinder.java
index d492df330dd..caf22803562 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/DropViewStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/DropViewStatementBinder.java
@@ -20,11 +20,11 @@ package 
org.apache.shardingsphere.infra.binder.engine.statement.ddl;
 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.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.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropViewStatement;
 
 /**
@@ -40,12 +40,9 @@ public final class DropViewStatementBinder implements 
SQLStatementBinder<DropVie
         return result;
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
-    private static DropViewStatement copy(final DropViewStatement 
sqlStatement) {
-        DropViewStatement result = 
sqlStatement.getClass().getDeclaredConstructor().newInstance();
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+    private DropViewStatement copy(final DropViewStatement sqlStatement) {
+        DropViewStatement result = new DropViewStatement();
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/RenameTableStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/RenameTableStatementBinder.java
index ae79fc696a9..e867296a257 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/RenameTableStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/RenameTableStatementBinder.java
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.infra.binder.engine.segment.ddl.column.RenameTa
 import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.from.context.TableSegmentBinderContext;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinderContext;
+import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.RenameTableDefinitionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.RenameTableStatement;
 
@@ -45,9 +46,7 @@ public final class RenameTableStatementBinder implements 
SQLStatementBinder<Rena
     
     private static RenameTableStatement copy(final RenameTableStatement 
sqlStatement, final Collection<RenameTableDefinitionSegment> boundRenameTables) 
{
         RenameTableStatement result = new 
RenameTableStatement(boundRenameTables);
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/TruncateStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/TruncateStatementBinder.java
index 2a937295cb4..4b21afdfbb3 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/TruncateStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/TruncateStatementBinder.java
@@ -20,11 +20,11 @@ package 
org.apache.shardingsphere.infra.binder.engine.statement.ddl;
 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.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.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.TruncateStatement;
 
 /**
@@ -40,12 +40,9 @@ public final class TruncateStatementBinder implements 
SQLStatementBinder<Truncat
         return result;
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
-    private static TruncateStatement copy(final TruncateStatement 
sqlStatement) {
-        TruncateStatement result = 
sqlStatement.getClass().getDeclaredConstructor().newInstance();
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+    private TruncateStatement copy(final TruncateStatement sqlStatement) {
+        TruncateStatement result = new TruncateStatement();
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
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 1cedff83ddc..9385b4e2fd8 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
@@ -27,6 +27,7 @@ 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.infra.binder.engine.statement.SQLStatementCopyUtils;
 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;
@@ -54,9 +55,7 @@ public final class CopyStatementBinder implements 
SQLStatementBinder<CopyStateme
     private CopyStatement copy(final CopyStatement sqlStatement,
                                final SimpleTableSegment boundTable, final 
Collection<ColumnSegment> boundColumns, final PrepareStatementQuerySegment 
boundPrepareStatementQuery) {
         CopyStatement result = new CopyStatement(boundTable, boundColumns, 
boundPrepareStatementQuery);
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/DeleteStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/DeleteStatementBinder.java
index 9303a106cea..336c94933d4 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/DeleteStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/DeleteStatementBinder.java
@@ -28,6 +28,7 @@ import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.predicate.Where
 import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.with.WithSegmentBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinderContext;
+import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.DeleteStatement;
 
 /**
@@ -52,9 +53,7 @@ public final class DeleteStatementBinder implements 
SQLStatementBinder<DeleteSta
         DeleteStatement result = 
sqlStatement.getClass().getDeclaredConstructor().newInstance();
         sqlStatement.getLimit().ifPresent(result::setLimit);
         sqlStatement.getOutputSegment().ifPresent(result::setOutputSegment);
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/InsertStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/InsertStatementBinder.java
index 6c56a7c13fa..24f22414349 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/InsertStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/InsertStatementBinder.java
@@ -29,6 +29,7 @@ import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.from.type.Simpl
 import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.with.WithSegmentBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinderContext;
+import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ColumnProjectionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ProjectionSegment;
@@ -69,9 +70,7 @@ public final class InsertStatementBinder implements 
SQLStatementBinder<InsertSta
         
sqlStatement.getMultiTableInsertIntoSegment().ifPresent(result::setMultiTableInsertIntoSegment);
         
sqlStatement.getMultiTableConditionalIntoSegment().ifPresent(result::setMultiTableConditionalIntoSegment);
         
sqlStatement.getReturningSegment().ifPresent(result::setReturningSegment);
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
     
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 8de45116f17..5f88661e60d 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
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.from.context.Ta
 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.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.LoadDataStatement;
 
@@ -40,9 +41,7 @@ public final class LoadDataStatementBinder implements 
SQLStatementBinder<LoadDat
     
     private LoadDataStatement copy(final LoadDataStatement sqlStatement, final 
SimpleTableSegment boundTableSegment) {
         LoadDataStatement result = new LoadDataStatement(boundTableSegment);
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
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 6837a2ec081..c3f9ae4f521 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
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.from.context.Ta
 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.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.LoadXMLStatement;
 
@@ -40,9 +41,7 @@ public final class LoadXMLStatementBinder implements 
SQLStatementBinder<LoadXMLS
     
     private LoadXMLStatement copy(final LoadXMLStatement sqlStatement, final 
SimpleTableSegment boundTableSegment) {
         LoadXMLStatement result = new LoadXMLStatement(boundTableSegment);
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/SelectStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/SelectStatementBinder.java
index 037aad8fe0a..b54c0b250e6 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/SelectStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/SelectStatementBinder.java
@@ -36,6 +36,7 @@ import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.with.WithSegmen
 import 
org.apache.shardingsphere.infra.binder.engine.segment.util.SubqueryTableBindUtils;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinderContext;
+import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.sql.parser.statement.core.enums.TableSourceType;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ProjectionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableSegment;
@@ -93,9 +94,7 @@ public final class SelectStatementBinder implements 
SQLStatementBinder<SelectSta
         sqlStatement.getWindow().ifPresent(result::setWindow);
         sqlStatement.getModelSegment().ifPresent(result::setModelSegment);
         sqlStatement.getSubqueryType().ifPresent(result::setSubqueryType);
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/UpdateStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/UpdateStatementBinder.java
index a86f343fa90..6744625dd49 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/UpdateStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/UpdateStatementBinder.java
@@ -29,6 +29,7 @@ import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.predicate.Where
 import 
org.apache.shardingsphere.infra.binder.engine.segment.dml.with.WithSegmentBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinderContext;
+import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementCopyUtils;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.UpdateStatement;
 
 /**
@@ -54,9 +55,7 @@ public final class UpdateStatementBinder implements 
SQLStatementBinder<UpdateSta
     private UpdateStatement copy(final UpdateStatement sqlStatement) {
         UpdateStatement result = 
sqlStatement.getClass().getDeclaredConstructor().newInstance();
         sqlStatement.getLimit().ifPresent(result::setLimit);
-        result.addParameterMarkers(sqlStatement.getParameterMarkers());
-        result.getComments().addAll(sqlStatement.getComments());
-        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
 }
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/AlterIndexStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/AlterIndexStatement.java
index 7c9aff53f42..13f7ca2c9bc 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/AlterIndexStatement.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/AlterIndexStatement.java
@@ -28,7 +28,7 @@ import java.util.Optional;
  * Alter index statement.
  */
 @Setter
-public class AlterIndexStatement extends AbstractSQLStatement implements 
DDLStatement {
+public final class AlterIndexStatement extends AbstractSQLStatement implements 
DDLStatement {
     
     private IndexSegment index;
     
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/AlterTableStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/AlterTableStatement.java
index 5104a0e645c..d50a950c150 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/AlterTableStatement.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/AlterTableStatement.java
@@ -46,7 +46,7 @@ import java.util.Optional;
  */
 @Getter
 @Setter
-public class AlterTableStatement extends AbstractSQLStatement implements 
DDLStatement {
+public final class AlterTableStatement extends AbstractSQLStatement implements 
DDLStatement {
     
     private SimpleTableSegment table;
     
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/AlterViewStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/AlterViewStatement.java
index 9debcf47dce..a2eddfec6ce 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/AlterViewStatement.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/AlterViewStatement.java
@@ -31,7 +31,7 @@ import java.util.Optional;
  */
 @Getter
 @Setter
-public class AlterViewStatement extends AbstractSQLStatement implements 
DDLStatement {
+public final class AlterViewStatement extends AbstractSQLStatement implements 
DDLStatement {
     
     private SimpleTableSegment view;
     
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/CreateIndexStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/CreateIndexStatement.java
index 5ae161db4ab..91fe20d41c5 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/CreateIndexStatement.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/CreateIndexStatement.java
@@ -35,7 +35,7 @@ import java.util.Optional;
  */
 @Getter
 @Setter
-public class CreateIndexStatement extends AbstractSQLStatement implements 
DDLStatement {
+public final class CreateIndexStatement extends AbstractSQLStatement 
implements DDLStatement {
     
     private IndexSegment index;
     
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/DropIndexStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/DropIndexStatement.java
index 29025bbaab4..e15a60c166c 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/DropIndexStatement.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/DropIndexStatement.java
@@ -34,7 +34,7 @@ import java.util.Optional;
  */
 @Getter
 @Setter
-public class DropIndexStatement extends AbstractSQLStatement implements 
DDLStatement {
+public final class DropIndexStatement extends AbstractSQLStatement implements 
DDLStatement {
     
     private final Collection<IndexSegment> indexes = new LinkedList<>();
     
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/DropTableStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/DropTableStatement.java
index 436ff710903..d0fe22f8d62 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/DropTableStatement.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/DropTableStatement.java
@@ -30,7 +30,7 @@ import java.util.LinkedList;
  */
 @Getter
 @Setter
-public class DropTableStatement extends AbstractSQLStatement implements 
DDLStatement {
+public final class DropTableStatement extends AbstractSQLStatement implements 
DDLStatement {
     
     private final Collection<SimpleTableSegment> tables = new LinkedList<>();
     
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/DropViewStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/DropViewStatement.java
index 49ca9fcb9dd..a709bf42962 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/DropViewStatement.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/DropViewStatement.java
@@ -30,7 +30,7 @@ import java.util.LinkedList;
  */
 @Getter
 @Setter
-public class DropViewStatement extends AbstractSQLStatement implements 
DDLStatement {
+public final class DropViewStatement extends AbstractSQLStatement implements 
DDLStatement {
     
     private final Collection<SimpleTableSegment> views = new LinkedList<>();
     

Reply via email to