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 054541b67d2 Add Tableless prefix for DataSourceBroadcastRouteEngine and InstanceBroadcastRouteEngine (#33935) 054541b67d2 is described below commit 054541b67d2033f0109440227812991c71770970 Author: Zhengqiang Duan <duanzhengqi...@apache.org> AuthorDate: Fri Dec 6 15:19:58 2024 +0800 Add Tableless prefix for DataSourceBroadcastRouteEngine and InstanceBroadcastRouteEngine (#33935) * Add Tableless prefix for DataSourceBroadcastRouteEngine and InstanceBroadcastRouteEngine * revert wrong change --- ...hardingDataSourceGroupBroadcastRouteEngine.java | 93 ---------------------- ...ingDataSourceGroupBroadcastRouteEngineTest.java | 84 ------------------- .../infra/route/engine/SQLRouteEngine.java | 2 +- .../tableless/TablelessRouteEngineFactory.java | 30 +++---- .../tableless/router/TablelessSQLRouter.java | 9 ++- ...> TablelessDataSourceBroadcastRouteEngine.java} | 4 +- ... => TablelessInstanceBroadcastRouteEngine.java} | 4 +- ...Engine.java => TablelessIgnoreRouteEngine.java} | 4 +- .../engine/router/TablelessSQLRouterTest.java | 73 +++++++++++++++++ .../tableless/TablelessRouteEngineFactoryTest.java | 22 ++--- 10 files changed, 112 insertions(+), 213 deletions(-) diff --git a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingDataSourceGroupBroadcastRouteEngine.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingDataSourceGroupBroadcastRouteEngine.java deleted file mode 100644 index 00456c021c8..00000000000 --- a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingDataSourceGroupBroadcastRouteEngine.java +++ /dev/null @@ -1,93 +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.sharding.route.engine.type.broadcast; - -import com.google.common.collect.Sets; -import org.apache.shardingsphere.infra.route.context.RouteContext; -import org.apache.shardingsphere.infra.route.context.RouteMapper; -import org.apache.shardingsphere.infra.route.context.RouteUnit; -import org.apache.shardingsphere.sharding.route.engine.type.ShardingRouteEngine; -import org.apache.shardingsphere.sharding.rule.ShardingRule; -import org.apache.shardingsphere.sharding.rule.ShardingTable; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.LinkedList; -import java.util.Set; -import java.util.concurrent.ThreadLocalRandom; - -/** - * Sharding data source group broadcast route engine. - */ -public final class ShardingDataSourceGroupBroadcastRouteEngine implements ShardingRouteEngine { - - @Override - public RouteContext route(final ShardingRule shardingRule) { - RouteContext result = new RouteContext(); - Collection<Set<String>> broadcastDataSourceGroup = getBroadcastDataSourceGroup(getDataSourceGroup(shardingRule)); - for (Set<String> each : broadcastDataSourceGroup) { - String dataSourceName = getRandomDataSourceName(each); - result.getRouteUnits().add(new RouteUnit(new RouteMapper(dataSourceName, dataSourceName), Collections.emptyList())); - } - return result; - } - - private Collection<Set<String>> getBroadcastDataSourceGroup(final Collection<Set<String>> dataSourceGroup) { - Collection<Set<String>> result = new LinkedList<>(); - for (Set<String> each : dataSourceGroup) { - result = getCandidateDataSourceGroup(result, each); - } - return result; - } - - private Collection<Set<String>> getDataSourceGroup(final ShardingRule shardingRule) { - Collection<Set<String>> result = new LinkedList<>(); - for (ShardingTable each : shardingRule.getShardingTables().values()) { - result.add(each.getDataNodeGroups().keySet()); - } - return result; - } - - private Collection<Set<String>> getCandidateDataSourceGroup(final Collection<Set<String>> dataSourceSetGroup, final Set<String> compareSet) { - Collection<Set<String>> result = new LinkedList<>(); - if (dataSourceSetGroup.isEmpty()) { - result.add(compareSet); - return result; - } - Set<String> intersections; - boolean hasIntersection = false; - for (Set<String> each : dataSourceSetGroup) { - intersections = Sets.intersection(each, compareSet); - if (intersections.isEmpty()) { - result.add(each); - } else { - result.add(intersections); - hasIntersection = true; - } - } - if (!hasIntersection) { - result.add(compareSet); - } - return result; - } - - private String getRandomDataSourceName(final Collection<String> dataSourceNames) { - return new ArrayList<>(dataSourceNames).get(ThreadLocalRandom.current().nextInt(dataSourceNames.size())); - } -} diff --git a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingDataSourceGroupBroadcastRouteEngineTest.java b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingDataSourceGroupBroadcastRouteEngineTest.java deleted file mode 100644 index f4e91205a77..00000000000 --- a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingDataSourceGroupBroadcastRouteEngineTest.java +++ /dev/null @@ -1,84 +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.sharding.route.engine.type.broadcast; - -import org.apache.shardingsphere.infra.datanode.DataNode; -import org.apache.shardingsphere.infra.route.context.RouteContext; -import org.apache.shardingsphere.infra.route.context.RouteUnit; -import org.apache.shardingsphere.sharding.rule.ShardingRule; -import org.apache.shardingsphere.sharding.rule.ShardingTable; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -import static org.hamcrest.CoreMatchers.hasItems; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -@ExtendWith(MockitoExtension.class) -class ShardingDataSourceGroupBroadcastRouteEngineTest { - - private final ShardingDataSourceGroupBroadcastRouteEngine shardingDataSourceGroupBroadcastRouteEngine = new ShardingDataSourceGroupBroadcastRouteEngine(); - - @Mock - private ShardingRule shardingRule; - - private Map<String, ShardingTable> mockShardingTables(final List<List<String>> shards) { - Map<String, ShardingTable> result = new LinkedHashMap<>(shards.size(), 1F); - int index = 0; - for (List<String> each : shards) { - result.put("table_" + index++, mockShardingTable(each)); - } - return result; - } - - private ShardingTable mockShardingTable(final List<String> dataSources) { - ShardingTable result = mock(ShardingTable.class); - Map<String, List<DataNode>> dataNodeGroups = new HashMap<>(dataSources.size(), 1F); - for (String each : dataSources) { - dataNodeGroups.put(each, null); - } - when(result.getDataNodeGroups()).thenReturn(dataNodeGroups); - return result; - } - - @Test - void assertRoute() { - List<List<String>> shards = new LinkedList<>(); - shards.add(Arrays.asList("ds1", "ds2", "ds3")); - shards.add(Arrays.asList("ds1", "ds2", "ds3")); - shards.add(Arrays.asList("ds1", "ds2", "ds3")); - Map<String, ShardingTable> shardingTables = mockShardingTables(shards); - when(shardingRule.getShardingTables()).thenReturn(shardingTables); - RouteContext routeContext = shardingDataSourceGroupBroadcastRouteEngine.route(shardingRule); - assertThat(routeContext.getRouteUnits().size(), is(1)); - Iterator<RouteUnit> iterator = routeContext.getRouteUnits().iterator(); - assertThat(Arrays.asList("ds1", "ds2", "ds3"), hasItems(iterator.next().getDataSourceMapper().getActualName())); - } -} diff --git a/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/SQLRouteEngine.java b/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/SQLRouteEngine.java index 90facba37f6..d238d8e140f 100644 --- a/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/SQLRouteEngine.java +++ b/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/SQLRouteEngine.java @@ -96,7 +96,7 @@ public final class SQLRouteEngine { } Collection<String> tableNames = SQLStatementContextExtractor.getTableNames(database, queryContext.getSqlStatementContext()); result = route(queryContext, globalRuleMetaData, database, tableRouters, tableNames, result); - result = new TablelessSQLRouter().route(queryContext, globalRuleMetaData, database, result); + result = new TablelessSQLRouter().route(queryContext, globalRuleMetaData, database, tableNames, result); result = route(queryContext, globalRuleMetaData, database, dataSourceRouters, tableNames, result); if (result.getRouteUnits().isEmpty() && 1 == database.getResourceMetaData().getStorageUnits().size()) { String singleDataSourceName = database.getResourceMetaData().getStorageUnits().keySet().iterator().next(); diff --git a/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/TablelessRouteEngineFactory.java b/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/TablelessRouteEngineFactory.java index 3123ef1e68e..ffdd319c194 100644 --- a/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/TablelessRouteEngineFactory.java +++ b/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/TablelessRouteEngineFactory.java @@ -22,9 +22,9 @@ import lombok.NoArgsConstructor; import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext; import org.apache.shardingsphere.infra.binder.context.statement.ddl.CloseStatementContext; import org.apache.shardingsphere.infra.binder.context.type.CursorAvailable; -import org.apache.shardingsphere.infra.route.engine.tableless.type.broadcast.DataSourceBroadcastRouteEngine; -import org.apache.shardingsphere.infra.route.engine.tableless.type.broadcast.InstanceBroadcastRouteEngine; -import org.apache.shardingsphere.infra.route.engine.tableless.type.ignore.IgnoreRouteEngine; +import org.apache.shardingsphere.infra.route.engine.tableless.type.broadcast.TablelessDataSourceBroadcastRouteEngine; +import org.apache.shardingsphere.infra.route.engine.tableless.type.broadcast.TablelessInstanceBroadcastRouteEngine; +import org.apache.shardingsphere.infra.route.engine.tableless.type.ignore.TablelessIgnoreRouteEngine; import org.apache.shardingsphere.infra.session.query.QueryContext; import org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.AlterResourceGroupStatement; @@ -67,27 +67,27 @@ public final class TablelessRouteEngineFactory { if (sqlStatement instanceof DALStatement) { return getDALRouteEngine(sqlStatement); } - // TODO remove this logic when savepoint handle in proxy and jdbc adapter + // TODO remove this logic when savepoint handle in proxy and jdbc adapter @zhangcheng if (sqlStatement instanceof TCLStatement) { - return new DataSourceBroadcastRouteEngine(); + return new TablelessDataSourceBroadcastRouteEngine(); } if (sqlStatement instanceof DDLStatement) { return getDDLRouteEngine(queryContext.getSqlStatementContext()); } - return new IgnoreRouteEngine(); + return new TablelessIgnoreRouteEngine(); } private static TablelessRouteEngine getDALRouteEngine(final SQLStatement sqlStatement) { if (sqlStatement instanceof ShowTablesStatement || sqlStatement instanceof ShowTableStatusStatement || sqlStatement instanceof SetStatement) { - return new DataSourceBroadcastRouteEngine(); + return new TablelessDataSourceBroadcastRouteEngine(); } if (sqlStatement instanceof ResetParameterStatement || sqlStatement instanceof ShowDatabasesStatement || sqlStatement instanceof LoadStatement) { - return new DataSourceBroadcastRouteEngine(); + return new TablelessDataSourceBroadcastRouteEngine(); } if (isResourceGroupStatement(sqlStatement)) { - return new InstanceBroadcastRouteEngine(); + return new TablelessInstanceBroadcastRouteEngine(); } - return new IgnoreRouteEngine(); + return new TablelessIgnoreRouteEngine(); } private static boolean isResourceGroupStatement(final SQLStatement sqlStatement) { @@ -101,9 +101,9 @@ public final class TablelessRouteEngineFactory { } SQLStatement sqlStatement = sqlStatementContext.getSqlStatement(); if (isFunctionDDLStatement(sqlStatement) || isSchemaDDLStatement(sqlStatement)) { - return new DataSourceBroadcastRouteEngine(); + return new TablelessDataSourceBroadcastRouteEngine(); } - return new IgnoreRouteEngine(); + return new TablelessIgnoreRouteEngine(); } private static boolean isFunctionDDLStatement(final SQLStatement sqlStatement) { @@ -116,12 +116,12 @@ public final class TablelessRouteEngineFactory { private static TablelessRouteEngine getCursorRouteEngine(final SQLStatementContext sqlStatementContext) { if (sqlStatementContext instanceof CloseStatementContext && ((CloseStatementContext) sqlStatementContext).getSqlStatement().isCloseAll()) { - return new DataSourceBroadcastRouteEngine(); + return new TablelessDataSourceBroadcastRouteEngine(); } SQLStatement sqlStatement = sqlStatementContext.getSqlStatement(); if (sqlStatement instanceof CreateTablespaceStatement || sqlStatement instanceof AlterTablespaceStatement || sqlStatement instanceof DropTablespaceStatement) { - return new InstanceBroadcastRouteEngine(); + return new TablelessInstanceBroadcastRouteEngine(); } - return new IgnoreRouteEngine(); + return new TablelessIgnoreRouteEngine(); } } diff --git a/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/router/TablelessSQLRouter.java b/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/router/TablelessSQLRouter.java index 1d7cde9ae76..a0ad0b13b30 100644 --- a/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/router/TablelessSQLRouter.java +++ b/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/router/TablelessSQLRouter.java @@ -17,13 +17,14 @@ package org.apache.shardingsphere.infra.route.engine.tableless.router; -import org.apache.shardingsphere.infra.binder.context.extractor.SQLStatementContextExtractor; import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; import org.apache.shardingsphere.infra.route.context.RouteContext; import org.apache.shardingsphere.infra.route.engine.tableless.TablelessRouteEngineFactory; import org.apache.shardingsphere.infra.session.query.QueryContext; +import java.util.Collection; + /** * Tableless sql router. */ @@ -35,11 +36,13 @@ public final class TablelessSQLRouter { * @param queryContext query context * @param globalRuleMetaData global rule meta data * @param database sharding sphere database + * @param tableNames table names * @param routeContext route context * @return route context */ - public RouteContext route(final QueryContext queryContext, final RuleMetaData globalRuleMetaData, final ShardingSphereDatabase database, final RouteContext routeContext) { - if (routeContext.getRouteUnits().isEmpty() && SQLStatementContextExtractor.getTableNames(database, queryContext.getSqlStatementContext()).isEmpty()) { + public RouteContext route(final QueryContext queryContext, final RuleMetaData globalRuleMetaData, final ShardingSphereDatabase database, + final Collection<String> tableNames, final RouteContext routeContext) { + if (tableNames.isEmpty() && routeContext.getRouteUnits().isEmpty()) { return TablelessRouteEngineFactory.newInstance(queryContext).route(globalRuleMetaData, database); } return routeContext; diff --git a/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/type/broadcast/DataSourceBroadcastRouteEngine.java b/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/type/broadcast/TablelessDataSourceBroadcastRouteEngine.java similarity index 92% rename from infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/type/broadcast/DataSourceBroadcastRouteEngine.java rename to infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/type/broadcast/TablelessDataSourceBroadcastRouteEngine.java index 95e8afde12d..b0a87f65144 100644 --- a/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/type/broadcast/DataSourceBroadcastRouteEngine.java +++ b/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/type/broadcast/TablelessDataSourceBroadcastRouteEngine.java @@ -27,9 +27,9 @@ import org.apache.shardingsphere.infra.route.engine.tableless.TablelessRouteEngi import java.util.Collections; /** - * Datasource broadcast route engine. + * Tableless datasource broadcast route engine. */ -public final class DataSourceBroadcastRouteEngine implements TablelessRouteEngine { +public final class TablelessDataSourceBroadcastRouteEngine implements TablelessRouteEngine { @Override public RouteContext route(final RuleMetaData globalRuleMetaData, final ShardingSphereDatabase database) { diff --git a/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/type/broadcast/InstanceBroadcastRouteEngine.java b/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/type/broadcast/TablelessInstanceBroadcastRouteEngine.java similarity index 93% rename from infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/type/broadcast/InstanceBroadcastRouteEngine.java rename to infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/type/broadcast/TablelessInstanceBroadcastRouteEngine.java index c785381317e..c160dadecb9 100644 --- a/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/type/broadcast/InstanceBroadcastRouteEngine.java +++ b/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/type/broadcast/TablelessInstanceBroadcastRouteEngine.java @@ -28,10 +28,10 @@ import org.apache.shardingsphere.infra.route.engine.tableless.TablelessRouteEngi import java.util.Collections; /** - * Instance broadcast route engine. + * Tableless instance broadcast route engine. */ @RequiredArgsConstructor -public final class InstanceBroadcastRouteEngine implements TablelessRouteEngine { +public final class TablelessInstanceBroadcastRouteEngine implements TablelessRouteEngine { @Override public RouteContext route(final RuleMetaData globalRuleMetaData, final ShardingSphereDatabase database) { diff --git a/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/type/ignore/IgnoreRouteEngine.java b/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/type/ignore/TablelessIgnoreRouteEngine.java similarity index 92% rename from infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/type/ignore/IgnoreRouteEngine.java rename to infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/type/ignore/TablelessIgnoreRouteEngine.java index 054910c48f5..060a3345cbf 100644 --- a/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/type/ignore/IgnoreRouteEngine.java +++ b/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/type/ignore/TablelessIgnoreRouteEngine.java @@ -23,9 +23,9 @@ import org.apache.shardingsphere.infra.route.context.RouteContext; import org.apache.shardingsphere.infra.route.engine.tableless.TablelessRouteEngine; /** - * Ignore route engine. + * Tableless ignore route engine. */ -public final class IgnoreRouteEngine implements TablelessRouteEngine { +public final class TablelessIgnoreRouteEngine implements TablelessRouteEngine { @Override public RouteContext route(final RuleMetaData globalRuleMetaData, final ShardingSphereDatabase database) { diff --git a/infra/route/src/test/java/org/apache/shardingsphere/infra/route/engine/router/TablelessSQLRouterTest.java b/infra/route/src/test/java/org/apache/shardingsphere/infra/route/engine/router/TablelessSQLRouterTest.java new file mode 100644 index 00000000000..db8dd14d99c --- /dev/null +++ b/infra/route/src/test/java/org/apache/shardingsphere/infra/route/engine/router/TablelessSQLRouterTest.java @@ -0,0 +1,73 @@ +/* + * 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.route.engine.router; + +import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; +import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; +import org.apache.shardingsphere.infra.route.context.RouteContext; +import org.apache.shardingsphere.infra.route.context.RouteMapper; +import org.apache.shardingsphere.infra.route.context.RouteUnit; +import org.apache.shardingsphere.infra.route.engine.tableless.router.TablelessSQLRouter; +import org.apache.shardingsphere.infra.session.query.QueryContext; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Answers; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.Collections; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertTrue; + +@ExtendWith(MockitoExtension.class) +class TablelessSQLRouterTest { + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private QueryContext queryContext; + + @Mock + private RuleMetaData ruleMetaData; + + @Mock + private ShardingSphereDatabase database; + + @Test + void assertRouteWhenTableNameRouteUnitIsAllEmpty() { + RouteContext actual = new TablelessSQLRouter().route(queryContext, ruleMetaData, database, Collections.emptyList(), new RouteContext()); + assertTrue(actual.getOriginalDataNodes().isEmpty()); + assertTrue(actual.getRouteUnits().isEmpty()); + assertTrue(actual.getRouteStageContexts().isEmpty()); + } + + @Test + void assertRouteWhenTableNameIsNotEmpty() { + RouteContext routeContext = new RouteContext(); + RouteContext actual = new TablelessSQLRouter().route(queryContext, ruleMetaData, database, Collections.singleton("foo_table"), routeContext); + assertThat(actual, is(routeContext)); + } + + @Test + void assertRouteWhenRouteUnitIsNotEmpty() { + RouteContext routeContext = new RouteContext(); + routeContext.getRouteUnits().add(new RouteUnit(new RouteMapper("foo_ds", "foo_ds"), Collections.emptyList())); + RouteContext actual = new TablelessSQLRouter().route(queryContext, ruleMetaData, database, Collections.emptyList(), routeContext); + assertThat(actual, is(routeContext)); + } +} diff --git a/infra/route/src/test/java/org/apache/shardingsphere/infra/route/engine/tableless/TablelessRouteEngineFactoryTest.java b/infra/route/src/test/java/org/apache/shardingsphere/infra/route/engine/tableless/TablelessRouteEngineFactoryTest.java index 80c6a50d607..df0ac9d6a8c 100644 --- a/infra/route/src/test/java/org/apache/shardingsphere/infra/route/engine/tableless/TablelessRouteEngineFactoryTest.java +++ b/infra/route/src/test/java/org/apache/shardingsphere/infra/route/engine/tableless/TablelessRouteEngineFactoryTest.java @@ -23,8 +23,8 @@ import org.apache.shardingsphere.infra.binder.context.statement.ddl.CloseStateme import org.apache.shardingsphere.infra.binder.context.type.TableAvailable; import org.apache.shardingsphere.infra.hint.HintValueContext; import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; -import org.apache.shardingsphere.infra.route.engine.tableless.type.broadcast.DataSourceBroadcastRouteEngine; -import org.apache.shardingsphere.infra.route.engine.tableless.type.broadcast.InstanceBroadcastRouteEngine; +import org.apache.shardingsphere.infra.route.engine.tableless.type.broadcast.TablelessDataSourceBroadcastRouteEngine; +import org.apache.shardingsphere.infra.route.engine.tableless.type.broadcast.TablelessInstanceBroadcastRouteEngine; import org.apache.shardingsphere.infra.session.connection.ConnectionContext; import org.apache.shardingsphere.infra.session.query.QueryContext; import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.DALStatement; @@ -84,7 +84,7 @@ class TablelessRouteEngineFactoryTest { when(sqlStatementContext.getSqlStatement()).thenReturn(resourceGroupStatement); QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mockConnectionContext(), mock(ShardingSphereMetaData.class)); TablelessRouteEngine actual = TablelessRouteEngineFactory.newInstance(queryContext); - assertThat(actual, instanceOf(InstanceBroadcastRouteEngine.class)); + assertThat(actual, instanceOf(TablelessInstanceBroadcastRouteEngine.class)); } @Test @@ -93,7 +93,7 @@ class TablelessRouteEngineFactoryTest { when(sqlStatementContext.getSqlStatement()).thenReturn(dalStatement); QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mockConnectionContext(), mock(ShardingSphereMetaData.class)); TablelessRouteEngine actual = TablelessRouteEngineFactory.newInstance(queryContext); - assertThat(actual, instanceOf(DataSourceBroadcastRouteEngine.class)); + assertThat(actual, instanceOf(TablelessDataSourceBroadcastRouteEngine.class)); } @Test @@ -107,7 +107,7 @@ class TablelessRouteEngineFactoryTest { when(sqlStatementContext.getSqlStatement()).thenReturn(tclStatement); QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mockConnectionContext(), mock(ShardingSphereMetaData.class)); TablelessRouteEngine actual = TablelessRouteEngineFactory.newInstance(queryContext); - assertThat(actual, instanceOf(DataSourceBroadcastRouteEngine.class)); + assertThat(actual, instanceOf(TablelessDataSourceBroadcastRouteEngine.class)); } @Test @@ -119,7 +119,7 @@ class TablelessRouteEngineFactoryTest { when(sqlStatementContext.getSqlStatement()).thenReturn(dalStatement); QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mockConnectionContext(), mock(ShardingSphereMetaData.class)); TablelessRouteEngine actual = TablelessRouteEngineFactory.newInstance(queryContext); - assertThat(actual, instanceOf(DataSourceBroadcastRouteEngine.class)); + assertThat(actual, instanceOf(TablelessDataSourceBroadcastRouteEngine.class)); } @Test @@ -128,7 +128,7 @@ class TablelessRouteEngineFactoryTest { when(sqlStatementContext.getSqlStatement()).thenReturn(resourceGroupStatement); QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mockConnectionContext(), mock(ShardingSphereMetaData.class)); TablelessRouteEngine actual = TablelessRouteEngineFactory.newInstance(queryContext); - assertThat(actual, instanceOf(InstanceBroadcastRouteEngine.class)); + assertThat(actual, instanceOf(TablelessInstanceBroadcastRouteEngine.class)); } @Test @@ -140,7 +140,7 @@ class TablelessRouteEngineFactoryTest { when(closeStatementContext.getSqlStatement()).thenReturn(closeStatement); QueryContext queryContext = new QueryContext(closeStatementContext, "", Collections.emptyList(), new HintValueContext(), mockConnectionContext(), mock(ShardingSphereMetaData.class)); TablelessRouteEngine actual = TablelessRouteEngineFactory.newInstance(queryContext); - assertThat(actual, instanceOf(DataSourceBroadcastRouteEngine.class)); + assertThat(actual, instanceOf(TablelessDataSourceBroadcastRouteEngine.class)); } @Test @@ -148,7 +148,7 @@ class TablelessRouteEngineFactoryTest { QueryContext queryContext = mock(QueryContext.class, RETURNS_DEEP_STUBS); when(queryContext.getSqlStatementContext().getSqlStatement()).thenReturn(mock(CreateSchemaStatement.class)); TablelessRouteEngine actual = TablelessRouteEngineFactory.newInstance(queryContext); - assertThat(actual, instanceOf(DataSourceBroadcastRouteEngine.class)); + assertThat(actual, instanceOf(TablelessDataSourceBroadcastRouteEngine.class)); } @Test @@ -156,7 +156,7 @@ class TablelessRouteEngineFactoryTest { QueryContext queryContext = mock(QueryContext.class, RETURNS_DEEP_STUBS); when(queryContext.getSqlStatementContext().getSqlStatement()).thenReturn(mock(AlterSchemaStatement.class)); TablelessRouteEngine actual = TablelessRouteEngineFactory.newInstance(queryContext); - assertThat(actual, instanceOf(DataSourceBroadcastRouteEngine.class)); + assertThat(actual, instanceOf(TablelessDataSourceBroadcastRouteEngine.class)); } @Test @@ -164,6 +164,6 @@ class TablelessRouteEngineFactoryTest { QueryContext queryContext = mock(QueryContext.class, RETURNS_DEEP_STUBS); when(queryContext.getSqlStatementContext().getSqlStatement()).thenReturn(mock(DropSchemaStatement.class)); TablelessRouteEngine actual = TablelessRouteEngineFactory.newInstance(queryContext); - assertThat(actual, instanceOf(DataSourceBroadcastRouteEngine.class)); + assertThat(actual, instanceOf(TablelessDataSourceBroadcastRouteEngine.class)); } }