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 <[email protected]>
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;
+ }
}