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 a79e04d20b3 Merge RenameTableStatementContext and 
TableAvailableSQLStatementContext (#35692)
a79e04d20b3 is described below

commit a79e04d20b3b6a48b28ac4fbf13322bb7ff919a9
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Fri Jun 13 16:27:37 2025 +0800

    Merge RenameTableStatementContext and TableAvailableSQLStatementContext 
(#35692)
    
    * Merge RenameTableStatementContext and TableAvailableSQLStatementContext
    
    * Merge RenameTableStatementContext and TableAvailableSQLStatementContext
---
 .../ddl/ShardingRenameTableSupportedChecker.java   | 11 ++--
 .../ShardingRenameTableRouteContextChecker.java    |  4 +-
 .../ShardingRenameTableSupportedCheckerTest.java   | 17 ++++---
 ...ShardingRenameTableRouteContextCheckerTest.java | 10 ++--
 .../statement/SQLStatementContextFactory.java      |  3 +-
 .../type/ddl/RenameTableStatementContext.java      | 58 ----------------------
 .../core/statement/ddl/RenameTableStatement.java   | 16 ++++++
 7 files changed, 41 insertions(+), 78 deletions(-)

diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingRenameTableSupportedChecker.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingRenameTableSupportedChecker.java
index 9297b2f14fe..8252cdf2bdd 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingRenameTableSupportedChecker.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingRenameTableSupportedChecker.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.sharding.checker.sql.ddl;
 
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
-import 
org.apache.shardingsphere.infra.binder.context.statement.type.ddl.RenameTableStatementContext;
+import 
org.apache.shardingsphere.infra.binder.context.statement.TableAvailableSQLStatementContext;
 import org.apache.shardingsphere.infra.checker.SupportedSQLChecker;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
@@ -27,6 +27,7 @@ import 
org.apache.shardingsphere.sharding.exception.syntax.UnsupportedShardingOp
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.RenameTableDefinitionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.RenameTableStatement;
 
 import java.util.Collection;
 import java.util.List;
@@ -35,18 +36,18 @@ import java.util.stream.Collectors;
 /**
  * Rename table supported checker for sharding.
  */
-public final class ShardingRenameTableSupportedChecker implements 
SupportedSQLChecker<RenameTableStatementContext, ShardingRule> {
+public final class ShardingRenameTableSupportedChecker implements 
SupportedSQLChecker<TableAvailableSQLStatementContext, ShardingRule> {
     
     @Override
     public boolean isCheck(final SQLStatementContext sqlStatementContext) {
-        return sqlStatementContext instanceof RenameTableStatementContext;
+        return sqlStatementContext.getSqlStatement() instanceof 
RenameTableStatement;
     }
     
     @Override
-    public void check(final ShardingRule rule, final ShardingSphereDatabase 
database, final ShardingSphereSchema currentSchema, final 
RenameTableStatementContext sqlStatementContext) {
+    public void check(final ShardingRule rule, final ShardingSphereDatabase 
database, final ShardingSphereSchema currentSchema, final 
TableAvailableSQLStatementContext sqlStatementContext) {
         Collection<String> tableNames = 
sqlStatementContext.getTablesContext().getSimpleTables().stream()
                 .map(each -> 
each.getTableName().getIdentifier().getValue()).collect(Collectors.toList());
-        List<SimpleTableSegment> renameTables = 
sqlStatementContext.getSqlStatement()
+        List<SimpleTableSegment> renameTables = ((RenameTableStatement) 
sqlStatementContext.getSqlStatement())
                 
.getRenameTables().stream().map(RenameTableDefinitionSegment::getRenameTable).collect(Collectors.toList());
         ShardingSpherePreconditions.checkState(renameTables.isEmpty() || 
!rule.containsShardingTable(tableNames),
                 () -> new UnsupportedShardingOperationException("RENAME 
TABLE", renameTables.get(0).getTableName().getIdentifier().getValue()));
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingRenameTableRouteContextChecker.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingRenameTableRouteContextChecker.java
index 5c20f0a9314..912ea64cc5e 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingRenameTableRouteContextChecker.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingRenameTableRouteContextChecker.java
@@ -17,7 +17,7 @@
 
 package org.apache.shardingsphere.sharding.route.engine.checker.ddl;
 
-import 
org.apache.shardingsphere.infra.binder.context.statement.type.ddl.RenameTableStatementContext;
+import 
org.apache.shardingsphere.infra.binder.context.statement.TableAvailableSQLStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
@@ -41,7 +41,7 @@ public final class ShardingRenameTableRouteContextChecker 
implements ShardingRou
         for (RenameTableDefinitionSegment each : 
renameTableStatement.getRenameTables()) {
             String primaryTable = 
each.getTable().getTableName().getIdentifier().getValue();
             
ShardingSpherePreconditions.checkState(!ShardingSupportedCheckUtils.isRouteUnitDataNodeDifferentSize(shardingRule,
 routeContext, primaryTable),
-                    () -> new ShardingDDLRouteException("RENAME", "TABLE", 
((RenameTableStatementContext) 
queryContext.getSqlStatementContext()).getTablesContext().getTableNames()));
+                    () -> new ShardingDDLRouteException("RENAME", "TABLE", 
((TableAvailableSQLStatementContext) 
queryContext.getSqlStatementContext()).getTablesContext().getTableNames()));
         }
     }
 }
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingRenameTableSupportedCheckerTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingRenameTableSupportedCheckerTest.java
index d80746d8549..ea9f22f4679 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingRenameTableSupportedCheckerTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingRenameTableSupportedCheckerTest.java
@@ -17,7 +17,7 @@
 
 package org.apache.shardingsphere.sharding.checker.sql.ddl;
 
-import 
org.apache.shardingsphere.infra.binder.context.statement.type.ddl.RenameTableStatementContext;
+import 
org.apache.shardingsphere.infra.binder.context.statement.TableAvailableSQLStatementContext;
 import 
org.apache.shardingsphere.sharding.exception.syntax.UnsupportedShardingOperationException;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.RenameTableDefinitionSegment;
@@ -30,6 +30,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 
+import java.util.Arrays;
 import java.util.Collections;
 
 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
@@ -46,23 +47,25 @@ class ShardingRenameTableSupportedCheckerTest {
     
     @Test
     void assertCheckShardingTable() {
-        RenameTableStatementContext sqlStatementContext = 
createRenameTableStatementContext("t_order", "t_user_order");
+        TableAvailableSQLStatementContext sqlStatementContext = 
createRenameTableStatementContext("t_order", "t_user_order");
         when(rule.containsShardingTable(argThat(tableNames -> 
tableNames.contains("t_order") || 
tableNames.contains("t_user_order")))).thenReturn(true);
         assertThrows(UnsupportedShardingOperationException.class, () -> new 
ShardingRenameTableSupportedChecker().check(rule, mock(), mock(), 
sqlStatementContext));
     }
     
     @Test
     void assertCheckNormalCase() {
-        RenameTableStatementContext sqlStatementContext = 
createRenameTableStatementContext("t_not_sharding_table", 
"t_not_sharding_table_new");
+        TableAvailableSQLStatementContext sqlStatementContext = 
createRenameTableStatementContext("t_not_sharding_table", 
"t_not_sharding_table_new");
         assertDoesNotThrow(() -> new 
ShardingRenameTableSupportedChecker().check(rule, mock(), mock(), 
sqlStatementContext));
     }
     
-    private RenameTableStatementContext 
createRenameTableStatementContext(final String originTableName, final String 
newTableName) {
+    private TableAvailableSQLStatementContext 
createRenameTableStatementContext(final String originTableName, final String 
newTableName) {
         RenameTableStatement sqlStatement = mock(RenameTableStatement.class);
         RenameTableDefinitionSegment renameTableDefinitionSegment = new 
RenameTableDefinitionSegment(0, 0);
-        renameTableDefinitionSegment.setTable(new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue(originTableName))));
-        renameTableDefinitionSegment.setRenameTable(new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue(newTableName))));
+        SimpleTableSegment table = new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue(originTableName)));
+        SimpleTableSegment renameTable = new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue(newTableName)));
+        renameTableDefinitionSegment.setTable(table);
+        renameTableDefinitionSegment.setRenameTable(renameTable);
         
when(sqlStatement.getRenameTables()).thenReturn(Collections.singleton(renameTableDefinitionSegment));
-        return new RenameTableStatementContext(mock(), sqlStatement);
+        return new TableAvailableSQLStatementContext(mock(), sqlStatement, 
Arrays.asList(table, renameTable));
     }
 }
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingRenameTableRouteContextCheckerTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingRenameTableRouteContextCheckerTest.java
index 5659b967849..48c83833a44 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingRenameTableRouteContextCheckerTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingRenameTableRouteContextCheckerTest.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.sharding.route.engine.checker.ddl;
 
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
-import 
org.apache.shardingsphere.infra.binder.context.statement.type.ddl.RenameTableStatementContext;
+import 
org.apache.shardingsphere.infra.binder.context.statement.TableAvailableSQLStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.datanode.DataNode;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
@@ -88,9 +88,11 @@ class ShardingRenameTableRouteContextCheckerTest {
     private SQLStatementContext createRenameTableStatementContext() {
         RenameTableStatement sqlStatement = mock(RenameTableStatement.class);
         RenameTableDefinitionSegment renameTableDefinitionSegment = new 
RenameTableDefinitionSegment(0, 0);
-        renameTableDefinitionSegment.setTable(new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue("foo_tbl"))));
-        renameTableDefinitionSegment.setRenameTable(new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue("bar_tbl"))));
+        SimpleTableSegment table = new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue("foo_tbl")));
+        renameTableDefinitionSegment.setTable(table);
+        SimpleTableSegment renameTable = new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue("bar_tbl")));
+        renameTableDefinitionSegment.setRenameTable(renameTable);
         
when(sqlStatement.getRenameTables()).thenReturn(Collections.singleton(renameTableDefinitionSegment));
-        return new RenameTableStatementContext(mock(), sqlStatement);
+        return new TableAvailableSQLStatementContext(mock(), sqlStatement, 
Arrays.asList(table, renameTable));
     }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/SQLStatementContextFactory.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/SQLStatementContextFactory.java
index 241d7f640d6..7288ef2987a 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/SQLStatementContextFactory.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/SQLStatementContextFactory.java
@@ -43,7 +43,6 @@ import 
org.apache.shardingsphere.infra.binder.context.statement.type.ddl.DropVie
 import 
org.apache.shardingsphere.infra.binder.context.statement.type.ddl.FetchStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.type.ddl.MoveStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.type.ddl.PrepareStatementContext;
-import 
org.apache.shardingsphere.infra.binder.context.statement.type.ddl.RenameTableStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.type.dml.CopyStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.type.dml.DeleteStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.type.dml.InsertStatementContext;
@@ -186,7 +185,7 @@ public final class SQLStatementContextFactory {
             return new AlterTableStatementContext(databaseType, 
(AlterTableStatement) sqlStatement);
         }
         if (sqlStatement instanceof RenameTableStatement) {
-            return new RenameTableStatementContext(databaseType, 
(RenameTableStatement) sqlStatement);
+            return new TableAvailableSQLStatementContext(databaseType, 
sqlStatement, ((RenameTableStatement) sqlStatement).getTables());
         }
         if (sqlStatement instanceof DropTableStatement) {
             return new DropTableStatementContext(databaseType, 
(DropTableStatement) sqlStatement);
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/ddl/RenameTableStatementContext.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/ddl/RenameTableStatementContext.java
deleted file mode 100644
index c6d794ed959..00000000000
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/ddl/RenameTableStatementContext.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.infra.binder.context.statement.type.ddl;
-
-import lombok.Getter;
-import 
org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext;
-import 
org.apache.shardingsphere.infra.binder.context.statement.CommonSQLStatementContext;
-import org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.RenameTableDefinitionSegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.RenameTableStatement;
-
-import java.util.Collection;
-import java.util.LinkedList;
-
-/**
- * Rename table statement context.
- */
-@Getter
-public final class RenameTableStatementContext extends 
CommonSQLStatementContext implements TableAvailable {
-    
-    private final TablesContext tablesContext;
-    
-    public RenameTableStatementContext(final DatabaseType databaseType, final 
RenameTableStatement sqlStatement) {
-        super(databaseType, sqlStatement);
-        tablesContext = new TablesContext(getTables(sqlStatement));
-    }
-    
-    private Collection<SimpleTableSegment> getTables(final 
RenameTableStatement sqlStatement) {
-        Collection<SimpleTableSegment> result = new LinkedList<>();
-        for (RenameTableDefinitionSegment each : 
sqlStatement.getRenameTables()) {
-            result.add(each.getTable());
-            result.add(each.getRenameTable());
-        }
-        return result;
-    }
-    
-    @Override
-    public RenameTableStatement getSqlStatement() {
-        return (RenameTableStatement) super.getSqlStatement();
-    }
-}
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/RenameTableStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/RenameTableStatement.java
index 0d5e8bef740..b8c211e6116 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/RenameTableStatement.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/RenameTableStatement.java
@@ -20,9 +20,11 @@ package 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.RenameTableDefinitionSegment;
+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;
 
 /**
  * Rename table statement.
@@ -32,4 +34,18 @@ import java.util.Collection;
 public final class RenameTableStatement extends AbstractSQLStatement 
implements DDLStatement {
     
     private final Collection<RenameTableDefinitionSegment> renameTables;
+    
+    /**
+     * Get tables.
+     *
+     * @return tables
+     */
+    public Collection<SimpleTableSegment> getTables() {
+        Collection<SimpleTableSegment> result = new LinkedList<>();
+        for (RenameTableDefinitionSegment each : renameTables) {
+            result.add(each.getTable());
+            result.add(each.getRenameTable());
+        }
+        return result;
+    }
 }

Reply via email to