This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 6b491278bb1 Refactor LoadSingleTableExecutorTest (#33101)
6b491278bb1 is described below
commit 6b491278bb1e039e37e67bf2ed2fa1c9022ead47
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Oct 2 23:15:16 2024 +0800
Refactor LoadSingleTableExecutorTest (#33101)
* Refactor LoadSingleTableExecutorTest
* Refactor LoadSingleTableExecutorTest
---
.../handler/update/LoadSingleTableExecutor.java | 79 ++++++-------
.../update/LoadSingleTableExecutorTest.java | 128 ++++++++++++++-------
...tDefaultSingleTableStorageUnitExecutorTest.java | 6 +-
3 files changed, 128 insertions(+), 85 deletions(-)
diff --git
a/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableExecutor.java
b/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableExecutor.java
index 1679b96875d..8eef49fa8d1 100644
---
a/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableExecutor.java
+++
b/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableExecutor.java
@@ -30,7 +30,6 @@ import
org.apache.shardingsphere.infra.exception.kernel.metadata.resource.storag
import
org.apache.shardingsphere.infra.exception.kernel.metadata.resource.storageunit.InvalidStorageUnitStatusException;
import
org.apache.shardingsphere.infra.exception.kernel.metadata.resource.storageunit.MissingRequiredStorageUnitsException;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import
org.apache.shardingsphere.infra.rule.attribute.datasource.DataSourceMapperRuleAttribute;
import org.apache.shardingsphere.single.config.SingleRuleConfiguration;
@@ -60,27 +59,44 @@ public final class LoadSingleTableExecutor implements
DatabaseRuleCreateExecutor
@Override
public void checkBeforeUpdate(final LoadSingleTableStatement sqlStatement)
{
- checkStorageUnits(sqlStatement);
+ Collection<String> storageUnitNames =
getStorageUnitNames(sqlStatement);
+ if (!storageUnitNames.isEmpty()) {
+ checkShouldExistStorageUnits(storageUnitNames);
+ }
String defaultSchemaName = new
DatabaseTypeRegistry(database.getProtocolType()).getDefaultSchemaName(database.getName());
- checkDuplicatedTables(sqlStatement, defaultSchemaName);
- checkActualTableExist(sqlStatement, defaultSchemaName);
+ checkShouldNotExistLogicTables(sqlStatement, defaultSchemaName);
+ if (!storageUnitNames.isEmpty()) {
+ checkShouldExistActualTables(sqlStatement, storageUnitNames,
defaultSchemaName);
+ }
+ }
+
+ private Collection<String> getStorageUnitNames(final
LoadSingleTableStatement sqlStatement) {
+ return
sqlStatement.getTables().stream().map(SingleTableSegment::getStorageUnitName).filter(each
-> !SingleTableConstants.ASTERISK.equals(each)).collect(Collectors.toSet());
}
- private void checkDuplicatedTables(final LoadSingleTableStatement
sqlStatement, final String defaultSchemaName) {
+ private void checkShouldExistStorageUnits(final Collection<String>
storageUnitNames) {
+
ShardingSpherePreconditions.checkNotEmpty(database.getResourceMetaData().getStorageUnits(),
() -> new EmptyStorageUnitException(database.getName()));
+ Collection<String> notExistedStorageUnitNames =
database.getResourceMetaData().getNotExistedDataSources(storageUnitNames);
+ Collection<String> logicDataSourceNames =
database.getRuleMetaData().getAttributes(DataSourceMapperRuleAttribute.class).stream()
+ .flatMap(each ->
each.getDataSourceMapper().keySet().stream()).collect(Collectors.toSet());
+ notExistedStorageUnitNames.removeIf(logicDataSourceNames::contains);
+ ShardingSpherePreconditions.checkMustEmpty(notExistedStorageUnitNames,
() -> new MissingRequiredStorageUnitsException(database.getName(),
notExistedStorageUnitNames));
+ }
+
+ private void checkShouldNotExistLogicTables(final LoadSingleTableStatement
sqlStatement, final String defaultSchemaName) {
Collection<SingleTableSegment> tableSegments =
sqlStatement.getTables();
DialectDatabaseMetaData dialectDatabaseMetaData = new
DatabaseTypeRegistry(database.getProtocolType()).getDialectDatabaseMetaData();
boolean isSchemaSupportedDatabaseType =
dialectDatabaseMetaData.getDefaultSchema().isPresent();
ShardingSphereSchema schema = database.getSchema(defaultSchemaName);
for (SingleTableSegment each : tableSegments) {
- checkDatabaseTypeAndTableNodeStyle(isSchemaSupportedDatabaseType,
each);
- if (SingleTableConstants.ASTERISK.equals(each.getTableName())) {
- continue;
+ checkTableNodeFormat(isSchemaSupportedDatabaseType, each);
+ if (!SingleTableConstants.ASTERISK.equals(each.getTableName())) {
+
ShardingSpherePreconditions.checkState(!schema.containsTable(each.getTableName()),
() -> new TableExistsException(each.getTableName()));
}
-
ShardingSpherePreconditions.checkState(!schema.containsTable(each.getTableName()),
() -> new TableExistsException(each.getTableName()));
}
}
- private void checkDatabaseTypeAndTableNodeStyle(final boolean
isSchemaSupportedDatabaseType, final SingleTableSegment singleTableSegment) {
+ private void checkTableNodeFormat(final boolean
isSchemaSupportedDatabaseType, final SingleTableSegment singleTableSegment) {
if
(SingleTableConstants.ALL_TABLES.equals(singleTableSegment.toString()) ||
SingleTableConstants.ALL_SCHEMA_TABLES.equals(singleTableSegment.toString())) {
return;
}
@@ -93,31 +109,14 @@ public final class LoadSingleTableExecutor implements
DatabaseRuleCreateExecutor
}
}
- private void checkStorageUnits(final LoadSingleTableStatement
sqlStatement) {
-
ShardingSpherePreconditions.checkNotEmpty(database.getResourceMetaData().getStorageUnits(),
() -> new EmptyStorageUnitException(database.getName()));
- Collection<String> requiredDataSources =
getRequiredDataSources(sqlStatement);
- if (requiredDataSources.isEmpty()) {
- return;
- }
- Collection<String> notExistedDataSources =
database.getResourceMetaData().getNotExistedDataSources(requiredDataSources);
- Collection<String> logicDataSources =
database.getRuleMetaData().getAttributes(DataSourceMapperRuleAttribute.class).stream()
- .flatMap(each ->
each.getDataSourceMapper().keySet().stream()).collect(Collectors.toSet());
- notExistedDataSources.removeIf(logicDataSources::contains);
- ShardingSpherePreconditions.checkMustEmpty(notExistedDataSources, ()
-> new MissingRequiredStorageUnitsException(database.getName(),
notExistedDataSources));
- }
-
- private void checkActualTableExist(final LoadSingleTableStatement
sqlStatement, final String defaultSchemaName) {
- Collection<String> requiredDataSources =
getRequiredDataSources(sqlStatement);
- if (requiredDataSources.isEmpty()) {
- return;
- }
- ResourceMetaData resourceMetaData = database.getResourceMetaData();
- Map<String, DataSource> aggregateDataSourceMap =
SingleTableLoadUtils.getAggregatedDataSourceMap(
-
resourceMetaData.getStorageUnits().entrySet().stream().collect(Collectors.toMap(Entry::getKey,
entry -> entry.getValue().getDataSource())),
database.getRuleMetaData().getRules());
- Collection<String> invalidDataSources =
requiredDataSources.stream().filter(each ->
!aggregateDataSourceMap.containsKey(each)).collect(Collectors.toList());
+ private void checkShouldExistActualTables(final LoadSingleTableStatement
sqlStatement, final Collection<String> storageUnitNames, final String
defaultSchemaName) {
+ Map<String, DataSource> dataSourceMap =
database.getResourceMetaData().getStorageUnits().entrySet()
+ .stream().collect(Collectors.toMap(Entry::getKey, entry ->
entry.getValue().getDataSource()));
+ Map<String, DataSource> aggregatedDataSourceMap =
SingleTableLoadUtils.getAggregatedDataSourceMap(dataSourceMap,
database.getRuleMetaData().getRules());
+ Collection<String> invalidDataSources =
storageUnitNames.stream().filter(each ->
!aggregatedDataSourceMap.containsKey(each)).collect(Collectors.toList());
ShardingSpherePreconditions.checkState(invalidDataSources.isEmpty(),
() -> new InvalidStorageUnitStatusException(String.format("`%s` is invalid,
please use `%s`",
- String.join(",", invalidDataSources), String.join(",",
aggregateDataSourceMap.keySet()))));
- Map<String, Map<String, Collection<String>>> actualTableNodes =
getActualTableNodes(requiredDataSources, aggregateDataSourceMap);
+ String.join(",", invalidDataSources), String.join(",",
aggregatedDataSourceMap.keySet()))));
+ Map<String, Map<String, Collection<String>>> actualTableNodes =
getActualTableNodes(storageUnitNames, aggregatedDataSourceMap);
for (SingleTableSegment each : sqlStatement.getTables()) {
String tableName = each.getTableName();
if (!SingleTableConstants.ASTERISK.equals(tableName)) {
@@ -128,14 +127,10 @@ public final class LoadSingleTableExecutor implements
DatabaseRuleCreateExecutor
}
}
- private Collection<String> getRequiredDataSources(final
LoadSingleTableStatement sqlStatement) {
- return
sqlStatement.getTables().stream().map(SingleTableSegment::getStorageUnitName).filter(each
-> !SingleTableConstants.ASTERISK.equals(each)).collect(Collectors.toSet());
- }
-
- private Map<String, Map<String, Collection<String>>>
getActualTableNodes(final Collection<String> requiredDataSources, final
Map<String, DataSource> aggregateDataSourceMap) {
- Map<String, Map<String, Collection<String>>> result = new
LinkedHashMap<>(requiredDataSources.size(), 1F);
- for (String each : requiredDataSources) {
- DataSource dataSource = aggregateDataSourceMap.get(each);
+ private Map<String, Map<String, Collection<String>>>
getActualTableNodes(final Collection<String> storageUnitNames, final
Map<String, DataSource> aggregatedDataSourceMap) {
+ Map<String, Map<String, Collection<String>>> result = new
LinkedHashMap<>(storageUnitNames.size(), 1F);
+ for (String each : storageUnitNames) {
+ DataSource dataSource = aggregatedDataSourceMap.get(each);
Map<String, Collection<String>> schemaTableNames =
SingleTableDataNodeLoader.loadSchemaTableNames(database.getName(),
DatabaseTypeEngine.getStorageType(dataSource), dataSource, each);
if (!schemaTableNames.isEmpty()) {
result.put(each, schemaTableNames);
diff --git
a/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableExecutorTest.java
b/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableExecutorTest.java
index 5a90b41f4af..2d7adb810bf 100644
---
a/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableExecutorTest.java
+++
b/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableExecutorTest.java
@@ -17,42 +17,58 @@
package org.apache.shardingsphere.single.distsql.handler.update;
+import
org.apache.shardingsphere.distsql.handler.engine.update.DistSQLUpdateExecuteEngine;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
+import org.apache.shardingsphere.infra.datanode.DataNode;
import
org.apache.shardingsphere.infra.exception.dialect.exception.syntax.table.TableExistsException;
-import
org.apache.shardingsphere.infra.exception.kernel.metadata.resource.storageunit.EmptyStorageUnitException;
+import
org.apache.shardingsphere.infra.exception.kernel.metadata.TableNotFoundException;
+import
org.apache.shardingsphere.infra.exception.kernel.metadata.datanode.InvalidDataNodeFormatException;
import
org.apache.shardingsphere.infra.exception.kernel.metadata.resource.storageunit.MissingRequiredStorageUnitsException;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
+import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
+import org.apache.shardingsphere.infra.rule.attribute.RuleAttributes;
import
org.apache.shardingsphere.infra.rule.attribute.datasource.DataSourceMapperRuleAttribute;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
import org.apache.shardingsphere.single.config.SingleRuleConfiguration;
+import org.apache.shardingsphere.single.datanode.SingleTableDataNodeLoader;
import org.apache.shardingsphere.single.distsql.segment.SingleTableSegment;
import
org.apache.shardingsphere.single.distsql.statement.rdl.LoadSingleTableStatement;
import org.apache.shardingsphere.single.rule.SingleRule;
+import org.apache.shardingsphere.single.util.SingleTableLoadUtils;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
+import org.apache.shardingsphere.test.mock.AutoMockExtension;
+import org.apache.shardingsphere.test.mock.StaticMockSettings;
import org.junit.jupiter.api.BeforeEach;
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 org.mockito.junit.jupiter.MockitoSettings;
+import org.mockito.quality.Strictness;
+import java.sql.SQLException;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
-import java.util.Iterator;
import java.util.LinkedList;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-@ExtendWith(MockitoExtension.class)
+@ExtendWith(AutoMockExtension.class)
+@StaticMockSettings({SingleTableDataNodeLoader.class,
SingleTableLoadUtils.class})
+@MockitoSettings(strictness = Strictness.LENIENT)
class LoadSingleTableExecutorTest {
- private final LoadSingleTableExecutor executor = new
LoadSingleTableExecutor();
-
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private ShardingSphereDatabase database;
@@ -61,59 +77,93 @@ class LoadSingleTableExecutorTest {
@BeforeEach
void setUp() {
+ when(database.getName()).thenReturn("foo_db");
when(database.getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
"FIXTURE"));
when(database.getSchema("foo_db")).thenReturn(schema);
when(database.getRuleMetaData().getAttributes(DataSourceMapperRuleAttribute.class)).thenReturn(Collections.emptyList());
}
+ private ContextManager mockContextManager(final SingleRule rule) {
+ ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+ when(result.getDatabase("foo_db")).thenReturn(database);
+ if (null == rule) {
+ when(database.getRuleMetaData()).thenReturn(new
RuleMetaData(Collections.emptyList()));
+ } else {
+ when(rule.getAttributes()).thenReturn(new RuleAttributes());
+ when(database.getRuleMetaData()).thenReturn(new
RuleMetaData(Collections.singleton(rule)));
+ }
+ return result;
+ }
+
@Test
- void assertCheckWithDuplicatedTables() {
- when(database.getName()).thenReturn("foo_db");
- when(schema.containsTable("foo")).thenReturn(true);
+ void assertExecuteUpdateWithNotExistedStorageUnits() {
+ LoadSingleTableStatement sqlStatement = new
LoadSingleTableStatement(Collections.singleton(new SingleTableSegment("foo_ds",
"foo_tbl")));
+ assertThrows(MissingRequiredStorageUnitsException.class, () -> new
DistSQLUpdateExecuteEngine(sqlStatement, "foo_db",
mockContextManager(mock(SingleRule.class))).executeUpdate());
+ }
+
+ @Test
+ void assertExecuteUpdateWithInvalidTableNodeFormatWhenSchemaNotSupported()
{
+ when(schema.containsTable("foo_tbl")).thenReturn(true);
when(database.getResourceMetaData().getNotExistedDataSources(any())).thenReturn(Collections.emptyList());
- LoadSingleTableStatement sqlStatement = new
LoadSingleTableStatement(Collections.singleton(new SingleTableSegment("ds_0",
"foo")));
- executor.setDatabase(database);
- assertThrows(TableExistsException.class, () ->
executor.checkBeforeUpdate(sqlStatement));
+ LoadSingleTableStatement sqlStatement = new
LoadSingleTableStatement(Collections.singleton(new SingleTableSegment("foo_ds",
"foo_schema", "foo_tbl")));
+ assertThrows(InvalidDataNodeFormatException.class, () -> new
DistSQLUpdateExecuteEngine(sqlStatement, "foo_db",
mockContextManager(mock(SingleRule.class))).executeUpdate());
}
@Test
- void assertCheckWithEmptyStorageUnits() {
- when(database.getName()).thenReturn("foo_db");
-
when(database.getResourceMetaData().getStorageUnits().isEmpty()).thenReturn(true);
- executor.setDatabase(database);
- LoadSingleTableStatement sqlStatement = new
LoadSingleTableStatement(Collections.singleton(new SingleTableSegment("*",
"*")));
- assertThrows(EmptyStorageUnitException.class, () ->
executor.checkBeforeUpdate(sqlStatement));
+ void assertExecuteUpdateWithExistedLogicTables() {
+ when(schema.containsTable("foo_tbl")).thenReturn(true);
+
when(database.getResourceMetaData().getNotExistedDataSources(any())).thenReturn(Collections.emptyList());
+ LoadSingleTableStatement sqlStatement = new
LoadSingleTableStatement(Arrays.asList(
+ new SingleTableSegment("*", "*"), new SingleTableSegment("*",
"*", "*"), new SingleTableSegment("foo_ds", "*"), new
SingleTableSegment("foo_ds", "foo_tbl")));
+ assertThrows(TableExistsException.class, () -> new
DistSQLUpdateExecuteEngine(sqlStatement, "foo_db",
mockContextManager(mock(SingleRule.class))).executeUpdate());
}
@Test
- void assertCheckWithInvalidStorageUnit() {
- when(database.getName()).thenReturn("foo_db");
- executor.setDatabase(database);
- LoadSingleTableStatement sqlStatement = new
LoadSingleTableStatement(Collections.singleton(new SingleTableSegment("ds_0",
"foo")));
- assertThrows(MissingRequiredStorageUnitsException.class, () ->
executor.checkBeforeUpdate(sqlStatement));
+ void assertExecuteUpdateWithNotExistedActualTables() {
+
when(database.getResourceMetaData().getNotExistedDataSources(any())).thenReturn(Collections.emptyList());
+ StorageUnit storageUnit = mock(StorageUnit.class);
+ when(storageUnit.getDataSource()).thenReturn(new MockedDataSource());
+
when(database.getResourceMetaData().getStorageUnits()).thenReturn(Collections.singletonMap("foo_ds",
storageUnit));
+ when(SingleTableLoadUtils.getAggregatedDataSourceMap(any(),
any())).thenReturn(Collections.singletonMap("foo_ds", new MockedDataSource()));
+ LoadSingleTableStatement sqlStatement = new
LoadSingleTableStatement(Collections.singleton(new SingleTableSegment("foo_ds",
"foo_tbl")));
+ assertThrows(TableNotFoundException.class, () -> new
DistSQLUpdateExecuteEngine(sqlStatement, "foo_db",
mockContextManager(mock(SingleRule.class))).executeUpdate());
}
@Test
- void assertBuild() {
- LoadSingleTableStatement sqlStatement = new
LoadSingleTableStatement(Collections.singletonList(new
SingleTableSegment("ds_0", "foo")));
+ void assertExecuteUpdateWithSingleRule() throws SQLException {
+ Collection<String> currentTables = new
LinkedList<>(Collections.singleton("foo_ds.foo_tbl"));
+
when(database.getResourceMetaData().getNotExistedDataSources(any())).thenReturn(Collections.emptyList());
+ StorageUnit storageUnit = mock(StorageUnit.class);
+ when(storageUnit.getDataSource()).thenReturn(new MockedDataSource());
+
when(database.getResourceMetaData().getStorageUnits()).thenReturn(Collections.singletonMap("foo_ds",
storageUnit));
+ when(SingleTableDataNodeLoader.load(eq("foo_db"), any(),
any())).thenReturn(Collections.singletonMap("foo_tbl",
Collections.singleton(new DataNode("foo_ds.foo_tbl"))));
+ when(SingleTableLoadUtils.convertToDataNodes(eq("foo_db"), any(),
any())).thenReturn(Collections.singleton(new DataNode("foo_ds.foo_tbl")));
+ SingleRuleConfiguration currentConfig = new
SingleRuleConfiguration(currentTables, null);
+ LoadSingleTableStatement sqlStatement = new
LoadSingleTableStatement(Collections.singleton(new SingleTableSegment("*",
"bar_tbl")));
SingleRule rule = mock(SingleRule.class);
- when(rule.getConfiguration()).thenReturn(new
SingleRuleConfiguration());
- executor.setRule(rule);
- SingleRuleConfiguration actual =
executor.buildToBeCreatedRuleConfiguration(sqlStatement);
- assertThat(actual.getTables().iterator().next(), is("ds_0.foo"));
+ when(rule.getConfiguration()).thenReturn(currentConfig);
+ ContextManager contextManager = mockContextManager(rule);
+ new DistSQLUpdateExecuteEngine(sqlStatement, "foo_db",
contextManager).executeUpdate();
+ MetaDataManagerPersistService metaDataManagerPersistService =
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService();
+
verify(metaDataManagerPersistService).alterRuleConfiguration(eq("foo_db"),
any());
}
@Test
- void assertUpdate() {
- Collection<String> currentTables = new
LinkedList<>(Collections.singletonList("ds_0.foo"));
+ void assertExecuteUpdateWithoutSingleRule() throws SQLException {
+ Collection<String> currentTables = new
LinkedList<>(Collections.singleton("foo_ds.foo_tbl"));
+
when(database.getResourceMetaData().getNotExistedDataSources(any())).thenReturn(Collections.emptyList());
+ StorageUnit storageUnit = mock(StorageUnit.class);
+ when(storageUnit.getDataSource()).thenReturn(new MockedDataSource());
+
when(database.getResourceMetaData().getStorageUnits()).thenReturn(Collections.singletonMap("foo_ds",
storageUnit));
+ when(SingleTableDataNodeLoader.load(eq("foo_db"), any(),
any())).thenReturn(Collections.singletonMap("foo_tbl",
Collections.singleton(new DataNode("foo_ds.foo_tbl"))));
+ when(SingleTableLoadUtils.convertToDataNodes(eq("foo_db"), any(),
any())).thenReturn(Collections.singleton(new DataNode("foo_ds.foo_tbl")));
SingleRuleConfiguration currentConfig = new
SingleRuleConfiguration(currentTables, null);
- LoadSingleTableStatement sqlStatement = new
LoadSingleTableStatement(Collections.singletonList(new
SingleTableSegment("ds_0", "bar")));
+ LoadSingleTableStatement sqlStatement = new
LoadSingleTableStatement(Collections.singleton(new SingleTableSegment("*",
"bar_tbl")));
SingleRule rule = mock(SingleRule.class);
when(rule.getConfiguration()).thenReturn(currentConfig);
- executor.setRule(rule);
- SingleRuleConfiguration toBeCreatedConfig =
executor.buildToBeCreatedRuleConfiguration(sqlStatement);
- Iterator<String> iterator = toBeCreatedConfig.getTables().iterator();
- assertThat(iterator.next(), is("ds_0.foo"));
- assertThat(iterator.next(), is("ds_0.bar"));
+ ContextManager contextManager = mockContextManager(null);
+ new DistSQLUpdateExecuteEngine(sqlStatement, "foo_db",
contextManager).executeUpdate();
+ MetaDataManagerPersistService metaDataManagerPersistService =
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService();
+
verify(metaDataManagerPersistService).alterRuleConfiguration(eq("foo_db"),
any());
}
}
diff --git
a/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/SetDefaultSingleTableStorageUnitExecutorTest.java
b/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/SetDefaultSingleTableStorageUnitExecutorTest.java
index 487c43d0650..da84b3fbee6 100644
---
a/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/SetDefaultSingleTableStorageUnitExecutorTest.java
+++
b/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/SetDefaultSingleTableStorageUnitExecutorTest.java
@@ -62,8 +62,7 @@ class SetDefaultSingleTableStorageUnitExecutorTest {
when(rule.getConfiguration()).thenReturn(new
SingleRuleConfiguration(Collections.emptyList(), "foo_ds"));
ShardingSphereDatabase database = mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS);
ContextManager contextManager = mockContextManager(rule, database);
- DistSQLUpdateExecuteEngine engine = new DistSQLUpdateExecuteEngine(new
SetDefaultSingleTableStorageUnitStatement(null), "foo_db", contextManager);
- engine.executeUpdate();
+ new DistSQLUpdateExecuteEngine(new
SetDefaultSingleTableStorageUnitStatement(null), "foo_db",
contextManager).executeUpdate();
MetaDataManagerPersistService metaDataManagerPersistService =
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService();
verify(metaDataManagerPersistService)
.removeRuleConfigurationItem(eq("foo_db"),
ArgumentMatchers.<SingleRuleConfiguration>argThat(x ->
x.getDefaultDataSource().equals(Optional.of("foo_ds"))));
@@ -79,8 +78,7 @@ class SetDefaultSingleTableStorageUnitExecutorTest {
when(database.getResourceMetaData().getStorageUnits().keySet()).thenReturn(new
HashSet<>(Arrays.asList("foo_ds", "bar_ds")));
when(database.getRuleMetaData().getAttributes(DataSourceMapperRuleAttribute.class)).thenReturn(Collections.emptyList());
ContextManager contextManager = mockContextManager(rule, database);
- DistSQLUpdateExecuteEngine engine = new DistSQLUpdateExecuteEngine(new
SetDefaultSingleTableStorageUnitStatement("bar_ds"), "foo_db", contextManager);
- engine.executeUpdate();
+ new DistSQLUpdateExecuteEngine(new
SetDefaultSingleTableStorageUnitStatement("bar_ds"), "foo_db",
contextManager).executeUpdate();
MetaDataManagerPersistService metaDataManagerPersistService =
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService();
verify(metaDataManagerPersistService).removeRuleConfigurationItem("foo_db",
null);
verify(metaDataManagerPersistService).alterRuleConfiguration(eq("foo_db"),
ArgumentMatchers.<SingleRuleConfiguration>argThat(x ->
x.getDefaultDataSource().equals(Optional.of("bar_ds"))));