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

chengzhang 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 8aaa7c7d029 Support alter table, drop table sql bind and add test case 
(#34154)
8aaa7c7d029 is described below

commit 8aaa7c7d029e42dace3b3576da1a688af01bbfb8
Author: Zhengqiang Duan <duanzhengqi...@apache.org>
AuthorDate: Thu Dec 26 11:49:45 2024 +0800

    Support alter table, drop table sql bind and add test case (#34154)
    
    * Support sql bind for select with current select projection reference
    
    * update release note
    
    * fix unit test
    
    * fix unit test
    
    * fix unit test
    
    * fix unit test
    
    * Support alter table, drop table sql bind and add test case
    
    * update release note
    
    * fix rewrite it
---
 RELEASE-NOTES.md                                   |   1 +
 .../ddl/ShardingDropTableSupportedCheckerTest.java |   2 +-
 .../ShardingDropTableRouteContextCheckerTest.java  |   8 +-
 .../from/type/SimpleTableSegmentBinder.java        |  14 +++
 .../statement/ddl/AlterTableStatementBinder.java   |  66 ++++++++++
 .../statement/ddl/DropTableStatementBinder.java    |  53 ++++++++
 .../binder/engine/type/DDLStatementBindEngine.java |  10 ++
 .../statement/type/DorisDDLStatementVisitor.java   |   3 +-
 .../statement/type/MySQLDDLStatementVisitor.java   |   3 +-
 .../type/OpenGaussDDLStatementVisitor.java         |   4 +-
 .../type/PostgreSQLDDLStatementVisitor.java        |   4 +-
 .../statement/type/PrestoDDLStatementVisitor.java  |   3 +-
 .../type/SQLServerDDLStatementVisitor.java         |   3 +-
 .../core/statement/ddl/AlterTableStatement.java    |   8 ++
 .../core/statement/ddl/DropTableStatement.java     |  16 +++
 .../doris/ddl/DorisDropTableStatement.java         |   4 +-
 .../mysql/ddl/MySQLDropTableStatement.java         |   4 +-
 .../opengauss/ddl/OpenGaussDropTableStatement.java |   6 +-
 .../ddl/PostgreSQLDropTableStatement.java          |   6 +-
 .../presto/ddl/PrestoDropTableStatement.java       |   4 +-
 .../sqlserver/ddl/SQLServerDropTableStatement.java |   4 +-
 .../prepare/MySQLComStmtPrepareCheckerTest.java    |   3 +-
 .../it/sql/binder/dialect/doris/DorisBinderIT.java |  18 +--
 .../src/test/resources/cases/ddl/alter-table.xml   |  50 ++++++++
 .../src/test/resources/cases/ddl/create-table.xml  | 139 +++++++++++++++++++++
 .../src/test/resources/cases/ddl/drop-table.xml    |  49 ++++++++
 .../sqls/ddl/{create-table.xml => alter-table.xml} |   3 +-
 .../src/test/resources/sqls/ddl/create-table.xml   |   2 +
 .../sqls/ddl/{create-table.xml => drop-table.xml}  |   3 +-
 .../engine/scenario/ShardingSQLRewriterIT.java     |   7 ++
 .../scenario/sharding/case/ddl/alter-table.xml     |   4 +-
 31 files changed, 466 insertions(+), 38 deletions(-)

diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index 5e23492b00d..0db9cb1685a 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -40,6 +40,7 @@
 1. SQL Binder: Remove TablesContext#findTableNames method and implement select 
order by, group by bind logic - 
[#34123](https://github.com/apache/shardingsphere/pull/34123)
 1. SQL Binder: Support select with statement sql bind and add bind test case - 
[#34141](https://github.com/apache/shardingsphere/pull/34141)
 1. SQL Binder: Support sql bind for select with current select projection 
reference - [#34151](https://github.com/apache/shardingsphere/pull/34151)
+1. SQL Binder: Support alter table, drop table sql bind and add test case - 
[#34154](https://github.com/apache/shardingsphere/pull/34154)
 
 ### Bug Fixes
 
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingDropTableSupportedCheckerTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingDropTableSupportedCheckerTest.java
index 5223b63b374..35726fd7e22 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingDropTableSupportedCheckerTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingDropTableSupportedCheckerTest.java
@@ -62,7 +62,7 @@ class ShardingDropTableSupportedCheckerTest {
     
     @Test
     void assertCheckForMySQL() {
-        MySQLDropTableStatement sqlStatement = new 
MySQLDropTableStatement(false);
+        MySQLDropTableStatement sqlStatement = new MySQLDropTableStatement();
         sqlStatement.getTables().add(new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue("t_order_item"))));
         DropTableStatementContext sqlStatementContext = new 
DropTableStatementContext(sqlStatement);
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropTableRouteContextCheckerTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropTableRouteContextCheckerTest.java
index 4a26cb3d8af..4c57935c353 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropTableRouteContextCheckerTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropTableRouteContextCheckerTest.java
@@ -80,7 +80,7 @@ class ShardingDropTableRouteContextCheckerTest {
     
     @Test
     void assertCheckWhenDropTableInUsedForMySQL() {
-        MySQLDropTableStatement sqlStatement = new 
MySQLDropTableStatement(false);
+        MySQLDropTableStatement sqlStatement = new MySQLDropTableStatement();
         sqlStatement.getTables().add(new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue("t_order_item"))));
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         when(database.getName()).thenReturn("db_schema");
@@ -119,7 +119,7 @@ class ShardingDropTableRouteContextCheckerTest {
     
     @Test
     void assertCheckWithSameRouteResultShardingTableForPostgreSQL() {
-        PostgreSQLDropTableStatement sqlStatement = new 
PostgreSQLDropTableStatement(false, false);
+        PostgreSQLDropTableStatement sqlStatement = new 
PostgreSQLDropTableStatement();
         sqlStatement.getTables().add(new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue("t_order"))));
         when(shardingRule.isShardingTable("t_order")).thenReturn(true);
         when(shardingRule.getShardingTable("t_order")).thenReturn(new 
ShardingTable(Arrays.asList("ds_0", "ds_1"), "t_order"));
@@ -134,7 +134,7 @@ class ShardingDropTableRouteContextCheckerTest {
     
     @Test
     void assertCheckWithDifferentRouteResultShardingTableForPostgreSQL() {
-        PostgreSQLDropTableStatement sqlStatement = new 
PostgreSQLDropTableStatement(false, false);
+        PostgreSQLDropTableStatement sqlStatement = new 
PostgreSQLDropTableStatement();
         sqlStatement.getTables().add(new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue("t_order"))));
         when(shardingRule.isShardingTable("t_order")).thenReturn(true);
         when(shardingRule.getShardingTable("t_order")).thenReturn(new 
ShardingTable(Arrays.asList("ds_0", "ds_1"), "t_order"));
@@ -148,7 +148,7 @@ class ShardingDropTableRouteContextCheckerTest {
     
     @Test
     void assertCheckWithSameRouteResultBroadcastTableForPostgreSQL() {
-        PostgreSQLDropTableStatement sqlStatement = new 
PostgreSQLDropTableStatement(false, false);
+        PostgreSQLDropTableStatement sqlStatement = new 
PostgreSQLDropTableStatement();
         sqlStatement.getTables().add(new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue("t_config"))));
         when(shardingRule.getShardingTable("t_config")).thenReturn(new 
ShardingTable(Arrays.asList("ds_0", "ds_1"), "t_config"));
         Collection<RouteUnit> routeUnits = new LinkedList<>();
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/from/type/SimpleTableSegmentBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/from/type/SimpleTableSegmentBinder.java
index d471cb8cf01..a7b91988747 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/from/type/SimpleTableSegmentBinder.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/from/type/SimpleTableSegmentBinder.java
@@ -49,7 +49,9 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.bound
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.bound.TableSegmentBoundInfo;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.AlterTableStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateTableStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropTableStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 
 import java.util.Collection;
@@ -130,6 +132,14 @@ public final class SimpleTableSegmentBinder {
                     || ((CreateTableStatement) 
binderContext.getSqlStatement()).isIfNotExists() || 
!schema.containsTable(tableName), () -> new TableExistsException(tableName));
             return;
         }
+        if (binderContext.getSqlStatement() instanceof AlterTableStatement && 
isRenameTable((AlterTableStatement) binderContext.getSqlStatement(), 
tableName)) {
+            
ShardingSpherePreconditions.checkState(binderContext.getHintValueContext().isSkipMetadataValidate()
 || !schema.containsTable(tableName), () -> new 
TableExistsException(tableName));
+            return;
+        }
+        if (binderContext.getSqlStatement() instanceof DropTableStatement) {
+            ShardingSpherePreconditions.checkState(((DropTableStatement) 
binderContext.getSqlStatement()).isIfExists() || 
schema.containsTable(tableName), () -> new TableNotFoundException(tableName));
+            return;
+        }
         if ("DUAL".equalsIgnoreCase(tableName)) {
             return;
         }
@@ -142,6 +152,10 @@ public final class SimpleTableSegmentBinder {
         
ShardingSpherePreconditions.checkState(schema.containsTable(tableName), () -> 
new TableNotFoundException(tableName));
     }
     
+    private static boolean isRenameTable(final AlterTableStatement 
alterTableStatement, final String tableName) {
+        return alterTableStatement.getRenameTable().isPresent() && 
alterTableStatement.getRenameTable().get().getTableName().getIdentifier().getValue().equalsIgnoreCase(tableName);
+    }
+    
     private static SimpleTableSegmentBinderContext 
createSimpleTableBinderContext(final SimpleTableSegment segment, final 
ShardingSphereSchema schema, final IdentifierValue databaseName,
                                                                                
   final IdentifierValue schemaName, final SQLStatementBinderContext 
binderContext) {
         IdentifierValue tableName = segment.getTableName().getIdentifier();
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/AlterTableStatementBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/AlterTableStatementBinder.java
new file mode 100644
index 00000000000..4a3f1e31b12
--- /dev/null
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/AlterTableStatementBinder.java
@@ -0,0 +1,66 @@
+/*
+ * 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.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.from.context.TableSegmentBinderContext;
+import 
org.apache.shardingsphere.infra.binder.engine.segment.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.statement.ddl.AlterTableStatement;
+
+/**
+ * Alter table statement binder.
+ */
+public final class AlterTableStatementBinder implements 
SQLStatementBinder<AlterTableStatement> {
+    
+    @Override
+    public AlterTableStatement bind(final AlterTableStatement sqlStatement, 
final SQLStatementBinderContext binderContext) {
+        AlterTableStatement result = copy(sqlStatement);
+        Multimap<CaseInsensitiveString, TableSegmentBinderContext> 
tableBinderContexts = LinkedHashMultimap.create();
+        result.setTable(SimpleTableSegmentBinder.bind(sqlStatement.getTable(), 
binderContext, tableBinderContexts));
+        sqlStatement.getRenameTable().ifPresent(optional -> 
result.setRenameTable(SimpleTableSegmentBinder.bind(optional, binderContext, 
tableBinderContexts)));
+        return result;
+    }
+    
+    @SneakyThrows(ReflectiveOperationException.class)
+    private static AlterTableStatement copy(final AlterTableStatement 
sqlStatement) {
+        AlterTableStatement result = 
sqlStatement.getClass().getDeclaredConstructor().newInstance();
+        // TODO bind column and reference table if kernel need use them
+        
sqlStatement.getConvertTableDefinition().ifPresent(result::setConvertTableDefinition);
+        
result.getAddColumnDefinitions().addAll(sqlStatement.getAddColumnDefinitions());
+        
result.getModifyColumnDefinitions().addAll(sqlStatement.getModifyColumnDefinitions());
+        
result.getChangeColumnDefinitions().addAll(sqlStatement.getChangeColumnDefinitions());
+        
result.getDropColumnDefinitions().addAll(sqlStatement.getDropColumnDefinitions());
+        
result.getAddConstraintDefinitions().addAll(sqlStatement.getAddConstraintDefinitions());
+        
result.getValidateConstraintDefinitions().addAll(sqlStatement.getValidateConstraintDefinitions());
+        
result.getModifyConstraintDefinitions().addAll(sqlStatement.getModifyConstraintDefinitions());
+        
result.getDropConstraintDefinitions().addAll(sqlStatement.getDropConstraintDefinitions());
+        
result.getDropIndexDefinitions().addAll(sqlStatement.getDropIndexDefinitions());
+        
result.getRenameColumnDefinitions().addAll(sqlStatement.getRenameColumnDefinitions());
+        
result.getRenameIndexDefinitions().addAll(sqlStatement.getRenameIndexDefinitions());
+        
sqlStatement.getModifyCollectionRetrieval().ifPresent(result::setModifyCollectionRetrieval);
+        
result.addParameterMarkerSegments(sqlStatement.getParameterMarkerSegments());
+        result.getCommentSegments().addAll(sqlStatement.getCommentSegments());
+        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        return result;
+    }
+}
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/DropTableStatementBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/DropTableStatementBinder.java
new file mode 100644
index 00000000000..c54d2ce00bd
--- /dev/null
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/DropTableStatementBinder.java
@@ -0,0 +1,53 @@
+/*
+ * 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.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.from.context.TableSegmentBinderContext;
+import 
org.apache.shardingsphere.infra.binder.engine.segment.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.statement.ddl.DropTableStatement;
+
+/**
+ * Drop table statement binder.
+ */
+public final class DropTableStatementBinder implements 
SQLStatementBinder<DropTableStatement> {
+    
+    @Override
+    public DropTableStatement bind(final DropTableStatement sqlStatement, 
final SQLStatementBinderContext binderContext) {
+        DropTableStatement result = copy(sqlStatement);
+        Multimap<CaseInsensitiveString, TableSegmentBinderContext> 
tableBinderContexts = LinkedHashMultimap.create();
+        sqlStatement.getTables().forEach(each -> 
result.getTables().add(SimpleTableSegmentBinder.bind(each, binderContext, 
tableBinderContexts)));
+        return result;
+    }
+    
+    @SneakyThrows(ReflectiveOperationException.class)
+    private static DropTableStatement copy(final DropTableStatement 
sqlStatement) {
+        DropTableStatement result = 
sqlStatement.getClass().getDeclaredConstructor().newInstance();
+        result.setIfExists(sqlStatement.isIfExists());
+        result.setContainsCascade(sqlStatement.isContainsCascade());
+        
result.addParameterMarkerSegments(sqlStatement.getParameterMarkerSegments());
+        result.getCommentSegments().addAll(sqlStatement.getCommentSegments());
+        result.getVariableNames().addAll(sqlStatement.getVariableNames());
+        return result;
+    }
+}
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/type/DDLStatementBindEngine.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/type/DDLStatementBindEngine.java
index 6665fc27ec5..2792f3fc62c 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/type/DDLStatementBindEngine.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/type/DDLStatementBindEngine.java
@@ -19,15 +19,19 @@ package org.apache.shardingsphere.infra.binder.engine.type;
 
 import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinderContext;
+import 
org.apache.shardingsphere.infra.binder.engine.statement.ddl.AlterTableStatementBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.ddl.CreateIndexStatementBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.ddl.CreateTableStatementBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.ddl.CursorStatementBinder;
+import 
org.apache.shardingsphere.infra.binder.engine.statement.ddl.DropTableStatementBinder;
 import org.apache.shardingsphere.infra.hint.HintValueContext;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.AlterTableStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateIndexStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateTableStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CursorStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DDLStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropTableStatement;
 
 /**
  * DDL statement bind engine.
@@ -55,6 +59,12 @@ public final class DDLStatementBindEngine {
         if (statement instanceof CreateTableStatement) {
             return new 
CreateTableStatementBinder().bind((CreateTableStatement) statement, 
binderContext);
         }
+        if (statement instanceof AlterTableStatement) {
+            return new AlterTableStatementBinder().bind((AlterTableStatement) 
statement, binderContext);
+        }
+        if (statement instanceof DropTableStatement) {
+            return new DropTableStatementBinder().bind((DropTableStatement) 
statement, binderContext);
+        }
         if (statement instanceof CreateIndexStatement) {
             return new 
CreateIndexStatementBinder().bind((CreateIndexStatement) statement, 
binderContext);
         }
diff --git 
a/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDDLStatementVisitor.java
 
b/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDDLStatementVisitor.java
index 70609a71732..9c18804dcf9 100644
--- 
a/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDDLStatementVisitor.java
+++ 
b/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDDLStatementVisitor.java
@@ -664,7 +664,8 @@ public final class DorisDDLStatementVisitor extends 
DorisStatementVisitor implem
     @SuppressWarnings("unchecked")
     @Override
     public ASTNode visitDropTable(final DropTableContext ctx) {
-        DorisDropTableStatement result = new DorisDropTableStatement(null != 
ctx.ifExists());
+        DorisDropTableStatement result = new DorisDropTableStatement();
+        result.setIfExists(null != ctx.ifExists());
         result.getTables().addAll(((CollectionValue<SimpleTableSegment>) 
visit(ctx.tableList())).getValue());
         return result;
     }
diff --git 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
index 97188a7353d..9f6e311a4b5 100644
--- 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
+++ 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
@@ -671,7 +671,8 @@ public final class MySQLDDLStatementVisitor extends 
MySQLStatementVisitor implem
     @SuppressWarnings("unchecked")
     @Override
     public ASTNode visitDropTable(final DropTableContext ctx) {
-        MySQLDropTableStatement result = new MySQLDropTableStatement(null != 
ctx.ifExists());
+        MySQLDropTableStatement result = new MySQLDropTableStatement();
+        result.setIfExists(null != ctx.ifExists());
         result.getTables().addAll(((CollectionValue<SimpleTableSegment>) 
visit(ctx.tableList())).getValue());
         return result;
     }
diff --git 
a/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java
 
b/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java
index f0940ad4a0d..7fad41cc99f 100644
--- 
a/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java
+++ 
b/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java
@@ -512,7 +512,9 @@ public final class OpenGaussDDLStatementVisitor extends 
OpenGaussStatementVisito
     @Override
     public ASTNode visitDropTable(final DropTableContext ctx) {
         boolean containsCascade = null != ctx.dropTableOpt() && null != 
ctx.dropTableOpt().CASCADE();
-        OpenGaussDropTableStatement result = new 
OpenGaussDropTableStatement(null != ctx.ifExists(), containsCascade);
+        OpenGaussDropTableStatement result = new OpenGaussDropTableStatement();
+        result.setIfExists(null != ctx.ifExists());
+        result.setContainsCascade(containsCascade);
         result.getTables().addAll(((CollectionValue<SimpleTableSegment>) 
visit(ctx.tableNames())).getValue());
         return result;
     }
diff --git 
a/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDDLStatementVisitor.java
 
b/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDDLStatementVisitor.java
index 6a23b13361f..5bf935cb3ff 100644
--- 
a/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDDLStatementVisitor.java
+++ 
b/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDDLStatementVisitor.java
@@ -627,7 +627,9 @@ public final class PostgreSQLDDLStatementVisitor extends 
PostgreSQLStatementVisi
     @Override
     public ASTNode visitDropTable(final DropTableContext ctx) {
         boolean containsCascade = null != ctx.dropTableOpt() && null != 
ctx.dropTableOpt().CASCADE();
-        PostgreSQLDropTableStatement result = new 
PostgreSQLDropTableStatement(null != ctx.ifExists(), containsCascade);
+        PostgreSQLDropTableStatement result = new 
PostgreSQLDropTableStatement();
+        result.setIfExists(null != ctx.ifExists());
+        result.setContainsCascade(containsCascade);
         result.getTables().addAll(((CollectionValue<SimpleTableSegment>) 
visit(ctx.tableNames())).getValue());
         return result;
     }
diff --git 
a/parser/sql/dialect/presto/src/main/java/org/apache/shardingsphere/sql/parser/presto/visitor/statement/type/PrestoDDLStatementVisitor.java
 
b/parser/sql/dialect/presto/src/main/java/org/apache/shardingsphere/sql/parser/presto/visitor/statement/type/PrestoDDLStatementVisitor.java
index 2fe88595fb6..d2b73e1c0be 100644
--- 
a/parser/sql/dialect/presto/src/main/java/org/apache/shardingsphere/sql/parser/presto/visitor/statement/type/PrestoDDLStatementVisitor.java
+++ 
b/parser/sql/dialect/presto/src/main/java/org/apache/shardingsphere/sql/parser/presto/visitor/statement/type/PrestoDDLStatementVisitor.java
@@ -119,7 +119,8 @@ public final class PrestoDDLStatementVisitor extends 
PrestoStatementVisitor impl
     @SuppressWarnings("unchecked")
     @Override
     public ASTNode visitDropTable(final DropTableContext ctx) {
-        PrestoDropTableStatement result = new PrestoDropTableStatement(null != 
ctx.ifExists());
+        PrestoDropTableStatement result = new PrestoDropTableStatement();
+        result.setIfExists(null != ctx.ifExists());
         result.getTables().addAll(((CollectionValue<SimpleTableSegment>) 
visit(ctx.tableList())).getValue());
         return result;
     }
diff --git 
a/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/type/SQLServerDDLStatementVisitor.java
 
b/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/type/SQLServerDDLStatementVisitor.java
index 0180b750bf3..59841bf11bc 100644
--- 
a/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/type/SQLServerDDLStatementVisitor.java
+++ 
b/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/type/SQLServerDDLStatementVisitor.java
@@ -309,7 +309,8 @@ public final class SQLServerDDLStatementVisitor extends 
SQLServerStatementVisito
     @SuppressWarnings("unchecked")
     @Override
     public ASTNode visitDropTable(final DropTableContext ctx) {
-        SQLServerDropTableStatement result = new 
SQLServerDropTableStatement(null != ctx.ifExists());
+        SQLServerDropTableStatement result = new SQLServerDropTableStatement();
+        result.setContainsCascade(null != ctx.ifExists());
         result.getTables().addAll(((CollectionValue<SimpleTableSegment>) 
visit(ctx.tableNames())).getValue());
         return result;
     }
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 f7fec12bc6a..400345f5792 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
@@ -92,6 +92,14 @@ public abstract class AlterTableStatement extends 
AbstractSQLStatement implement
         return Optional.ofNullable(convertTableDefinition);
     }
     
+    /**
+     * Set modify collection retrieval.
+     *
+     * @param modifyCollectionRetrieval modify collection retrieval
+     */
+    public void setModifyCollectionRetrieval(final 
ModifyCollectionRetrievalSegment modifyCollectionRetrieval) {
+    }
+    
     /**
      * Get modify collection retrieval.
      *
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 c82b5b323a9..933f46bb550 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
@@ -32,6 +32,14 @@ public abstract class DropTableStatement extends 
AbstractSQLStatement implements
     
     private final Collection<SimpleTableSegment> tables = new LinkedList<>();
     
+    /**
+     * Set if exists.
+     *
+     * @param ifExists if exists or not
+     */
+    public void setIfExists(final boolean ifExists) {
+    }
+    
     /**
      * Judge whether contains if exists.
      *
@@ -41,6 +49,14 @@ public abstract class DropTableStatement extends 
AbstractSQLStatement implements
         return false;
     }
     
+    /**
+     * Set contains cascade.
+     *
+     * @param containsCascade contains cascade or not
+     */
+    public void setContainsCascade(final boolean containsCascade) {
+    }
+    
     /**
      * Judge whether contains cascade.
      *
diff --git 
a/parser/sql/statement/type/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/ddl/DorisDropTableStatement.java
 
b/parser/sql/statement/type/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/ddl/DorisDropTableStatement.java
index 8a12cd4ff5a..7c9ba41ddcf 100644
--- 
a/parser/sql/statement/type/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/ddl/DorisDropTableStatement.java
+++ 
b/parser/sql/statement/type/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/ddl/DorisDropTableStatement.java
@@ -19,6 +19,7 @@ package 
org.apache.shardingsphere.sql.parser.statement.doris.ddl;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import lombok.Setter;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropTableStatement;
 import org.apache.shardingsphere.sql.parser.statement.doris.DorisStatement;
 
@@ -27,7 +28,8 @@ import 
org.apache.shardingsphere.sql.parser.statement.doris.DorisStatement;
  */
 @RequiredArgsConstructor
 @Getter
+@Setter
 public final class DorisDropTableStatement extends DropTableStatement 
implements DorisStatement {
     
-    private final boolean ifExists;
+    private boolean ifExists;
 }
diff --git 
a/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/ddl/MySQLDropTableStatement.java
 
b/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/ddl/MySQLDropTableStatement.java
index 40ece242d7e..289e86eeaf7 100644
--- 
a/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/ddl/MySQLDropTableStatement.java
+++ 
b/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/ddl/MySQLDropTableStatement.java
@@ -19,6 +19,7 @@ package 
org.apache.shardingsphere.sql.parser.statement.mysql.ddl;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import lombok.Setter;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropTableStatement;
 import org.apache.shardingsphere.sql.parser.statement.mysql.MySQLStatement;
 
@@ -27,7 +28,8 @@ import 
org.apache.shardingsphere.sql.parser.statement.mysql.MySQLStatement;
  */
 @RequiredArgsConstructor
 @Getter
+@Setter
 public final class MySQLDropTableStatement extends DropTableStatement 
implements MySQLStatement {
     
-    private final boolean ifExists;
+    private boolean ifExists;
 }
diff --git 
a/parser/sql/statement/type/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/statement/opengauss/ddl/OpenGaussDropTableStatement.java
 
b/parser/sql/statement/type/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/statement/opengauss/ddl/OpenGaussDropTableStatement.java
index c10040398d8..d9d36b5ce49 100644
--- 
a/parser/sql/statement/type/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/statement/opengauss/ddl/OpenGaussDropTableStatement.java
+++ 
b/parser/sql/statement/type/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/statement/opengauss/ddl/OpenGaussDropTableStatement.java
@@ -19,6 +19,7 @@ package 
org.apache.shardingsphere.sql.parser.statement.opengauss.ddl;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import lombok.Setter;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropTableStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.opengauss.OpenGaussStatement;
 
@@ -27,9 +28,10 @@ import 
org.apache.shardingsphere.sql.parser.statement.opengauss.OpenGaussStateme
  */
 @RequiredArgsConstructor
 @Getter
+@Setter
 public final class OpenGaussDropTableStatement extends DropTableStatement 
implements OpenGaussStatement {
     
-    private final boolean ifExists;
+    private boolean ifExists;
     
-    private final boolean containsCascade;
+    private boolean containsCascade;
 }
diff --git 
a/parser/sql/statement/type/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/statement/postgresql/ddl/PostgreSQLDropTableStatement.java
 
b/parser/sql/statement/type/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/statement/postgresql/ddl/PostgreSQLDropTableStatement.java
index 917e24e8146..983761915bd 100644
--- 
a/parser/sql/statement/type/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/statement/postgresql/ddl/PostgreSQLDropTableStatement.java
+++ 
b/parser/sql/statement/type/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/statement/postgresql/ddl/PostgreSQLDropTableStatement.java
@@ -19,6 +19,7 @@ package 
org.apache.shardingsphere.sql.parser.statement.postgresql.ddl;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import lombok.Setter;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropTableStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.postgresql.PostgreSQLStatement;
 
@@ -27,9 +28,10 @@ import 
org.apache.shardingsphere.sql.parser.statement.postgresql.PostgreSQLState
  */
 @RequiredArgsConstructor
 @Getter
+@Setter
 public final class PostgreSQLDropTableStatement extends DropTableStatement 
implements PostgreSQLStatement {
     
-    private final boolean ifExists;
+    private boolean ifExists;
     
-    private final boolean containsCascade;
+    private boolean containsCascade;
 }
diff --git 
a/parser/sql/statement/type/presto/src/main/java/org/apache/shardingsphere/sql/parser/statement/presto/ddl/PrestoDropTableStatement.java
 
b/parser/sql/statement/type/presto/src/main/java/org/apache/shardingsphere/sql/parser/statement/presto/ddl/PrestoDropTableStatement.java
index 0df13bf5aa4..9170d069319 100644
--- 
a/parser/sql/statement/type/presto/src/main/java/org/apache/shardingsphere/sql/parser/statement/presto/ddl/PrestoDropTableStatement.java
+++ 
b/parser/sql/statement/type/presto/src/main/java/org/apache/shardingsphere/sql/parser/statement/presto/ddl/PrestoDropTableStatement.java
@@ -19,6 +19,7 @@ package 
org.apache.shardingsphere.sql.parser.statement.presto.ddl;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import lombok.Setter;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropTableStatement;
 import org.apache.shardingsphere.sql.parser.statement.presto.PrestoStatement;
 
@@ -27,7 +28,8 @@ import 
org.apache.shardingsphere.sql.parser.statement.presto.PrestoStatement;
  */
 @RequiredArgsConstructor
 @Getter
+@Setter
 public final class PrestoDropTableStatement extends DropTableStatement 
implements PrestoStatement {
     
-    private final boolean ifExists;
+    private boolean ifExists;
 }
diff --git 
a/parser/sql/statement/type/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/statement/sqlserver/ddl/SQLServerDropTableStatement.java
 
b/parser/sql/statement/type/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/statement/sqlserver/ddl/SQLServerDropTableStatement.java
index 436fe796b1f..9036747d792 100644
--- 
a/parser/sql/statement/type/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/statement/sqlserver/ddl/SQLServerDropTableStatement.java
+++ 
b/parser/sql/statement/type/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/statement/sqlserver/ddl/SQLServerDropTableStatement.java
@@ -19,6 +19,7 @@ package 
org.apache.shardingsphere.sql.parser.statement.sqlserver.ddl;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import lombok.Setter;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropTableStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.sqlserver.SQLServerStatement;
 
@@ -27,7 +28,8 @@ import 
org.apache.shardingsphere.sql.parser.statement.sqlserver.SQLServerStateme
  */
 @RequiredArgsConstructor
 @Getter
+@Setter
 public final class SQLServerDropTableStatement extends DropTableStatement 
implements SQLServerStatement {
     
-    private final boolean ifExists;
+    private boolean ifExists;
 }
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 223001a592d..29223c817c9 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
@@ -85,12 +85,11 @@ class MySQLComStmtPrepareCheckerTest {
     @Test
     void assertIsStatementAllowed() {
         MySQLCreateTableStatement createTableStatement = new 
MySQLCreateTableStatement();
-        createTableStatement.setIfNotExists(false);
         Collection<SQLStatement> sqlStatements = Arrays.asList(
                 new MySQLAlterTableStatement(), new MySQLAlterUserStatement(), 
new MySQLAnalyzeTableStatement(), new MySQLCacheIndexStatement(),
                 new MySQLCallStatement(), new MySQLChangeMasterStatement(), 
new MySQLChecksumTableStatement(), new MySQLCommitStatement(), new 
MySQLCreateIndexStatement(),
                 new MySQLDropIndexStatement(), new 
MySQLCreateDatabaseStatement(), new MySQLDropDatabaseStatement(), 
createTableStatement,
-                new MySQLDropTableStatement(false), new 
MySQLCreateUserStatement(), new MySQLRenameUserStatement(), new 
MySQLDropUserStatement(),
+                new MySQLDropTableStatement(), new MySQLCreateUserStatement(), 
new MySQLRenameUserStatement(), new MySQLDropUserStatement(),
                 new MySQLCreateViewStatement(), new MySQLDropViewStatement(), 
new MySQLDeleteStatement(), new MySQLDoStatement(), new MySQLFlushStatement(),
                 new MySQLGrantStatement(), new MySQLInsertStatement(), new 
MySQLInstallPluginStatement(), new MySQLKillStatement(),
                 new MySQLLoadIndexInfoStatement(), new 
MySQLOptimizeTableStatement(), new MySQLRenameTableStatement(), new 
MySQLRepairTableStatement(),
diff --git 
a/parser/sql/statement/type/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/ddl/DorisDropTableStatement.java
 
b/test/it/binder/src/test/java/org/apache/shardingsphere/test/it/sql/binder/dialect/doris/DorisBinderIT.java
similarity index 61%
copy from 
parser/sql/statement/type/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/ddl/DorisDropTableStatement.java
copy to 
test/it/binder/src/test/java/org/apache/shardingsphere/test/it/sql/binder/dialect/doris/DorisBinderIT.java
index 8a12cd4ff5a..18adc1a3b6a 100644
--- 
a/parser/sql/statement/type/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/ddl/DorisDropTableStatement.java
+++ 
b/test/it/binder/src/test/java/org/apache/shardingsphere/test/it/sql/binder/dialect/doris/DorisBinderIT.java
@@ -15,19 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sql.parser.statement.doris.ddl;
+package org.apache.shardingsphere.test.it.sql.binder.dialect.doris;
 
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropTableStatement;
-import org.apache.shardingsphere.sql.parser.statement.doris.DorisStatement;
+import org.apache.shardingsphere.test.it.sql.binder.SQLBinderIT;
+import org.apache.shardingsphere.test.it.sql.binder.SQLBinderITSettings;
 
-/**
- * Doris drop table statement.
- */
-@RequiredArgsConstructor
-@Getter
-public final class DorisDropTableStatement extends DropTableStatement 
implements DorisStatement {
-    
-    private final boolean ifExists;
+@SQLBinderITSettings("Doris")
+class DorisBinderIT extends SQLBinderIT {
 }
diff --git a/test/it/binder/src/test/resources/cases/ddl/alter-table.xml 
b/test/it/binder/src/test/resources/cases/ddl/alter-table.xml
new file mode 100644
index 00000000000..01ad10052f1
--- /dev/null
+++ b/test/it/binder/src/test/resources/cases/ddl/alter-table.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<sql-parser-test-cases>
+    <alter-table sql-case-id="alter_table_rename_to">
+        <table name="t_order" start-index="12" stop-index="18">
+            <table-bound>
+                <original-database name="foo_db_1" />
+                <original-schema name="foo_db_1" />
+            </table-bound>
+        </table>
+        <rename-table name="t_order_tmp" start-index="30" stop-index="40">
+            <table-bound>
+                <original-database name="foo_db_1" />
+                <original-schema name="foo_db_1" />
+            </table-bound>
+        </rename-table>
+    </alter-table>
+
+    <alter-table 
sql-case-id="alter_table_rename_to_with_skip_metadata_validate">
+        <comment start-index="0" stop-index="53" text="/* SHARDINGSPHERE_HINT: 
SKIP_METADATA_VALIDATE=true */" />
+        <table name="t_order" start-index="67" stop-index="73">
+            <table-bound>
+                <original-database name="foo_db_1" />
+                <original-schema name="foo_db_1" />
+            </table-bound>
+        </table>
+        <rename-table name="t_order_item" start-index="85" stop-index="96">
+            <table-bound>
+                <original-database name="foo_db_1" />
+                <original-schema name="foo_db_1" />
+            </table-bound>
+        </rename-table>
+    </alter-table>
+</sql-parser-test-cases>
diff --git a/test/it/binder/src/test/resources/cases/ddl/create-table.xml 
b/test/it/binder/src/test/resources/cases/ddl/create-table.xml
index 59815b36015..7d9a3c1e94f 100644
--- a/test/it/binder/src/test/resources/cases/ddl/create-table.xml
+++ b/test/it/binder/src/test/resources/cases/ddl/create-table.xml
@@ -85,4 +85,143 @@
             </column>
         </column-definition>
     </create-table>
+
+    <create-table sql-case-id="create_table_with_if_not_exists">
+        <table name="t_order" start-index="27" stop-index="33">
+            <table-bound>
+                <original-database name="foo_db_1" />
+                <original-schema name="foo_db_1" />
+            </table-bound>
+        </table>
+        <column-definition type="BIGINT" primary-key="true" start-index="36" 
stop-index="62">
+            <column name="order_id">
+                <column-bound>
+                    <original-database name="foo_db_1" />
+                    <original-schema name="foo_db_1" />
+                    <original-table name="t_order" />
+                    <original-column name="order_id" start-delimiter="`" 
end-delimiter="`" />
+                </column-bound>
+            </column>
+        </column-definition>
+        <column-definition type="INT" not-null="true" start-index="65" 
stop-index="84">
+            <column name="user_id">
+                <column-bound>
+                    <original-database name="foo_db_1" />
+                    <original-schema name="foo_db_1" />
+                    <original-table name="t_order" />
+                    <original-column name="user_id" start-delimiter="`" 
end-delimiter="`" />
+                </column-bound>
+            </column>
+        </column-definition>
+        <column-definition type="VARCHAR" not-null="true" start-index="87" 
stop-index="113">
+            <column name="status">
+                <column-bound>
+                    <original-database name="foo_db_1" />
+                    <original-schema name="foo_db_1" />
+                    <original-table name="t_order" />
+                    <original-column name="status" start-delimiter="`" 
end-delimiter="`" />
+                </column-bound>
+            </column>
+        </column-definition>
+        <column-definition type="INT" start-index="116" stop-index="130">
+            <column name="merchant_id">
+                <column-bound>
+                    <original-database name="foo_db_1" />
+                    <original-schema name="foo_db_1" />
+                    <original-table name="t_order" />
+                    <original-column name="merchant_id" start-delimiter="`" 
end-delimiter="`" />
+                </column-bound>
+            </column>
+        </column-definition>
+        <column-definition type="VARCHAR" not-null="true" start-index="133" 
stop-index="159">
+            <column name="remark">
+                <column-bound>
+                    <original-database name="foo_db_1" />
+                    <original-schema name="foo_db_1" />
+                    <original-table name="t_order" />
+                    <original-column name="remark" start-delimiter="`" 
end-delimiter="`" />
+                </column-bound>
+            </column>
+        </column-definition>
+        <column-definition type="DATE" not-null="true" start-index="162" 
stop-index="188">
+            <column name="creation_date">
+                <column-bound>
+                    <original-database name="foo_db_1" />
+                    <original-schema name="foo_db_1" />
+                    <original-table name="t_order" />
+                    <original-column name="creation_date" start-delimiter="`" 
end-delimiter="`" />
+                </column-bound>
+            </column>
+        </column-definition>
+    </create-table>
+
+    <create-table sql-case-id="create_table_with_skip_metadata_validate">
+        <comment start-index="0" stop-index="53" text="/* SHARDINGSPHERE_HINT: 
SKIP_METADATA_VALIDATE=true */" />
+        <table name="t_order" start-index="68" stop-index="74">
+            <table-bound>
+                <original-database name="foo_db_1" />
+                <original-schema name="foo_db_1" />
+            </table-bound>
+        </table>
+        <column-definition type="BIGINT" primary-key="true" start-index="77" 
stop-index="103">
+            <column name="order_id">
+                <column-bound>
+                    <original-database name="foo_db_1" />
+                    <original-schema name="foo_db_1" />
+                    <original-table name="t_order" />
+                    <original-column name="order_id" start-delimiter="`" 
end-delimiter="`" />
+                </column-bound>
+            </column>
+        </column-definition>
+        <column-definition type="INT" not-null="true" start-index="106" 
stop-index="125">
+            <column name="user_id">
+                <column-bound>
+                    <original-database name="foo_db_1" />
+                    <original-schema name="foo_db_1" />
+                    <original-table name="t_order" />
+                    <original-column name="user_id" start-delimiter="`" 
end-delimiter="`" />
+                </column-bound>
+            </column>
+        </column-definition>
+        <column-definition type="VARCHAR" not-null="true" start-index="128" 
stop-index="154">
+            <column name="status">
+                <column-bound>
+                    <original-database name="foo_db_1" />
+                    <original-schema name="foo_db_1" />
+                    <original-table name="t_order" />
+                    <original-column name="status" start-delimiter="`" 
end-delimiter="`" />
+                </column-bound>
+            </column>
+        </column-definition>
+        <column-definition type="INT" start-index="157" stop-index="171">
+            <column name="merchant_id">
+                <column-bound>
+                    <original-database name="foo_db_1" />
+                    <original-schema name="foo_db_1" />
+                    <original-table name="t_order" />
+                    <original-column name="merchant_id" start-delimiter="`" 
end-delimiter="`" />
+                </column-bound>
+            </column>
+        </column-definition>
+        <column-definition type="VARCHAR" not-null="true" start-index="174" 
stop-index="200">
+            <column name="remark">
+                <column-bound>
+                    <original-database name="foo_db_1" />
+                    <original-schema name="foo_db_1" />
+                    <original-table name="t_order" />
+                    <original-column name="remark" start-delimiter="`" 
end-delimiter="`" />
+                </column-bound>
+            </column>
+        </column-definition>
+        <column-definition type="DATE" not-null="true" start-index="203" 
stop-index="229">
+            <column name="creation_date">
+                <column-bound>
+                    <original-database name="foo_db_1" />
+                    <original-schema name="foo_db_1" />
+                    <original-table name="t_order" />
+                    <original-column name="creation_date" start-delimiter="`" 
end-delimiter="`" />
+                </column-bound>
+            </column>
+        </column-definition>
+    </create-table>
 </sql-parser-test-cases>
diff --git a/test/it/binder/src/test/resources/cases/ddl/drop-table.xml 
b/test/it/binder/src/test/resources/cases/ddl/drop-table.xml
new file mode 100644
index 00000000000..b4c6b8a2958
--- /dev/null
+++ b/test/it/binder/src/test/resources/cases/ddl/drop-table.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<sql-parser-test-cases>
+    <drop-table sql-case-id="drop_table">
+        <table name="t_order" start-index="11" stop-index="17">
+            <table-bound>
+                <original-database name="foo_db_1" />
+                <original-schema name="foo_db_1" />
+            </table-bound>
+        </table>
+        <table name="t_order_item" start-index="20" stop-index="31">
+            <table-bound>
+                <original-database name="foo_db_1" />
+                <original-schema name="foo_db_1" />
+            </table-bound>
+        </table>
+    </drop-table>
+
+    <drop-table sql-case-id="drop_table_with_if_exists">
+        <table name="t_order" start-index="21" stop-index="27">
+            <table-bound>
+                <original-database name="foo_db_1" />
+                <original-schema name="foo_db_1" />
+            </table-bound>
+        </table>
+        <table name="t_order_tmp" start-index="30" stop-index="40">
+            <table-bound>
+                <original-database name="foo_db_1" />
+                <original-schema name="foo_db_1" />
+            </table-bound>
+        </table>
+    </drop-table>
+</sql-parser-test-cases>
diff --git a/test/it/binder/src/test/resources/sqls/ddl/create-table.xml 
b/test/it/binder/src/test/resources/sqls/ddl/alter-table.xml
similarity index 73%
copy from test/it/binder/src/test/resources/sqls/ddl/create-table.xml
copy to test/it/binder/src/test/resources/sqls/ddl/alter-table.xml
index 35e75c68f61..85facde2b03 100644
--- a/test/it/binder/src/test/resources/sqls/ddl/create-table.xml
+++ b/test/it/binder/src/test/resources/sqls/ddl/alter-table.xml
@@ -17,5 +17,6 @@
   -->
 
 <sql-cases>
-    <sql-case id="create_table" value="CREATE TABLE t_order_tmp (order_id 
BIGINT PRIMARY KEY, user_id INT NOT NULL, status VARCHAR(50) NOT NULL, 
merchant_id INT, remark VARCHAR(50) NOT NULL, creation_date DATE NOT NULL)" 
db-types="MySQL,Doris" />
+    <sql-case id="alter_table_rename_to" value="ALTER TABLE t_order RENAME TO 
t_order_tmp" db-types="MySQL,Doris" />
+    <sql-case id="alter_table_rename_to_with_skip_metadata_validate" value="/* 
SHARDINGSPHERE_HINT: SKIP_METADATA_VALIDATE=true */ ALTER TABLE t_order RENAME 
TO t_order_item" db-types="MySQL,Doris" />
 </sql-cases>
diff --git a/test/it/binder/src/test/resources/sqls/ddl/create-table.xml 
b/test/it/binder/src/test/resources/sqls/ddl/create-table.xml
index 35e75c68f61..901b5bd167f 100644
--- a/test/it/binder/src/test/resources/sqls/ddl/create-table.xml
+++ b/test/it/binder/src/test/resources/sqls/ddl/create-table.xml
@@ -18,4 +18,6 @@
 
 <sql-cases>
     <sql-case id="create_table" value="CREATE TABLE t_order_tmp (order_id 
BIGINT PRIMARY KEY, user_id INT NOT NULL, status VARCHAR(50) NOT NULL, 
merchant_id INT, remark VARCHAR(50) NOT NULL, creation_date DATE NOT NULL)" 
db-types="MySQL,Doris" />
+    <sql-case id="create_table_with_if_not_exists" value="CREATE TABLE IF NOT 
EXISTS t_order (order_id BIGINT PRIMARY KEY, user_id INT NOT NULL, status 
VARCHAR(50) NOT NULL, merchant_id INT, remark VARCHAR(50) NOT NULL, 
creation_date DATE NOT NULL)" db-types="MySQL,Doris" />
+    <sql-case id="create_table_with_skip_metadata_validate" value="/* 
SHARDINGSPHERE_HINT: SKIP_METADATA_VALIDATE=true */ CREATE TABLE t_order 
(order_id BIGINT PRIMARY KEY, user_id INT NOT NULL, status VARCHAR(50) NOT 
NULL, merchant_id INT, remark VARCHAR(50) NOT NULL, creation_date DATE NOT 
NULL)" db-types="MySQL,Doris" />
 </sql-cases>
diff --git a/test/it/binder/src/test/resources/sqls/ddl/create-table.xml 
b/test/it/binder/src/test/resources/sqls/ddl/drop-table.xml
similarity index 78%
copy from test/it/binder/src/test/resources/sqls/ddl/create-table.xml
copy to test/it/binder/src/test/resources/sqls/ddl/drop-table.xml
index 35e75c68f61..7ee357740b8 100644
--- a/test/it/binder/src/test/resources/sqls/ddl/create-table.xml
+++ b/test/it/binder/src/test/resources/sqls/ddl/drop-table.xml
@@ -17,5 +17,6 @@
   -->
 
 <sql-cases>
-    <sql-case id="create_table" value="CREATE TABLE t_order_tmp (order_id 
BIGINT PRIMARY KEY, user_id INT NOT NULL, status VARCHAR(50) NOT NULL, 
merchant_id INT, remark VARCHAR(50) NOT NULL, creation_date DATE NOT NULL)" 
db-types="MySQL,Doris" />
+    <sql-case id="drop_table" value="DROP TABLE t_order, t_order_item" 
db-types="MySQL,Doris" />
+    <sql-case id="drop_table_with_if_exists" value="DROP TABLE IF EXISTS 
t_order, t_order_tmp" db-types="MySQL,Doris" />
 </sql-cases>
diff --git 
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/scenario/ShardingSQLRewriterIT.java
 
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/scenario/ShardingSQLRewriterIT.java
index 0c939beff96..29164a346a4 100644
--- 
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/scenario/ShardingSQLRewriterIT.java
+++ 
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/scenario/ShardingSQLRewriterIT.java
@@ -103,6 +103,13 @@ class ShardingSQLRewriterIT extends SQLRewriterIT {
         tables.add(new ShardingSphereTable("t_account_view", Arrays.asList(
                 new ShardingSphereColumn("id", Types.INTEGER, false, false, 
false, true, false, false),
                 new ShardingSphereColumn("account_id", Types.INTEGER, false, 
false, false, true, false, false)), Collections.emptyList(), 
Collections.emptyList()));
+        tables.add(new ShardingSphereTable("t_order", Arrays.asList(
+                new ShardingSphereColumn("order_id", Types.BIGINT, true, 
false, false, true, false, false),
+                new ShardingSphereColumn("user_id", Types.INTEGER, false, 
false, false, true, false, false),
+                new ShardingSphereColumn("status", Types.VARCHAR, false, 
false, false, true, false, false),
+                new ShardingSphereColumn("merchant_id", Types.INTEGER, false, 
false, false, true, false, true),
+                new ShardingSphereColumn("remark", Types.VARCHAR, false, 
false, false, true, false, false),
+                new ShardingSphereColumn("creation_date", Types.DATE, false, 
false, false, true, false, false)), Collections.emptyList(), 
Collections.emptyList()));
         return Collections.singleton(new ShardingSphereSchema(schemaName, 
tables, Collections.emptyList()));
     }
     
diff --git 
a/test/it/rewriter/src/test/resources/scenario/sharding/case/ddl/alter-table.xml
 
b/test/it/rewriter/src/test/resources/scenario/sharding/case/ddl/alter-table.xml
index 3e78878bc49..e33dcd23c75 100644
--- 
a/test/it/rewriter/src/test/resources/scenario/sharding/case/ddl/alter-table.xml
+++ 
b/test/it/rewriter/src/test/resources/scenario/sharding/case/ddl/alter-table.xml
@@ -70,8 +70,8 @@
         <output sql="ALTER TABLE t_single ADD CONSTRAINT t_single_fk FOREIGN 
KEY (order_id) REFERENCES t_single_extend (order_id)" />
     </rewrite-assertion>
     <rewrite-assertion id="alter_table_with_single_table_with_rename_table" 
db-types="MySQL,PostgreSQL,openGauss">
-        <input sql="ALTER TABLE t_single RENAME TO t_single_extend" />
-        <output sql="ALTER TABLE t_single RENAME TO t_single_extend" />
+        <input sql="ALTER TABLE t_single RENAME TO t_single_tmp" />
+        <output sql="ALTER TABLE t_single RENAME TO t_single_tmp" />
     </rewrite-assertion>
     <rewrite-assertion id="alter_table_with_multi_data_node_drop_constraint" 
db-types="MySQL,PostgreSQL,openGauss">
         <input sql="ALTER TABLE t_account DROP CONSTRAINT t_account_fk" />

Reply via email to