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; + } }