This is an automated email from the ASF dual-hosted git repository.
zhaojinchao 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 1d2571b0769 Move load metadata logic to GenericSchemaBuilder (#17982)
1d2571b0769 is described below
commit 1d2571b0769e7f1fe8465981b66e84d341b0d448
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Fri May 27 11:44:44 2022 +0800
Move load metadata logic to GenericSchemaBuilder (#17982)
* rename SchemaMetaDataBuilderTest to GenericSchemaBuilderTest
* move load logic to GenericSchemaBuilder
* fix unit test
* fix unit test
* fix integration test
* optimize code logic
---
...er.java => EncryptSchemaMetaDataDecorator.java} | 26 +-
...a.builder.spi.RuleBasedSchemaMetaDataDecorator} | 2 +-
.../metadata/EncryptSchemaMetaDataBuilderTest.java | 385 -------------------
.../EncryptSchemaMetaDataDecoratorTest.java | 111 ++++++
...r.java => ShardingSchemaMetaDataDecorator.java} | 64 +---
...a.builder.spi.RuleBasedSchemaMetaDataDecorator} | 2 +-
.../ShardingSchemaMetaDataBuilderTest.java | 409 ---------------------
.../ShardingSchemaMetaDataDecoratorTest.java | 75 ++++
.../schema/builder/GenericSchemaBuilder.java | 45 +--
....java => RuleBasedSchemaMetaDataDecorator.java} | 20 +-
...> RuleBasedSchemaMetaDataDecoratorFactory.java} | 12 +-
.../schema/builder/GenericSchemaBuilderTest.java | 117 ++++++
.../schema/builder/SchemaMetaDataBuilderTest.java | 78 ----
...leBasedSchemaMetaDataDecoratorFactoryTest.java} | 6 +-
...a => CommonFixtureSchemaMetaDataDecorator.java} | 14 +-
...edFixtureRuleBasedSchemaMetaDataDecorator.java} | 24 +-
...a.builder.spi.RuleBasedSchemaMetaDataDecorator} | 4 +-
.../RenameTableStatementSchemaRefresherTest.java | 6 +-
.../customized/fixture/CommonFixtureRule.java | 36 --
...chema.builder.spi.RuleBasedTableMetaDataBuilder | 18 -
.../metadata/fixture/CommonFixtureRule.java | 36 --
.../CommonFixtureSchemaMetaDataBuilder.java | 53 ---
...hema.builder.spi.RuleBasedSchemaMetaDataBuilder | 18 -
...ava => SingleTableSchemaMetaDataDecorator.java} | 27 +-
...a.builder.spi.RuleBasedSchemaMetaDataDecorator} | 2 +-
.../SingleTableSchemaMetaDataBuilderTest.java | 123 +------
.../data/pipeline/cases/base/BaseITCase.java | 2 +-
27 files changed, 391 insertions(+), 1324 deletions(-)
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataBuilder.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecorator.java
similarity index 77%
rename from
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataBuilder.java
rename to
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecorator.java
index c79e436814a..232d1b65c64 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataBuilder.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecorator.java
@@ -22,42 +22,26 @@ import org.apache.shardingsphere.encrypt.rule.EncryptColumn;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.EncryptTable;
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.SchemaMetaDataLoaderEngine;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.TableMetaDataLoaderMaterial;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataDecorator;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
-import
org.apache.shardingsphere.infra.metadata.database.schema.util.TableMetaDataUtil;
-import java.sql.SQLException;
import java.util.Collection;
-import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
-import java.util.stream.Collectors;
/**
- * Schema meta data builder for encrypt.
+ * Schema meta data decorator for encrypt.
*/
-public final class EncryptSchemaMetaDataBuilder implements
RuleBasedSchemaMetaDataBuilder<EncryptRule> {
+public final class EncryptSchemaMetaDataDecorator implements
RuleBasedSchemaMetaDataDecorator<EncryptRule> {
@Override
- public Map<String, SchemaMetaData> load(final Collection<String>
tableNames, final EncryptRule rule, final GenericSchemaBuilderMaterials
materials) throws SQLException {
- Collection<String> needLoadTables = tableNames.stream().filter(each ->
rule.findEncryptTable(each).isPresent()).collect(Collectors.toList());
- if (needLoadTables.isEmpty()) {
- return Collections.emptyMap();
- }
- Collection<TableMetaDataLoaderMaterial> tableMetaDataLoaderMaterials =
TableMetaDataUtil.getTableMetaDataLoadMaterial(needLoadTables, materials,
false);
- return tableMetaDataLoaderMaterials.isEmpty() ? Collections.emptyMap()
: SchemaMetaDataLoaderEngine.load(tableMetaDataLoaderMaterials,
materials.getStorageType());
- }
-
- @Override
- public Map<String, SchemaMetaData> decorate(final Map<String,
SchemaMetaData> schemaMetaDataMap, final EncryptRule rule, final
GenericSchemaBuilderMaterials materials) throws SQLException {
- Map<String, SchemaMetaData> result = new LinkedHashMap<>();
+ public Map<String, SchemaMetaData> decorate(final Map<String,
SchemaMetaData> schemaMetaDataMap, final EncryptRule rule, final
GenericSchemaBuilderMaterials materials) {
+ Map<String, SchemaMetaData> result = new
LinkedHashMap<>(schemaMetaDataMap.size(), 1);
for (Entry<String, SchemaMetaData> entry :
schemaMetaDataMap.entrySet()) {
Map<String, TableMetaData> tables = new
LinkedHashMap<>(entry.getValue().getTables().size(), 1);
for (Entry<String, TableMetaData> tableEntry :
entry.getValue().getTables().entrySet()) {
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataDecorator
similarity index 98%
rename from
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder
rename to
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataDecorator
index 936cbb85056..d256c286bbc 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataDecorator
@@ -15,4 +15,4 @@
# limitations under the License.
#
-org.apache.shardingsphere.encrypt.metadata.EncryptSchemaMetaDataBuilder
+org.apache.shardingsphere.encrypt.metadata.EncryptSchemaMetaDataDecorator
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataBuilderTest.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataBuilderTest.java
deleted file mode 100644
index b749f8a98ba..00000000000
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataBuilderTest.java
+++ /dev/null
@@ -1,385 +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.encrypt.metadata;
-
-import org.apache.shardingsphere.encrypt.rule.EncryptColumn;
-import org.apache.shardingsphere.encrypt.rule.EncryptRule;
-import org.apache.shardingsphere.encrypt.rule.EncryptTable;
-import org.apache.shardingsphere.encrypt.spi.context.EncryptColumnDataType;
-import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilderFactory;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import org.apache.shardingsphere.singletable.rule.SingleTableRule;
-import org.apache.shardingsphere.test.mock.MockedDataSource;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Answers;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-
-import javax.sql.DataSource;
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Properties;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.ArgumentMatchers.startsWith;
-import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-@RunWith(MockitoJUnitRunner.class)
-public final class EncryptSchemaMetaDataBuilderTest {
-
- private static final String TABLE_NAME = "t_encrypt";
-
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private DatabaseType databaseType;
-
- private DataSource dataSource;
-
- @Before
- public void setUp() throws SQLException {
- Connection connection = mock(Connection.class, RETURNS_DEEP_STUBS);
- mockH2ResultSet(connection);
- mockMySQLResultSet(connection);
- mockOracleResultSet(connection);
- mockPGResultSet(connection);
- mockSQLServerResultSet(connection);
- mockDatabase(connection);
- dataSource = new MockedDataSource(connection);
- }
-
- private void mockSQLServerResultSet(final Connection connection) throws
SQLException {
- ResultSet resultSet = createColumnResultSet();
- PreparedStatement preparedStatement = mock(PreparedStatement.class);
- when(preparedStatement.executeQuery()).thenReturn(resultSet);
- when(connection.prepareStatement(startsWith("SELECT obj.name AS
TABLE_NAME, col.name AS COLUMN_NAME, t.name AS
DATA_TYPE"))).thenReturn(preparedStatement);
- }
-
- private void mockPGResultSet(final Connection connection) throws
SQLException {
- ResultSet resultSet = createColumnResultSet();
- PreparedStatement preparedStatement = mock(PreparedStatement.class);
- when(preparedStatement.executeQuery()).thenReturn(resultSet);
- when(connection.prepareStatement(startsWith("SELECT table_name,
column_name, ordinal_position, data_type, udt_name, column_default,
table_schema"))).thenReturn(preparedStatement);
- }
-
- private void mockOracleResultSet(final Connection connection) throws
SQLException {
- ResultSet resultSet = createColumnResultSet();
- PreparedStatement preparedStatement = mock(PreparedStatement.class);
- when(preparedStatement.executeQuery()).thenReturn(resultSet);
- when(connection.prepareStatement(startsWith("SELECT OWNER AS
TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME,
DATA_TYPE"))).thenReturn(preparedStatement);
- }
-
- private void mockMySQLResultSet(final Connection connection) throws
SQLException {
- ResultSet resultSet = createColumnResultSet();
- PreparedStatement preparedStatement = mock(PreparedStatement.class);
- when(preparedStatement.executeQuery()).thenReturn(resultSet);
- when(connection.prepareStatement(startsWith("SELECT TABLE_NAME,
COLUMN_NAME, DATA_TYPE, COLUMN_KEY, EXTRA, COLLATION_NAME, ORDINAL_POSITION
FROM information_schema.columns")))
- .thenReturn(preparedStatement);
- }
-
- private void mockH2ResultSet(final Connection connection) throws
SQLException {
- ResultSet resultSet = createColumnResultSet();
- PreparedStatement preparedStatement = mock(PreparedStatement.class);
- when(preparedStatement.executeQuery()).thenReturn(resultSet);
- when(connection.prepareStatement(startsWith("SELECT TABLE_CATALOG,
TABLE_NAME"))).thenReturn(preparedStatement);
- }
-
- private void mockDatabase(final Connection connection) throws SQLException
{
- DatabaseMetaData database = mock(DatabaseMetaData.class,
RETURNS_DEEP_STUBS);
- when(connection.getMetaData()).thenReturn(database);
- ResultSet dataTypeResultSet = createDataTypeResultSet();
- when(database.getTypeInfo()).thenReturn(dataTypeResultSet);
- ResultSet tableResultSet = createTableResultSet();
- ResultSet columnResultSet = createColumnResultSet();
- when(database.getTables(any(), any(), any(),
eq(null))).thenReturn(tableResultSet);
- when(database.getColumns(any(), any(), any(),
eq("%"))).thenReturn(columnResultSet);
- }
-
- private ResultSet createTableResultSet() throws SQLException {
- ResultSet result = mock(ResultSet.class);
- when(result.next()).thenReturn(true, false);
- return result;
- }
-
- private ResultSet createColumnResultSet() throws SQLException {
- ResultSet result = mock(ResultSet.class);
- when(result.next()).thenReturn(true, true, true, false);
- when(result.getString("TABLE_NAME")).thenReturn(TABLE_NAME);
- when(result.getString("table_name")).thenReturn(TABLE_NAME);
- when(result.getString("COLUMN_NAME")).thenReturn("id", "pwd_cipher",
"pwd_plain");
- when(result.getString("column_name")).thenReturn("id", "pwd_cipher",
"pwd_plain");
- when(result.getString("TYPE_NAME")).thenReturn("INT");
- when(result.getString("DATA_TYPE")).thenReturn("INT");
- when(result.getString("udt_name")).thenReturn("INT");
- when(result.getString("table_schema")).thenReturn("public");
- return result;
- }
-
- private ResultSet createDataTypeResultSet() throws SQLException {
- ResultSet dataTypeResultSet = mock(ResultSet.class);
- when(dataTypeResultSet.next()).thenReturn(true, true, false);
- when(dataTypeResultSet.getString("TYPE_NAME")).thenReturn("INT",
"VARCHAR");
- when(dataTypeResultSet.getInt("DATA_TYPE")).thenReturn(1, 12);
- return dataTypeResultSet;
- }
-
- @Test
- public void assertLoadByTablesWithDefaultLoader() throws SQLException {
- EncryptRule encryptRule = createEncryptRule();
- Collection<ShardingSphereRule> rules =
Arrays.asList(createSingleTableRule(), encryptRule);
- EncryptSchemaMetaDataBuilder loader =
getEncryptMetaDataBuilder(encryptRule, rules);
-
when(databaseType.formatTableNamePattern(TABLE_NAME)).thenReturn(TABLE_NAME);
- Map<String, SchemaMetaData> actual =
loader.load(Collections.singleton(TABLE_NAME), encryptRule,
- new GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap("logic_db", dataSource), rules, new
ConfigurationProperties(new Properties()), "logic_db"));
- TableMetaData tableMetaData =
actual.get("logic_db").getTables().values().iterator().next();
- List<String> columnNames = new
ArrayList<>(tableMetaData.getColumns().keySet());
-
assertThat(tableMetaData.getColumns().get(columnNames.get(0)).getName(),
is("id"));
-
assertThat(tableMetaData.getColumns().get(columnNames.get(1)).getName(),
is("pwd_cipher"));
- }
-
- @Test
- public void assertLoadByTablesH2() throws SQLException {
- EncryptRule encryptRule = createEncryptRule();
- Collection<ShardingSphereRule> rules =
Arrays.asList(createSingleTableRule(), encryptRule);
- loadByH2(getEncryptMetaDataBuilder(encryptRule, rules),
Collections.singleton(TABLE_NAME), rules, encryptRule);
- }
-
- private void loadByH2(final EncryptSchemaMetaDataBuilder loader, final
Collection<String> tableNames, final Collection<ShardingSphereRule> rules,
- final EncryptRule encryptRule) throws SQLException {
- when(databaseType.getType()).thenReturn("H2");
- Map<String, SchemaMetaData> actual = loader.load(tableNames,
encryptRule,
- new GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap("logic_db", dataSource), rules, new
ConfigurationProperties(new Properties()), "logic_db"));
- assertResult(actual, "logic_db");
- }
-
- @Test
- public void assertLoadByTablesMySQL() throws SQLException {
- EncryptRule encryptRule = createEncryptRule();
- Collection<ShardingSphereRule> rules =
Arrays.asList(createSingleTableRule(), encryptRule);
- loadByMySQL(getEncryptMetaDataBuilder(encryptRule, rules),
Collections.singleton(TABLE_NAME), rules, encryptRule);
- }
-
- private void loadByMySQL(final EncryptSchemaMetaDataBuilder loader, final
Collection<String> tableNames, final Collection<ShardingSphereRule> rules,
- final EncryptRule encryptRule) throws
SQLException {
- when(databaseType.getType()).thenReturn("MySQL");
- Map<String, SchemaMetaData> actual = loader.load(tableNames,
encryptRule,
- new GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap("logic_db", dataSource), rules, new
ConfigurationProperties(new Properties()), "logic_db"));
- assertResult(actual, "logic_db");
- }
-
- @Test
- public void assertLoadByTablesOracle() throws SQLException {
- EncryptRule encryptRule = createEncryptRule();
- Collection<ShardingSphereRule> rules =
Arrays.asList(createSingleTableRule(), encryptRule);
- loadByOracle(getEncryptMetaDataBuilder(encryptRule, rules),
Collections.singleton(TABLE_NAME), rules, encryptRule);
- }
-
- private void loadByOracle(final EncryptSchemaMetaDataBuilder loader, final
Collection<String> tableNames, final Collection<ShardingSphereRule> rules,
- final EncryptRule encryptRule) throws
SQLException {
- when(databaseType.getType()).thenReturn("Oracle");
- Map<String, SchemaMetaData> actual = loader.load(tableNames,
encryptRule,
- new GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap("logic_db", dataSource), rules, new
ConfigurationProperties(new Properties()), "logic_db"));
- assertResult(actual, "logic_db");
- }
-
- @Test
- public void assertLoadByTablesPGSQL() throws SQLException {
- EncryptRule encryptRule = createEncryptRule();
- Collection<ShardingSphereRule> rules =
Arrays.asList(createSingleTableRule(), encryptRule);
- loadByPostgreSQL(getEncryptMetaDataBuilder(encryptRule, rules),
Collections.singleton(TABLE_NAME), rules, encryptRule);
- }
-
- private void loadByPostgreSQL(final EncryptSchemaMetaDataBuilder loader,
final Collection<String> tableNames, final Collection<ShardingSphereRule> rules,
- final EncryptRule encryptRule) throws
SQLException {
- when(databaseType.getType()).thenReturn("PostgreSQL");
- ResultSet roleTableGrantsResultSet = mockRoleTableGrantsResultSet();
- when(dataSource.getConnection().prepareStatement(startsWith("SELECT
table_name FROM
information_schema.role_table_grants")).executeQuery()).thenReturn(roleTableGrantsResultSet);
- ResultSet schemaMetaData = mockSchemaMetaData();
-
when(dataSource.getConnection().getMetaData().getSchemas()).thenReturn(schemaMetaData);
- Map<String, SchemaMetaData> actual = loader.load(tableNames,
encryptRule,
- new GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap("logic_db", dataSource), rules, new
ConfigurationProperties(new Properties()), "logic_db"));
- assertResult(actual, "public");
- }
-
- private ResultSet mockSchemaMetaData() throws SQLException {
- ResultSet result = mock(ResultSet.class);
- when(result.next()).thenReturn(true, false);
- when(result.getString("TABLE_SCHEM")).thenReturn("public");
- return result;
- }
-
- private ResultSet mockRoleTableGrantsResultSet() throws SQLException {
- ResultSet result = mock(ResultSet.class);
- when(result.next()).thenReturn(true, false);
- when(result.getString("table_name")).thenReturn(TABLE_NAME);
- return result;
- }
-
- @Test
- public void assertLoadByTablesSQLServer() throws SQLException {
- EncryptRule encryptRule = createEncryptRule();
- Collection<ShardingSphereRule> rules =
Arrays.asList(createSingleTableRule(), encryptRule);
- loadBySQLServer(getEncryptMetaDataBuilder(encryptRule, rules),
Collections.singleton(TABLE_NAME), rules, encryptRule);
- }
-
- private void loadBySQLServer(final EncryptSchemaMetaDataBuilder loader,
final Collection<String> tableNames, final Collection<ShardingSphereRule> rules,
- final EncryptRule encryptRule) throws
SQLException {
- when(databaseType.getType()).thenReturn("SQLServer");
- Map<String, SchemaMetaData> actual = loader.load(tableNames,
encryptRule,
- new GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap("logic_db", dataSource), rules, new
ConfigurationProperties(new Properties()), "logic_db"));
- assertResult(actual, "logic_db");
- }
-
- private void assertResult(final Map<String, SchemaMetaData>
schemaMetaDataMap, final String schemaName) {
- TableMetaData tableMetaData =
schemaMetaDataMap.get(schemaName).getTables().values().iterator().next();
- List<String> columnNames = new
ArrayList<>(tableMetaData.getColumns().keySet());
-
assertThat(tableMetaData.getColumns().get(columnNames.get(0)).getName(),
is("id"));
-
assertThat(tableMetaData.getColumns().get(columnNames.get(1)).getName(),
is("pwd_cipher"));
- }
-
- @Test
- public void assertLoadByNotExistedTables() throws SQLException {
- EncryptRule encryptRule = createEncryptRule();
- Collection<ShardingSphereRule> rules =
Arrays.asList(createSingleTableRule(), encryptRule);
- EncryptSchemaMetaDataBuilder loader = new
EncryptSchemaMetaDataBuilder();
- Map<String, SchemaMetaData> actual =
loader.load(Collections.singleton("not_existed_table"), encryptRule,
- new GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap("logic_db", dataSource), rules, new
ConfigurationProperties(new Properties()), "logic_db"));
- assertTrue(actual.isEmpty());
- }
-
- @Test
- public void assertLoadByTablesAndMultiDataSources() throws SQLException {
-
when(databaseType.formatTableNamePattern(TABLE_NAME)).thenReturn(TABLE_NAME);
- Map<String, DataSource> dataSourceMap = new HashMap<>();
- dataSourceMap.put("logic_db", dataSource);
- dataSourceMap.put("logic_db_2", new MockedDataSource());
- EncryptRule encryptRule = createEncryptRule();
- Collection<ShardingSphereRule> rules =
Arrays.asList(createSingleTableRule(), encryptRule);
- EncryptSchemaMetaDataBuilder loader =
getEncryptMetaDataBuilder(encryptRule, rules);
- Map<String, SchemaMetaData> actual =
loader.load(Collections.singleton(TABLE_NAME),
- encryptRule, new GenericSchemaBuilderMaterials(databaseType,
databaseType, dataSourceMap, rules, new ConfigurationProperties(new
Properties()), "logic_db"));
- TableMetaData tableMetaData =
actual.get("logic_db").getTables().values().iterator().next();
- List<String> actualColumnNames = new
ArrayList<>(tableMetaData.getColumns().keySet());
-
assertThat(tableMetaData.getColumns().get(actualColumnNames.get(0)).getName(),
is("id"));
-
assertThat(tableMetaData.getColumns().get(actualColumnNames.get(1)).getName(),
is("pwd_cipher"));
- }
-
- @Test
- public void assertLoadByNotExistedTableAndMultiDataSources() throws
SQLException {
- EncryptRule encryptRule = createEncryptRule();
- Collection<ShardingSphereRule> rules =
Arrays.asList(createSingleTableRule(), encryptRule);
- Map<String, DataSource> dataSourceMap = new HashMap<>();
- dataSourceMap.put("logic_db", dataSource);
- dataSourceMap.put("logic_db_2", new MockedDataSource());
- EncryptSchemaMetaDataBuilder loader = new
EncryptSchemaMetaDataBuilder();
- Map<String, SchemaMetaData> actual =
loader.load(Collections.singleton("not_existed_table"),
- encryptRule, new GenericSchemaBuilderMaterials(databaseType,
databaseType, dataSourceMap, rules, new ConfigurationProperties(new
Properties()), "logic_db"));
- assertTrue(actual.isEmpty());
- }
-
- @Test
- public void assertDecorate() throws SQLException {
- EncryptRule rule = createEncryptRule();
- EncryptSchemaMetaDataBuilder loader = getEncryptMetaDataBuilder(rule,
Collections.singleton(rule));
- Map<String, TableMetaData> tableMetaDataMap = new LinkedHashMap<>();
- tableMetaDataMap.put("t_encrypt", createTableMetaData());
- TableMetaData actual =
loader.decorate(Collections.singletonMap("logic_db",
- new SchemaMetaData("logic_db", tableMetaDataMap)), rule,
mock(GenericSchemaBuilderMaterials.class)).get("logic_db").getTables().get("t_encrypt");
- assertThat(actual.getColumns().size(), is(2));
- assertTrue(actual.getColumns().containsKey("id"));
- assertTrue(actual.getColumns().containsKey("pwd"));
- }
-
- @Test
- public void assertDecorateWithConfigDataType() throws SQLException {
- EncryptRule rule = createEncryptRuleWithDataTypeConfig();
- EncryptSchemaMetaDataBuilder loader = getEncryptMetaDataBuilder(rule,
Collections.singleton(rule));
- Map<String, TableMetaData> tableMetaDataMap = new LinkedHashMap<>();
- tableMetaDataMap.put("t_encrypt", createTableMetaData());
- GenericSchemaBuilderMaterials materials =
mock(GenericSchemaBuilderMaterials.class, RETURNS_DEEP_STUBS);
-
when(materials.getDataSourceMap().values().stream().findAny()).thenReturn(Optional.of(dataSource));
- TableMetaData actual =
loader.decorate(Collections.singletonMap("logic_db", new
SchemaMetaData("logic_db", tableMetaDataMap)),
- rule, materials).get("logic_db").getTables().get("t_encrypt");
- assertThat(actual.getColumns().size(), is(2));
- assertTrue(actual.getColumns().containsKey("id"));
- assertTrue(actual.getColumns().containsKey("pwd"));
- assertThat(actual.getColumns().get("pwd").getDataType(), is(12));
- }
-
- private EncryptRule createEncryptRuleWithDataTypeConfig() {
- EncryptRule result = createEncryptRule();
- assertTrue(result.findEncryptTable(TABLE_NAME).isPresent());
- EncryptTable encryptTable = result.findEncryptTable(TABLE_NAME).get();
- EncryptColumn encryptColumn = mock(EncryptColumn.class);
- EncryptColumnDataType encryptColumnDataType =
mock(EncryptColumnDataType.class);
- when(encryptColumnDataType.getDataType()).thenReturn(12);
-
when(encryptColumn.getLogicDataType()).thenReturn(encryptColumnDataType);
-
when(encryptTable.findEncryptColumn("pwd")).thenReturn(Optional.of(encryptColumn));
- return result;
- }
-
- private EncryptRule createEncryptRule() {
- EncryptRule result = mock(EncryptRule.class);
- EncryptTable encryptTable = mock(EncryptTable.class);
-
when(result.findEncryptTable(TABLE_NAME)).thenReturn(Optional.of(encryptTable));
-
when(encryptTable.getAssistedQueryColumns()).thenReturn(Collections.emptyList());
-
when(encryptTable.getPlainColumns()).thenReturn(Collections.singleton("pwd_plain"));
- when(encryptTable.isCipherColumn("pwd_cipher")).thenReturn(true);
- when(encryptTable.getLogicColumn("pwd_cipher")).thenReturn("pwd");
- return result;
- }
-
- private TableMetaData createTableMetaData() {
- Collection<ColumnMetaData> columns = Arrays.asList(new
ColumnMetaData("id", 1, true, true, true),
- new ColumnMetaData("pwd_cipher", 2, false, false, true),
- new ColumnMetaData("pwd_plain", 2, false, false, true));
- return new TableMetaData(TABLE_NAME, columns, Collections.emptyList(),
Collections.emptyList());
- }
-
- private SingleTableRule createSingleTableRule() {
- return mock(SingleTableRule.class);
- }
-
- private EncryptSchemaMetaDataBuilder getEncryptMetaDataBuilder(final
EncryptRule encryptRule, final Collection<ShardingSphereRule> rules) {
- return (EncryptSchemaMetaDataBuilder)
RuleBasedSchemaMetaDataBuilderFactory.getInstances(rules).get(encryptRule);
- }
-}
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecoratorTest.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecoratorTest.java
new file mode 100644
index 00000000000..274edbc4837
--- /dev/null
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecoratorTest.java
@@ -0,0 +1,111 @@
+/*
+ * 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.encrypt.metadata;
+
+import org.apache.shardingsphere.encrypt.rule.EncryptColumn;
+import org.apache.shardingsphere.encrypt.rule.EncryptRule;
+import org.apache.shardingsphere.encrypt.rule.EncryptTable;
+import org.apache.shardingsphere.encrypt.spi.context.EncryptColumnDataType;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataDecoratorFactory;
+import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
+import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
+import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import org.junit.Test;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Optional;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public final class EncryptSchemaMetaDataDecoratorTest {
+
+ private static final String TABLE_NAME = "t_encrypt";
+
+ @Test
+ public void assertDecorate() {
+ EncryptRule rule = createEncryptRule();
+ EncryptSchemaMetaDataDecorator loader =
getEncryptMetaDataBuilder(rule, Collections.singleton(rule));
+ Map<String, TableMetaData> tableMetaDataMap = new LinkedHashMap<>();
+ tableMetaDataMap.put("t_encrypt", createTableMetaData());
+ TableMetaData actual =
loader.decorate(Collections.singletonMap("logic_db",
+ new SchemaMetaData("logic_db", tableMetaDataMap)), rule,
mock(GenericSchemaBuilderMaterials.class)).get("logic_db").getTables().get("t_encrypt");
+ assertThat(actual.getColumns().size(), is(2));
+ assertTrue(actual.getColumns().containsKey("id"));
+ assertTrue(actual.getColumns().containsKey("pwd"));
+ }
+
+ @Test
+ public void assertDecorateWithConfigDataType() {
+ EncryptRule rule = createEncryptRuleWithDataTypeConfig();
+ EncryptSchemaMetaDataDecorator loader =
getEncryptMetaDataBuilder(rule, Collections.singleton(rule));
+ Map<String, TableMetaData> tableMetaDataMap = new LinkedHashMap<>();
+ tableMetaDataMap.put("t_encrypt", createTableMetaData());
+ GenericSchemaBuilderMaterials materials =
mock(GenericSchemaBuilderMaterials.class, RETURNS_DEEP_STUBS);
+ TableMetaData actual =
loader.decorate(Collections.singletonMap("logic_db",
+ new SchemaMetaData("logic_db", tableMetaDataMap)), rule,
materials).get("logic_db").getTables().get("t_encrypt");
+ assertThat(actual.getColumns().size(), is(2));
+ assertTrue(actual.getColumns().containsKey("id"));
+ assertTrue(actual.getColumns().containsKey("pwd"));
+ assertThat(actual.getColumns().get("pwd").getDataType(), is(12));
+ }
+
+ private EncryptRule createEncryptRuleWithDataTypeConfig() {
+ EncryptRule result = createEncryptRule();
+ assertTrue(result.findEncryptTable(TABLE_NAME).isPresent());
+ EncryptTable encryptTable = result.findEncryptTable(TABLE_NAME).get();
+ EncryptColumn encryptColumn = mock(EncryptColumn.class);
+ EncryptColumnDataType encryptColumnDataType =
mock(EncryptColumnDataType.class);
+ when(encryptColumnDataType.getDataType()).thenReturn(12);
+
when(encryptColumn.getLogicDataType()).thenReturn(encryptColumnDataType);
+
when(encryptTable.findEncryptColumn("pwd")).thenReturn(Optional.of(encryptColumn));
+ return result;
+ }
+
+ private EncryptRule createEncryptRule() {
+ EncryptRule result = mock(EncryptRule.class);
+ EncryptTable encryptTable = mock(EncryptTable.class);
+
when(result.findEncryptTable(TABLE_NAME)).thenReturn(Optional.of(encryptTable));
+
when(encryptTable.getAssistedQueryColumns()).thenReturn(Collections.emptyList());
+
when(encryptTable.getPlainColumns()).thenReturn(Collections.singleton("pwd_plain"));
+ when(encryptTable.isCipherColumn("pwd_cipher")).thenReturn(true);
+ when(encryptTable.getLogicColumn("pwd_cipher")).thenReturn("pwd");
+ return result;
+ }
+
+ private TableMetaData createTableMetaData() {
+ Collection<ColumnMetaData> columns = Arrays.asList(new
ColumnMetaData("id", 1, true, true, true),
+ new ColumnMetaData("pwd_cipher", 2, false, false, true),
+ new ColumnMetaData("pwd_plain", 2, false, false, true));
+ return new TableMetaData(TABLE_NAME, columns, Collections.emptyList(),
Collections.emptyList());
+ }
+
+ private EncryptSchemaMetaDataDecorator getEncryptMetaDataBuilder(final
EncryptRule encryptRule, final Collection<ShardingSphereRule> rules) {
+ return (EncryptSchemaMetaDataDecorator)
RuleBasedSchemaMetaDataDecoratorFactory.getInstances(rules).get(encryptRule);
+ }
+}
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataBuilder.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecorator.java
similarity index 72%
rename from
shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataBuilder.java
rename to
shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecorator.java
index fd8b1abccd4..62ded5e6752 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataBuilder.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecorator.java
@@ -23,22 +23,17 @@ import
org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.datanode.DataNode;
import org.apache.shardingsphere.infra.exception.ShardingSphereException;
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.SchemaMetaDataLoaderEngine;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.TableMetaDataLoaderMaterial;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataDecorator;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ConstraintMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.IndexMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
-import
org.apache.shardingsphere.infra.metadata.database.schema.util.TableMetaDataUtil;
import org.apache.shardingsphere.sharding.constant.ShardingOrder;
import org.apache.shardingsphere.sharding.rule.ShardingRule;
import org.apache.shardingsphere.sharding.rule.TableRule;
-import java.sql.SQLException;
import java.util.Collection;
-import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedList;
@@ -48,36 +43,21 @@ import java.util.Optional;
import java.util.stream.Collectors;
/**
- * Schema meta data builder for sharding.
+ * Schema meta data decorator for sharding.
*/
-public final class ShardingSchemaMetaDataBuilder implements
RuleBasedSchemaMetaDataBuilder<ShardingRule> {
+public final class ShardingSchemaMetaDataDecorator implements
RuleBasedSchemaMetaDataDecorator<ShardingRule> {
@Override
- public Map<String, SchemaMetaData> load(final Collection<String>
tableNames, final ShardingRule rule, final GenericSchemaBuilderMaterials
materials) throws SQLException {
- Collection<String> needLoadTables = tableNames.stream().filter(each ->
rule.findTableRule(each).isPresent() ||
rule.isBroadcastTable(each)).collect(Collectors.toList());
- if (needLoadTables.isEmpty()) {
- return Collections.emptyMap();
- }
+ public Map<String, SchemaMetaData> decorate(final Map<String,
SchemaMetaData> schemaMetaDataMap, final ShardingRule rule, final
GenericSchemaBuilderMaterials materials) {
+ Map<String, SchemaMetaData> result = new
LinkedHashMap<>(schemaMetaDataMap.size(), 1);
boolean isCheckingMetaData =
materials.getProps().getValue(ConfigurationPropertyKey.CHECK_TABLE_METADATA_ENABLED);
- Collection<TableMetaDataLoaderMaterial> tableMetaDataLoaderMaterials =
TableMetaDataUtil.getTableMetaDataLoadMaterial(needLoadTables, materials,
isCheckingMetaData);
- if (tableMetaDataLoaderMaterials.isEmpty()) {
- return Collections.emptyMap();
- }
- Map<String, SchemaMetaData> result =
SchemaMetaDataLoaderEngine.load(tableMetaDataLoaderMaterials,
materials.getStorageType());
- if (isCheckingMetaData) {
- checkMetaData(result, rule);
- }
- return result;
- }
-
- @Override
- public Map<String, SchemaMetaData> decorate(final Map<String,
SchemaMetaData> schemaMetaDataMap, final ShardingRule rule, final
GenericSchemaBuilderMaterials materials) throws SQLException {
- Map<String, SchemaMetaData> result = new LinkedHashMap<>();
for (Entry<String, SchemaMetaData> entry :
schemaMetaDataMap.entrySet()) {
Map<String, TableMetaData> tables = new
LinkedHashMap<>(entry.getValue().getTables().size(), 1);
- for (Entry<String, TableMetaData> tableEntry :
entry.getValue().getTables().entrySet()) {
- TableMetaData tableMetaData = decorate(tableEntry.getValue(),
rule);
- tables.put(tableMetaData.getName(), tableMetaData);
+ for (Entry<String, Collection<TableMetaData>> tableEntry :
getLogicTableMetaDataMap(entry.getValue(), rule).entrySet()) {
+ if (isCheckingMetaData) {
+ checkUniformed(tableEntry.getKey(), tableEntry.getValue());
+ }
+ tables.put(tableEntry.getKey(),
tableEntry.getValue().iterator().next());
}
result.put(entry.getKey(), new SchemaMetaData(entry.getKey(),
tables));
}
@@ -95,32 +75,20 @@ public final class ShardingSchemaMetaDataBuilder implements
RuleBasedSchemaMetaD
return new TableMetaData(tableRule.getLogicTable(),
columnMetaDataList, indexMetaDataList, constraintMetaDataList);
}
- private void checkMetaData(final Map<String, SchemaMetaData>
schemaMetaDataMap, final ShardingRule rule) {
- for (Entry<String, SchemaMetaData> entry :
schemaMetaDataMap.entrySet()) {
- Map<String, Collection<TableMetaData>> logicTableMetaDataMap =
getLogicTableMetaDataMap(entry.getValue(), rule);
- for (Entry<String, Collection<TableMetaData>> tableEntry :
logicTableMetaDataMap.entrySet()) {
- checkUniformed(tableEntry.getKey(), tableEntry.getValue(),
rule);
- }
- }
- }
-
private Map<String, Collection<TableMetaData>>
getLogicTableMetaDataMap(final SchemaMetaData schemaMetaData, final
ShardingRule rule) {
Map<String, Collection<TableMetaData>> result = new LinkedHashMap<>();
for (Entry<String, TableMetaData> entry :
schemaMetaData.getTables().entrySet()) {
- Optional<String> logicTable =
rule.findLogicTableByActualTable(entry.getKey());
- if (!logicTable.isPresent()) {
- continue;
- }
- Collection<TableMetaData> tableMetaDataList =
result.computeIfAbsent(logicTable.get(), key -> new LinkedList<>());
- tableMetaDataList.add(entry.getValue());
+ String logicTableName =
rule.findLogicTableByActualTable(entry.getKey()).orElse(entry.getKey());
+ Collection<TableMetaData> tableMetaDataList =
result.computeIfAbsent(logicTableName, key -> new LinkedList<>());
+ tableMetaDataList.add(decorate(entry.getValue(), rule));
}
return result;
}
- private void checkUniformed(final String logicTableName, final
Collection<TableMetaData> tableMetaDataList, final ShardingRule rule) {
- TableMetaData sample = decorate(tableMetaDataList.iterator().next(),
rule);
+ private void checkUniformed(final String logicTableName, final
Collection<TableMetaData> tableMetaDataList) {
+ TableMetaData sample = tableMetaDataList.iterator().next();
Collection<TableMetaDataViolation> violations =
tableMetaDataList.stream()
- .filter(each -> !sample.equals(decorate(each, rule))).map(each
-> new TableMetaDataViolation(each.getName(),
each)).collect(Collectors.toList());
+ .filter(each -> !sample.equals(each)).map(each -> new
TableMetaDataViolation(each.getName(), each)).collect(Collectors.toList());
throwExceptionIfNecessary(violations, logicTableName);
}
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataDecorator
similarity index 98%
rename from
shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder
rename to
shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataDecorator
index 53dc974885c..0f004107c12 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataDecorator
@@ -15,4 +15,4 @@
# limitations under the License.
#
-org.apache.shardingsphere.sharding.metadata.ShardingSchemaMetaDataBuilder
+org.apache.shardingsphere.sharding.metadata.ShardingSchemaMetaDataDecorator
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataBuilderTest.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataBuilderTest.java
deleted file mode 100644
index 5fded3d02a0..00000000000
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataBuilderTest.java
+++ /dev/null
@@ -1,409 +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.metadata;
-
-import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import
org.apache.shardingsphere.infra.database.type.dialect.OracleDatabaseType;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilderFactory;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.IndexMetaData;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
-import
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
-import
org.apache.shardingsphere.sharding.api.config.strategy.keygen.KeyGenerateStrategyConfiguration;
-import org.apache.shardingsphere.sharding.rule.ShardingRule;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Answers;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-
-import javax.sql.DataSource;
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-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.is;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.ArgumentMatchers.startsWith;
-import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-@RunWith(MockitoJUnitRunner.class)
-public class ShardingSchemaMetaDataBuilderTest {
-
- private static final String TABLE_NAME = "t_order";
-
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private DatabaseType databaseType;
-
- @Mock
- private DataSource dataSource;
-
- @Mock
- private ConfigurationProperties props;
-
- private ShardingRule shardingRule;
-
- @Before
- public void setUp() throws SQLException {
- Connection connection = mock(Connection.class, RETURNS_DEEP_STUBS);
- when(dataSource.getConnection()).thenReturn(connection);
- shardingRule = createShardingRule();
- mockH2ResultSet(connection);
- mockMySQLResultSet(connection);
- mockOracleResultSet(connection);
- mockPGResultSet(connection);
- mockSQLServerResultSet(connection);
- mockDatabase(connection);
- }
-
- private ShardingRule createShardingRule() {
- ShardingTableRuleConfiguration tableRuleConfig = new
ShardingTableRuleConfiguration(TABLE_NAME, "ds.t_order_${0..1}");
- tableRuleConfig.setKeyGenerateStrategy(new
KeyGenerateStrategyConfiguration("product_id", "snowflake"));
- ShardingRuleConfiguration shardingRuleConfig = new
ShardingRuleConfiguration();
- shardingRuleConfig.getTables().add(tableRuleConfig);
- return new ShardingRule(shardingRuleConfig,
Collections.singletonList("ds"));
- }
-
- private void mockSQLServerResultSet(final Connection connection) throws
SQLException {
- ResultSet resultSet = createColumnResultSet("t_order_0");
- PreparedStatement preparedStatement = mock(PreparedStatement.class);
- when(preparedStatement.executeQuery()).thenReturn(resultSet);
- when(connection.prepareStatement(startsWith("SELECT obj.name AS
TABLE_NAME, col.name AS COLUMN_NAME, t.name AS
DATA_TYPE"))).thenReturn(preparedStatement);
- ResultSet indexResultSet = createIndexResultSet();
- PreparedStatement indexStatement = mock(PreparedStatement.class);
- when(indexStatement.executeQuery()).thenReturn(indexResultSet);
- when(connection.prepareStatement(startsWith("SELECT a.name AS
INDEX_NAME, c.name AS TABLE_NAME FROM sys.indexes
a"))).thenReturn(indexStatement);
- }
-
- private void mockPGResultSet(final Connection connection) throws
SQLException {
- ResultSet resultSet = createColumnResultSetForPostgreSQL();
- PreparedStatement preparedStatement = mock(PreparedStatement.class);
- when(preparedStatement.executeQuery()).thenReturn(resultSet);
- when(connection.prepareStatement(startsWith("SELECT table_name,
column_name, ordinal_position, data_type, udt_name, column_default,
table_schema"))).thenReturn(preparedStatement);
- ResultSet indexResultSet = createPostgreSQLIndexResultSet();
- PreparedStatement indexStatement = mock(PreparedStatement.class);
- when(indexStatement.executeQuery()).thenReturn(indexResultSet);
- when(connection.prepareStatement(startsWith("SELECT tablename,
indexname, schemaname FROM pg_indexes WHERE
schemaname"))).thenReturn(indexStatement);
- }
-
- private void mockOracleResultSet(final Connection connection) throws
SQLException {
- ResultSet resultSet = createColumnResultSetForOracle();
- PreparedStatement preparedStatement = mock(PreparedStatement.class);
- when(preparedStatement.executeQuery()).thenReturn(resultSet);
- when(connection.prepareStatement(startsWith("SELECT OWNER AS
TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME,
DATA_TYPE"))).thenReturn(preparedStatement);
- ResultSet indexResultSet = createIndexResultSetForOracle();
- PreparedStatement indexStatement = mock(PreparedStatement.class);
- when(indexStatement.executeQuery()).thenReturn(indexResultSet);
- when(connection.prepareStatement(startsWith("SELECT OWNER AS
TABLE_SCHEMA, TABLE_NAME, INDEX_NAME FROM ALL_INDEXES WHERE
OWNER"))).thenReturn(indexStatement);
- }
-
- private void mockMySQLResultSet(final Connection connection) throws
SQLException {
- ResultSet resultSet = createColumnResultSet("t_order_0");
- PreparedStatement preparedStatement = mock(PreparedStatement.class);
- when(preparedStatement.executeQuery()).thenReturn(resultSet);
- when(connection.prepareStatement(startsWith("SELECT TABLE_NAME,
COLUMN_NAME, DATA_TYPE, COLUMN_KEY, EXTRA, COLLATION_NAME, ORDINAL_POSITION
FROM information_schema.columns")))
- .thenReturn(preparedStatement);
- ResultSet indexResultSet = createIndexResultSet();
- PreparedStatement indexStatement = mock(PreparedStatement.class);
- when(indexStatement.executeQuery()).thenReturn(indexResultSet);
- when(connection.prepareStatement(startsWith("SELECT TABLE_NAME,
INDEX_NAME FROM information_schema.statistics WHERE
TABLE_SCHEMA"))).thenReturn(indexStatement);
- }
-
- private void mockH2ResultSet(final Connection connection) throws
SQLException {
- ResultSet resultSet = createColumnResultSet("t_order_0");
- PreparedStatement preparedStatement = mock(PreparedStatement.class);
- when(preparedStatement.executeQuery()).thenReturn(resultSet);
- when(connection.prepareStatement(startsWith("SELECT TABLE_CATALOG,
TABLE_NAME"))).thenReturn(preparedStatement);
- ResultSet indexResultSet = createIndexResultSet();
- PreparedStatement indexStatement = mock(PreparedStatement.class);
- when(indexStatement.executeQuery()).thenReturn(indexResultSet);
- when(connection.prepareStatement(startsWith("SELECT TABLE_CATALOG,
TABLE_NAME, INDEX_NAME, COLUMN_NAME FROM
INFORMATION_SCHEMA.INDEXES"))).thenReturn(indexStatement);
- }
-
- private ResultSet createIndexResultSet() throws SQLException {
- ResultSet result = mock(ResultSet.class);
- when(result.next()).thenReturn(true, false);
-
when(result.getString("INDEX_NAME")).thenReturn("order_index_t_order_t_order_0");
- when(result.getString("TABLE_NAME")).thenReturn("t_order_0");
- return result;
- }
-
- private ResultSet createPostgreSQLIndexResultSet() throws SQLException {
- ResultSet result = mock(ResultSet.class);
- when(result.next()).thenReturn(true, false);
-
when(result.getString("indexname")).thenReturn("order_index_t_order_t_order_0");
- when(result.getString("tablename")).thenReturn("t_order_0");
- when(result.getString("schemaname")).thenReturn("public");
- return result;
- }
-
- private ResultSet createIndexResultSetForOracle() throws SQLException {
- ResultSet result = mock(ResultSet.class);
- when(result.next()).thenReturn(true, false);
-
when(result.getString("INDEX_NAME")).thenReturn("ORDER_INDEX_T_ORDER_T_ORDER_0");
- when(result.getString("TABLE_NAME")).thenReturn("T_ORDER_0");
- return result;
- }
-
- private void mockDatabase(final Connection connection) throws SQLException
{
- DatabaseMetaData database = mock(DatabaseMetaData.class,
RETURNS_DEEP_STUBS);
- when(connection.getMetaData()).thenReturn(database);
- ResultSet dataTypeResultSet = createDataTypeResultSet();
- when(database.getTypeInfo()).thenReturn(dataTypeResultSet);
- ResultSet tableResultSet1 = createTableResultSet();
- ResultSet tableResultSet2 = createTableResultSet();
- ResultSet columnResultSet1 = createColumnResultSet("t_order_0");
- ResultSet columnResultSet2 = createColumnResultSet("t_order_1");
- when(database.getTables(any(), any(), eq("t_order_0"),
eq(null))).thenReturn(tableResultSet1);
- when(database.getTables(any(), any(), eq("t_order_1"),
eq(null))).thenReturn(tableResultSet2);
- when(database.getColumns(any(), any(), eq("t_order_0"),
eq("%"))).thenReturn(columnResultSet1);
- when(database.getColumns(any(), any(), eq("t_order_1"),
eq("%"))).thenReturn(columnResultSet2);
- }
-
- private ResultSet createTableResultSet() throws SQLException {
- ResultSet result = mock(ResultSet.class);
- when(result.next()).thenReturn(true, false);
- return result;
- }
-
- private ResultSet createColumnResultSetForPostgreSQL() throws SQLException
{
- ResultSet result = mock(ResultSet.class);
- when(result.next()).thenReturn(true, true, true, false);
- when(result.getString("table_name")).thenReturn("t_order_0");
- when(result.getString("column_name")).thenReturn("id", "pwd_cipher",
"pwd_plain");
- when(result.getString("udt_name")).thenReturn("INT");
- when(result.getString("table_schema")).thenReturn("public");
- return result;
- }
-
- private ResultSet createColumnResultSetForOracle() throws SQLException {
- ResultSet result = mock(ResultSet.class);
- when(result.next()).thenReturn(true, true, true, false);
- when(result.getString("TABLE_NAME")).thenReturn("T_ORDER_0");
- when(result.getString("COLUMN_NAME")).thenReturn("ID", "PWD_CIPHER",
"PWD_PLAIN");
- when(result.getString("DATA_TYPE")).thenReturn("INT");
- return result;
- }
-
- private ResultSet createColumnResultSet(final String actualTable) throws
SQLException {
- ResultSet result = mock(ResultSet.class);
- when(result.next()).thenReturn(true, true, true, false);
- when(result.getString("TABLE_NAME")).thenReturn(actualTable);
- when(result.getString("COLUMN_NAME")).thenReturn("id", "pwd_cipher",
"pwd_plain");
- when(result.getString("TYPE_NAME")).thenReturn("INT");
- when(result.getString("DATA_TYPE")).thenReturn("INT");
- return result;
- }
-
- private ResultSet createDataTypeResultSet() throws SQLException {
- ResultSet result = mock(ResultSet.class);
- when(result.next()).thenReturn(true, false);
- when(result.getString("TYPE_NAME")).thenReturn("INT");
- when(result.getInt("DATA_TYPE")).thenReturn(1);
- return result;
- }
-
- @Test
- public void assertLoadTablesH2() throws SQLException {
-
when(props.getValue(ConfigurationPropertyKey.CHECK_TABLE_METADATA_ENABLED)).thenReturn(false);
- when(databaseType.getType()).thenReturn("H2");
- Collection<String> tableNames = new LinkedList<>();
- tableNames.add(TABLE_NAME);
- Collection<ShardingSphereRule> rules =
Collections.singletonList(shardingRule);
- ShardingSchemaMetaDataBuilder loader = (ShardingSchemaMetaDataBuilder)
RuleBasedSchemaMetaDataBuilderFactory.getInstances(rules).get(shardingRule);
- Map<String, SchemaMetaData> actual = loader.load(tableNames,
shardingRule,
- new GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap("ds", dataSource), rules, props, "sharding_db"));
- assertResult(actual, "sharding_db");
- }
-
- @Test
- public void assertLoadTablesMySQL() throws SQLException {
-
when(props.getValue(ConfigurationPropertyKey.CHECK_TABLE_METADATA_ENABLED)).thenReturn(false);
- when(databaseType.getType()).thenReturn("MySQL");
- Collection<String> tableNames = new LinkedList<>();
- tableNames.add(TABLE_NAME);
- Collection<ShardingSphereRule> rules =
Collections.singletonList(shardingRule);
- ShardingSchemaMetaDataBuilder loader = (ShardingSchemaMetaDataBuilder)
RuleBasedSchemaMetaDataBuilderFactory.getInstances(rules).get(shardingRule);
- Map<String, SchemaMetaData> actual = loader.load(tableNames,
shardingRule,
- new GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap("ds", dataSource), rules, props, "sharding_db"));
- assertResult(actual, "sharding_db");
- }
-
- @Test
- public void assertLoadTablesOracle() throws SQLException {
- ShardingRule shardingRule = createShardingRuleForOracle();
- Collection<ShardingSphereRule> rules =
Collections.singletonList(shardingRule);
- ShardingSchemaMetaDataBuilder loader = (ShardingSchemaMetaDataBuilder)
RuleBasedSchemaMetaDataBuilderFactory.getInstances(rules).get(shardingRule);
-
when(props.getValue(ConfigurationPropertyKey.CHECK_TABLE_METADATA_ENABLED)).thenReturn(false);
- DatabaseType databaseType = mock(OracleDatabaseType.class);
- when(databaseType.getType()).thenReturn("Oracle");
- Map<String, SchemaMetaData> actual =
loader.load(Collections.singletonList(TABLE_NAME), shardingRule,
- new GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap("ds", dataSource), rules, props, "sharding_db"));
-
assertThat(actual.get("sharding_db").getTables().keySet().iterator().next(),
is("T_ORDER_0"));
- TableMetaData tableMetaData =
actual.get("sharding_db").getTables().values().iterator().next();
- List<String> actualColumnNames = new
ArrayList<>(tableMetaData.getColumns().keySet());
-
assertThat(tableMetaData.getColumns().get(actualColumnNames.get(0)).getName(),
is("ID"));
-
assertThat(tableMetaData.getColumns().get(actualColumnNames.get(1)).getName(),
is("PWD_CIPHER"));
-
assertThat(tableMetaData.getColumns().get(actualColumnNames.get(2)).getName(),
is("PWD_PLAIN"));
-
assertThat(tableMetaData.getIndexes().values().iterator().next().getName(),
is("ORDER_INDEX_T_ORDER_T_ORDER_0"));
- }
-
- private ShardingRule createShardingRuleForOracle() {
- ShardingTableRuleConfiguration tableRuleConfig = new
ShardingTableRuleConfiguration(TABLE_NAME, "ds.T_ORDER_${0..1}");
- ShardingRuleConfiguration shardingRuleConfig = new
ShardingRuleConfiguration();
- shardingRuleConfig.getTables().add(tableRuleConfig);
- return new ShardingRule(shardingRuleConfig,
Collections.singletonList("ds"));
- }
-
- @Test
- public void assertLoadTablesPGSQL() throws SQLException {
-
when(props.getValue(ConfigurationPropertyKey.CHECK_TABLE_METADATA_ENABLED)).thenReturn(false);
- when(databaseType.getType()).thenReturn("PostgreSQL");
- Collection<String> tableNames = new LinkedList<>();
- tableNames.add(TABLE_NAME);
- Collection<ShardingSphereRule> rules =
Collections.singletonList(shardingRule);
- ShardingSchemaMetaDataBuilder loader = (ShardingSchemaMetaDataBuilder)
RuleBasedSchemaMetaDataBuilderFactory.getInstances(rules).get(shardingRule);
- ResultSet roleTableGrantsResultSet = mockRoleTableGrantsResultSet();
- when(dataSource.getConnection().prepareStatement(startsWith("SELECT
table_name FROM
information_schema.role_table_grants")).executeQuery()).thenReturn(roleTableGrantsResultSet);
- ResultSet schemaMetaData = mockSchemaMetaData();
-
when(dataSource.getConnection().getMetaData().getSchemas()).thenReturn(schemaMetaData);
- Map<String, SchemaMetaData> actual = loader.load(tableNames,
shardingRule,
- new GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap("ds", dataSource), rules, props, "sharding_db"));
- assertResult(actual, "public");
- }
-
- private ResultSet mockSchemaMetaData() throws SQLException {
- ResultSet result = mock(ResultSet.class);
- when(result.next()).thenReturn(true, false);
- when(result.getString("TABLE_SCHEM")).thenReturn("public");
- return result;
- }
-
- private ResultSet mockRoleTableGrantsResultSet() throws SQLException {
- ResultSet result = mock(ResultSet.class);
- when(result.next()).thenReturn(true, false);
- when(result.getString("table_name")).thenReturn("t_order_0");
- return result;
- }
-
- @Test
- public void assertLoadTablesSQLServer() throws SQLException {
-
when(props.getValue(ConfigurationPropertyKey.CHECK_TABLE_METADATA_ENABLED)).thenReturn(false);
- when(databaseType.getType()).thenReturn("SQLServer");
- Collection<String> tableNames = new LinkedList<>();
- tableNames.add(TABLE_NAME);
- Collection<ShardingSphereRule> rules =
Collections.singletonList(shardingRule);
- ShardingSchemaMetaDataBuilder loader = (ShardingSchemaMetaDataBuilder)
RuleBasedSchemaMetaDataBuilderFactory.getInstances(rules).get(shardingRule);
- Map<String, SchemaMetaData> actual = loader.load(tableNames,
shardingRule,
- new GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap("ds", dataSource), rules, props, "sharding_db"));
- assertResult(actual, "sharding_db");
- }
-
- private void assertResult(final Map<String, SchemaMetaData>
schemaMetaDataMap, final String schemaName) {
- TableMetaData tableMetaData =
schemaMetaDataMap.get(schemaName).getTables().values().iterator().next();
- List<String> actualColumnNames = new
ArrayList<>(tableMetaData.getColumns().keySet());
-
assertThat(tableMetaData.getColumns().get(actualColumnNames.get(0)).getName(),
is("id"));
-
assertThat(tableMetaData.getColumns().get(actualColumnNames.get(1)).getName(),
is("pwd_cipher"));
-
assertThat(tableMetaData.getColumns().get(actualColumnNames.get(2)).getName(),
is("pwd_plain"));
- IndexMetaData indexMetaData =
tableMetaData.getIndexes().values().iterator().next();
- assertThat(indexMetaData.getName(),
is("order_index_t_order_t_order_0"));
- }
-
- @Test
- public void assertLoadTablesDefault() throws SQLException {
-
when(props.getValue(ConfigurationPropertyKey.CHECK_TABLE_METADATA_ENABLED)).thenReturn(false);
- when(databaseType.getType()).thenReturn("default");
-
when(databaseType.formatTableNamePattern("t_order_0")).thenReturn("t_order_0");
- Collection<String> tableNames = new LinkedList<>();
- tableNames.add(TABLE_NAME);
- Collection<ShardingSphereRule> rules =
Collections.singletonList(shardingRule);
- ShardingSchemaMetaDataBuilder loader = (ShardingSchemaMetaDataBuilder)
RuleBasedSchemaMetaDataBuilderFactory.getInstances(rules).get(shardingRule);
- Map<String, SchemaMetaData> actual = loader.load(tableNames,
shardingRule,
- new GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap("ds", dataSource), rules, props, "sharding_db"));
- TableMetaData tableMetaData =
actual.get("sharding_db").getTables().values().iterator().next();
- List<String> actualColumnNames = new
ArrayList<>(tableMetaData.getColumns().keySet());
-
assertThat(tableMetaData.getColumns().get(actualColumnNames.get(0)).getName(),
is("id"));
-
assertThat(tableMetaData.getColumns().get(actualColumnNames.get(1)).getName(),
is("pwd_cipher"));
-
assertThat(tableMetaData.getColumns().get(actualColumnNames.get(2)).getName(),
is("pwd_plain"));
- }
-
- @Test
- public void assertLoadTablesWithCheck() throws SQLException {
-
when(props.getValue(ConfigurationPropertyKey.CHECK_TABLE_METADATA_ENABLED)).thenReturn(true);
-
when(databaseType.formatTableNamePattern("t_order_0")).thenReturn("t_order_0");
-
when(databaseType.formatTableNamePattern("t_order_1")).thenReturn("t_order_1");
- Collection<String> tableNames = new LinkedList<>();
- tableNames.add(TABLE_NAME);
- Collection<ShardingSphereRule> rules =
Collections.singletonList(shardingRule);
- ShardingSchemaMetaDataBuilder loader = (ShardingSchemaMetaDataBuilder)
RuleBasedSchemaMetaDataBuilderFactory.getInstances(rules).get(shardingRule);
- Map<String, SchemaMetaData> actual = loader.load(tableNames,
shardingRule,
- new GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap("ds", dataSource), rules, props, "sharding_db"));
- TableMetaData tableMetaData =
actual.get("sharding_db").getTables().values().iterator().next();
- List<String> actualColumnNames = new
ArrayList<>(tableMetaData.getColumns().keySet());
-
assertThat(tableMetaData.getColumns().get(actualColumnNames.get(0)).getName(),
is("id"));
-
assertThat(tableMetaData.getColumns().get(actualColumnNames.get(1)).getName(),
is("pwd_cipher"));
-
assertThat(tableMetaData.getColumns().get(actualColumnNames.get(2)).getName(),
is("pwd_plain"));
- }
-
- @Test
- public void assertDecorateWithKeyGenerateStrategy() throws SQLException {
- Collection<ShardingSphereRule> rules =
Collections.singletonList(shardingRule);
- ShardingSchemaMetaDataBuilder builder =
(ShardingSchemaMetaDataBuilder)
RuleBasedSchemaMetaDataBuilderFactory.getInstances(rules).get(shardingRule);
- Map<String, TableMetaData> tableMetaDataMap = new LinkedHashMap<>();
- tableMetaDataMap.put(TABLE_NAME, createTableMetaData());
- Map<String, ColumnMetaData> columns =
builder.decorate(Collections.singletonMap("sharding_db", new
SchemaMetaData("sharding_db", tableMetaDataMap)),
- shardingRule,
mock(GenericSchemaBuilderMaterials.class)).get("sharding_db").getTables().get(TABLE_NAME).getColumns();
- Iterator<ColumnMetaData> iterator = columns.values().iterator();
- assertTrue(iterator.next().isGenerated());
- assertFalse(iterator.next().isGenerated());
- assertFalse(iterator.next().isGenerated());
- assertFalse(iterator.next().isGenerated());
- }
-
- private TableMetaData createTableMetaData() {
- Collection<ColumnMetaData> columns = Arrays.asList(new
ColumnMetaData("id", 1, true, true, true),
- new ColumnMetaData("pwd_cipher", 2, false, false, true),
- new ColumnMetaData("pwd_plain", 2, false, false, true),
- new ColumnMetaData("product_id", 2, false, false, true));
- return new TableMetaData(TABLE_NAME, columns, Collections.emptyList(),
Collections.emptyList());
- }
-}
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecoratorTest.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecoratorTest.java
new file mode 100644
index 00000000000..ce8b419cc48
--- /dev/null
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecoratorTest.java
@@ -0,0 +1,75 @@
+/*
+ * 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.metadata;
+
+import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataDecoratorFactory;
+import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
+import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
+import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import org.apache.shardingsphere.sharding.rule.ShardingRule;
+import org.junit.Test;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Properties;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public final class ShardingSchemaMetaDataDecoratorTest {
+
+ private static final String TABLE_NAME = "t_order";
+
+ @Test
+ public void assertDecorateWithKeyGenerateStrategy() {
+ ShardingRule shardingRule = mock(ShardingRule.class);
+
when(shardingRule.findLogicTableByActualTable(TABLE_NAME)).thenReturn(Optional.of(TABLE_NAME));
+ Collection<ShardingSphereRule> rules =
Collections.singletonList(shardingRule);
+ ShardingSchemaMetaDataDecorator builder =
(ShardingSchemaMetaDataDecorator)
RuleBasedSchemaMetaDataDecoratorFactory.getInstances(rules).get(shardingRule);
+ Map<String, TableMetaData> tableMetaDataMap = new LinkedHashMap<>();
+ tableMetaDataMap.put(TABLE_NAME, createTableMetaData());
+ GenericSchemaBuilderMaterials materials =
mock(GenericSchemaBuilderMaterials.class);
+ when(materials.getProps()).thenReturn(new ConfigurationProperties(new
Properties()));
+ Map<String, SchemaMetaData> actual =
builder.decorate(Collections.singletonMap("sharding_db",
+ new SchemaMetaData("sharding_db", tableMetaDataMap)),
shardingRule, materials);
+ Map<String, ColumnMetaData> columns =
actual.get("sharding_db").getTables().get(TABLE_NAME).getColumns();
+ Iterator<ColumnMetaData> iterator = columns.values().iterator();
+ assertTrue(iterator.next().isGenerated());
+ assertFalse(iterator.next().isGenerated());
+ assertFalse(iterator.next().isGenerated());
+ assertFalse(iterator.next().isGenerated());
+ }
+
+ private TableMetaData createTableMetaData() {
+ Collection<ColumnMetaData> columns = Arrays.asList(new
ColumnMetaData("id", 1, true, true, true),
+ new ColumnMetaData("pwd_cipher", 2, false, false, true),
+ new ColumnMetaData("pwd_plain", 2, false, false, true),
+ new ColumnMetaData("product_id", 2, false, false, true));
+ return new TableMetaData(TABLE_NAME, columns, Collections.emptyList(),
Collections.emptyList());
+ }
+}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
index a5339446492..1d7295a5cc8 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
@@ -17,12 +17,16 @@
package org.apache.shardingsphere.infra.metadata.database.schema.builder;
+import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
import
org.apache.shardingsphere.infra.metadata.database.schema.ShardingSphereSchema;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilderFactory;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataDecorator;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataDecoratorFactory;
+import
org.apache.shardingsphere.infra.metadata.database.schema.loader.SchemaMetaDataLoaderEngine;
+import
org.apache.shardingsphere.infra.metadata.database.schema.loader.TableMetaDataLoaderMaterial;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
+import
org.apache.shardingsphere.infra.metadata.database.schema.util.TableMetaDataUtil;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.identifier.type.TableContainedRule;
@@ -73,7 +77,7 @@ public final class GenericSchemaBuilder {
}
private static Map<String, SchemaMetaData> loadSchemaMetaDataMap(final
Collection<String> tableNames, final GenericSchemaBuilderMaterials materials)
throws SQLException {
- Map<String, SchemaMetaData> result =
loadSchemasWithTableContainedRules(tableNames, materials);
+ Map<String, SchemaMetaData> result = loadSchemas(tableNames,
materials);
if (!materials.getProtocolType().equals(materials.getStorageType())) {
result = translate(result, materials);
}
@@ -84,32 +88,13 @@ public final class GenericSchemaBuilder {
return rules.stream().filter(each -> each instanceof
TableContainedRule).flatMap(each -> ((TableContainedRule)
each).getTables().stream()).collect(Collectors.toSet());
}
- @SuppressWarnings({"unchecked", "rawtypes"})
- private static Map<String, SchemaMetaData>
loadSchemasWithTableContainedRules(final Collection<String> tableNames, final
GenericSchemaBuilderMaterials materials) throws SQLException {
- Map<String, SchemaMetaData> result = new LinkedHashMap<>();
- for (Entry<ShardingSphereRule, RuleBasedSchemaMetaDataBuilder> entry :
RuleBasedSchemaMetaDataBuilderFactory.getInstances(materials.getRules()).entrySet())
{
- ShardingSphereRule rule = entry.getKey();
- if (rule instanceof TableContainedRule) {
- Collection<String> loadingTables =
filterLoadingTables(tableNames, (TableContainedRule) rule, result.values());
- mergeSchemaMetaDataMap(result,
entry.getValue().load(loadingTables, (TableContainedRule) rule,
materials).values());
- }
- }
- return result;
- }
-
- private static Collection<String> filterLoadingTables(final
Collection<String> tableNames, final TableContainedRule rule, final
Collection<SchemaMetaData> loadedSchemaMetaDataList) {
- return tableNames.stream().filter(each ->
rule.getTables().contains(each) && !containsTable(loadedSchemaMetaDataList,
each)).collect(Collectors.toList());
- }
-
- private static boolean containsTable(final Collection<SchemaMetaData>
schemaMetaDataList, final String tableName) {
- return schemaMetaDataList.stream().anyMatch(each ->
each.getTables().containsKey(tableName));
- }
-
- private static void mergeSchemaMetaDataMap(final Map<String,
SchemaMetaData> schemaMetaDataMap, final Collection<SchemaMetaData>
addedSchemaMetaDataList) {
- for (SchemaMetaData each : addedSchemaMetaDataList) {
- SchemaMetaData schemaMetaData =
schemaMetaDataMap.computeIfAbsent(each.getName(), key -> new
SchemaMetaData(each.getName(), new LinkedHashMap<>()));
- schemaMetaData.getTables().putAll(each.getTables());
+ private static Map<String, SchemaMetaData> loadSchemas(final
Collection<String> tableNames, final GenericSchemaBuilderMaterials materials)
throws SQLException {
+ boolean isCheckingMetaData =
materials.getProps().getValue(ConfigurationPropertyKey.CHECK_TABLE_METADATA_ENABLED);
+ Collection<TableMetaDataLoaderMaterial> tableMetaDataLoaderMaterials =
TableMetaDataUtil.getTableMetaDataLoadMaterial(tableNames, materials,
isCheckingMetaData);
+ if (tableMetaDataLoaderMaterials.isEmpty()) {
+ return Collections.emptyMap();
}
+ return SchemaMetaDataLoaderEngine.load(tableMetaDataLoaderMaterials,
materials.getStorageType());
}
private static Map<String, SchemaMetaData> translate(final Map<String,
SchemaMetaData> schemaMetaDataMap, final GenericSchemaBuilderMaterials
materials) {
@@ -122,9 +107,9 @@ public final class GenericSchemaBuilder {
}
@SuppressWarnings({"unchecked", "rawtypes"})
- private static Map<String, SchemaMetaData> decorate(final Map<String,
SchemaMetaData> schemaMetaDataMap, final GenericSchemaBuilderMaterials
materials) throws SQLException {
+ private static Map<String, SchemaMetaData> decorate(final Map<String,
SchemaMetaData> schemaMetaDataMap, final GenericSchemaBuilderMaterials
materials) {
Map<String, SchemaMetaData> result = new
LinkedHashMap<>(schemaMetaDataMap);
- for (Entry<ShardingSphereRule, RuleBasedSchemaMetaDataBuilder> entry :
RuleBasedSchemaMetaDataBuilderFactory.getInstances(materials.getRules()).entrySet())
{
+ for (Entry<ShardingSphereRule, RuleBasedSchemaMetaDataDecorator> entry
:
RuleBasedSchemaMetaDataDecoratorFactory.getInstances(materials.getRules()).entrySet())
{
if (!(entry.getKey() instanceof TableContainedRule)) {
continue;
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/spi/RuleBasedSchemaMetaDataBuilder.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/spi/RuleBasedSchemaMetaDataDecorator.java
similarity index 72%
rename from
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/spi/RuleBasedSchemaMetaDataBuilder.java
rename to
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/spi/RuleBasedSchemaMetaDataDecorator.java
index 943d58aa1b0..7502ee131ab 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/spi/RuleBasedSchemaMetaDataBuilder.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/spi/RuleBasedSchemaMetaDataDecorator.java
@@ -23,28 +23,15 @@ import
org.apache.shardingsphere.infra.rule.identifier.type.TableContainedRule;
import org.apache.shardingsphere.spi.annotation.SingletonSPI;
import org.apache.shardingsphere.spi.type.ordered.OrderedSPI;
-import java.sql.SQLException;
-import java.util.Collection;
import java.util.Map;
/**
- * Rule based schema meta data builder.
+ * Rule based schema meta data decorator.
*
* @param <T> type of ShardingSphere rule
*/
@SingletonSPI
-public interface RuleBasedSchemaMetaDataBuilder<T extends TableContainedRule>
extends OrderedSPI<T> {
-
- /**
- * Load schema meta data.
- *
- * @param tableNames tables name
- * @param rule ShardingSphere rule
- * @param materials SchemaBuilderMaterials materials
- * @return schema meta data map
- * @throws SQLException SQL exception
- */
- Map<String, SchemaMetaData> load(Collection<String> tableNames, T rule,
GenericSchemaBuilderMaterials materials) throws SQLException;
+public interface RuleBasedSchemaMetaDataDecorator<T extends
TableContainedRule> extends OrderedSPI<T> {
/**
* Decorate schema meta data.
@@ -53,7 +40,6 @@ public interface RuleBasedSchemaMetaDataBuilder<T extends
TableContainedRule> ex
* @param rule ShardingSphere rule
* @param materials SchemaBuilderMaterials materials
* @return schema meta data map
- * @throws SQLException SQL exception
*/
- Map<String, SchemaMetaData> decorate(Map<String, SchemaMetaData>
schemaMetaDataMap, T rule, GenericSchemaBuilderMaterials materials) throws
SQLException;
+ Map<String, SchemaMetaData> decorate(Map<String, SchemaMetaData>
schemaMetaDataMap, T rule, GenericSchemaBuilderMaterials materials);
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/spi/RuleBasedSchemaMetaDataBuilderFactory.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/spi/RuleBasedSchemaMetaDataDecoratorFactory.java
similarity index 82%
rename from
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/spi/RuleBasedSchemaMetaDataBuilderFactory.java
rename to
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/spi/RuleBasedSchemaMetaDataDecoratorFactory.java
index 29f9144dfdf..e08dbca8e68 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/spi/RuleBasedSchemaMetaDataBuilderFactory.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/spi/RuleBasedSchemaMetaDataDecoratorFactory.java
@@ -25,22 +25,22 @@ import java.util.Collection;
import java.util.Map;
/**
- * Rule based schema meta data builder factory.
+ * Rule based schema meta data decorator factory.
*/
-public final class RuleBasedSchemaMetaDataBuilderFactory {
+public final class RuleBasedSchemaMetaDataDecoratorFactory {
static {
-
ShardingSphereServiceLoader.register(RuleBasedSchemaMetaDataBuilder.class);
+
ShardingSphereServiceLoader.register(RuleBasedSchemaMetaDataDecorator.class);
}
/**
- * Get instances of rule based schema meta data builder.
+ * Get instances of rule based schema meta data decorator.
*
* @param rules rules
* @return got instances
*/
@SuppressWarnings("rawtypes")
- public static Map<ShardingSphereRule, RuleBasedSchemaMetaDataBuilder>
getInstances(final Collection<ShardingSphereRule> rules) {
- return
OrderedSPIRegistry.getRegisteredServices(RuleBasedSchemaMetaDataBuilder.class,
rules);
+ public static Map<ShardingSphereRule, RuleBasedSchemaMetaDataDecorator>
getInstances(final Collection<ShardingSphereRule> rules) {
+ return
OrderedSPIRegistry.getRegisteredServices(RuleBasedSchemaMetaDataDecorator.class,
rules);
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderTest.java
new file mode 100644
index 00000000000..a17d13c2520
--- /dev/null
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderTest.java
@@ -0,0 +1,117 @@
+/*
+ * 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.metadata.database.schema.builder;
+
+import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
+import org.apache.shardingsphere.infra.database.DefaultDatabase;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import
org.apache.shardingsphere.infra.metadata.database.schema.ShardingSphereSchema;
+import
org.apache.shardingsphere.infra.metadata.database.schema.fixture.rule.CommonFixtureRule;
+import
org.apache.shardingsphere.infra.metadata.database.schema.fixture.rule.DataNodeContainedFixtureRule;
+import
org.apache.shardingsphere.infra.metadata.database.schema.loader.SchemaMetaDataLoaderEngine;
+import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
+import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockedStatic;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import javax.sql.DataSource;
+import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
+
+@RunWith(MockitoJUnitRunner.class)
+public final class GenericSchemaBuilderTest {
+
+ @Mock
+ private DatabaseType databaseType;
+
+ private GenericSchemaBuilderMaterials materials;
+
+ private MockedStatic<SchemaMetaDataLoaderEngine>
schemaMetaDataLoaderEngine;
+
+ @Before
+ public void setUp() {
+ Collection<ShardingSphereRule> rules = Arrays.asList(new
CommonFixtureRule(), new DataNodeContainedFixtureRule());
+ materials = new GenericSchemaBuilderMaterials(databaseType,
databaseType, Collections.singletonMap(DefaultDatabase.LOGIC_NAME,
+ mock(DataSource.class)), rules, new
ConfigurationProperties(new Properties()), DefaultDatabase.LOGIC_NAME);
+ schemaMetaDataLoaderEngine =
mockStatic(SchemaMetaDataLoaderEngine.class);
+ }
+
+ @Test
+ public void assertLoadWithExistedTableName() throws SQLException {
+ Collection<String> tableNames =
Collections.singletonList("data_node_routed_table1");
+ schemaMetaDataLoaderEngine.when(() ->
SchemaMetaDataLoaderEngine.load(any(),
any())).thenReturn(mockSchemaMetaDataMap(tableNames, materials));
+ assertFalse(GenericSchemaBuilder.build(tableNames,
materials).get(DefaultDatabase.LOGIC_NAME).getTables().isEmpty());
+ }
+
+ @Test
+ public void assertLoadWithNotExistedTableName() throws SQLException {
+ Collection<String> tableNames =
Collections.singletonList("invalid_table");
+ schemaMetaDataLoaderEngine.when(() ->
SchemaMetaDataLoaderEngine.load(any(),
any())).thenReturn(mockSchemaMetaDataMap(tableNames, materials));
+ assertTrue(GenericSchemaBuilder.build(tableNames,
materials).get(DefaultDatabase.LOGIC_NAME).getTables().isEmpty());
+ }
+
+ @Test
+ public void assertLoadAllTables() throws SQLException {
+ Collection<String> tableNames = new
DataNodeContainedFixtureRule().getTables();
+ schemaMetaDataLoaderEngine.when(() ->
SchemaMetaDataLoaderEngine.load(any(),
any())).thenReturn(mockSchemaMetaDataMap(tableNames, materials));
+ Map<String, ShardingSphereSchema> actual =
GenericSchemaBuilder.build(tableNames, materials);
+ assertThat(actual.size(), is(1));
+ assertTables(new
ShardingSphereSchema(actual.values().iterator().next().getTables()).getTables());
+ }
+
+ @After
+ public void cleanUp() {
+ schemaMetaDataLoaderEngine.close();
+ }
+
+ private void assertTables(final Map<String, TableMetaData> actual) {
+ assertThat(actual.size(), is(2));
+
assertTrue(actual.get("data_node_routed_table1").getColumns().isEmpty());
+
assertTrue(actual.get("data_node_routed_table2").getColumns().isEmpty());
+ }
+
+ private Map<String, SchemaMetaData> mockSchemaMetaDataMap(final
Collection<String> tableNames, final GenericSchemaBuilderMaterials materials) {
+ if (!tableNames.isEmpty() &&
(tableNames.contains("data_node_routed_table1") ||
tableNames.contains("data_node_routed_table2"))) {
+ Map<String, TableMetaData> tableMetaDataMap = new
LinkedHashMap<>();
+ for (String each : tableNames) {
+ tableMetaDataMap.put(each, new TableMetaData(each,
Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
+ }
+ return Collections.singletonMap(materials.getDefaultSchemaName(),
new SchemaMetaData(materials.getDefaultSchemaName(), tableMetaDataMap));
+ }
+ return Collections.emptyMap();
+ }
+}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SchemaMetaDataBuilderTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SchemaMetaDataBuilderTest.java
deleted file mode 100644
index 9e59a24b37e..00000000000
---
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SchemaMetaDataBuilderTest.java
+++ /dev/null
@@ -1,78 +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.metadata.database.schema.builder;
-
-import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.DefaultDatabase;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import
org.apache.shardingsphere.infra.metadata.database.schema.ShardingSphereSchema;
-import
org.apache.shardingsphere.infra.metadata.database.schema.fixture.rule.CommonFixtureRule;
-import
org.apache.shardingsphere.infra.metadata.database.schema.fixture.rule.DataNodeContainedFixtureRule;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
-import org.apache.shardingsphere.test.mock.MockedDataSource;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-
-import java.sql.SQLException;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Map;
-import java.util.Properties;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-
-@RunWith(MockitoJUnitRunner.class)
-public final class SchemaMetaDataBuilderTest {
-
- @Mock
- private DatabaseType databaseType;
-
- @Test
- public void assertLoadWithExistedTableName() throws SQLException {
- GenericSchemaBuilderMaterials materials = new
GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap(DefaultDatabase.LOGIC_NAME, new MockedDataSource()),
- Arrays.asList(new CommonFixtureRule(), new
DataNodeContainedFixtureRule()), new ConfigurationProperties(new Properties()),
DefaultDatabase.LOGIC_NAME);
-
assertFalse(GenericSchemaBuilder.build(Collections.singletonList("data_node_routed_table1"),
materials).get(DefaultDatabase.LOGIC_NAME).getTables().isEmpty());
- }
-
- @Test
- public void assertLoadWithNotExistedTableName() throws SQLException {
- GenericSchemaBuilderMaterials materials = new
GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap(DefaultDatabase.LOGIC_NAME, new MockedDataSource()),
- Arrays.asList(new CommonFixtureRule(), new
DataNodeContainedFixtureRule()), new ConfigurationProperties(new Properties()),
DefaultDatabase.LOGIC_NAME);
-
assertTrue(GenericSchemaBuilder.build(Collections.singletonList("invalid_table"),
materials).get(DefaultDatabase.LOGIC_NAME).getTables().isEmpty());
- }
-
- @Test
- public void assertLoadAllTables() throws SQLException {
- GenericSchemaBuilderMaterials materials = new
GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap(DefaultDatabase.LOGIC_NAME, new MockedDataSource()),
- Arrays.asList(new CommonFixtureRule(), new
DataNodeContainedFixtureRule()), new ConfigurationProperties(new Properties()),
DefaultDatabase.LOGIC_NAME);
- Map<String, ShardingSphereSchema> actual =
GenericSchemaBuilder.build(new DataNodeContainedFixtureRule().getTables(),
materials);
- assertThat(actual.size(), is(1));
- assertTables(new
ShardingSphereSchema(actual.values().iterator().next().getTables()).getTables());
- }
-
- private void assertTables(final Map<String, TableMetaData> actual) {
- assertThat(actual.size(), is(2));
-
assertTrue(actual.get("data_node_routed_table1").getColumns().isEmpty());
-
assertTrue(actual.get("data_node_routed_table2").getColumns().isEmpty());
- }
-}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/spi/RuleBasedSchemaMetaDataBuilderFactoryTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/spi/RuleBasedSchemaMetaDataDecoratorFactoryTest.java
similarity index 82%
rename from
shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/spi/RuleBasedSchemaMetaDataBuilderFactoryTest.java
rename to
shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/spi/RuleBasedSchemaMetaDataDecoratorFactoryTest.java
index 71b96379952..02674d87a93 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/spi/RuleBasedSchemaMetaDataBuilderFactoryTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/spi/RuleBasedSchemaMetaDataDecoratorFactoryTest.java
@@ -17,7 +17,7 @@
package org.apache.shardingsphere.infra.metadata.database.schema.builder.spi;
-import
org.apache.shardingsphere.infra.metadata.database.schema.fixture.loader.CommonFixtureSchemaMetaDataBuilder;
+import
org.apache.shardingsphere.infra.metadata.database.schema.fixture.loader.CommonFixtureSchemaMetaDataDecorator;
import
org.apache.shardingsphere.infra.metadata.database.schema.fixture.rule.CommonFixtureRule;
import org.junit.Test;
@@ -26,11 +26,11 @@ import java.util.Collections;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.junit.Assert.assertThat;
-public final class RuleBasedSchemaMetaDataBuilderFactoryTest {
+public final class RuleBasedSchemaMetaDataDecoratorFactoryTest {
@Test
public void assertGetInstances() {
CommonFixtureRule rule = new CommonFixtureRule();
-
assertThat(RuleBasedSchemaMetaDataBuilderFactory.getInstances(Collections.singleton(rule)).get(rule),
instanceOf(CommonFixtureSchemaMetaDataBuilder.class));
+
assertThat(RuleBasedSchemaMetaDataDecoratorFactory.getInstances(Collections.singleton(rule)).get(rule),
instanceOf(CommonFixtureSchemaMetaDataDecorator.class));
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/fixture/loader/CommonFixtureSchemaMetaDataBuilder.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/fixture/loader/CommonFixtureSchemaMetaDataDecorator.java
similarity index 74%
rename from
shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/fixture/loader/CommonFixtureSchemaMetaDataBuilder.java
rename to
shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/fixture/loader/CommonFixtureSchemaMetaDataDecorator.java
index 4c6a8d3e14c..25404cd70bd 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/fixture/loader/CommonFixtureSchemaMetaDataBuilder.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/fixture/loader/CommonFixtureSchemaMetaDataDecorator.java
@@ -18,24 +18,16 @@
package
org.apache.shardingsphere.infra.metadata.database.schema.fixture.loader;
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataDecorator;
import
org.apache.shardingsphere.infra.metadata.database.schema.fixture.rule.CommonFixtureRule;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
-import java.sql.SQLException;
-import java.util.Collection;
-import java.util.Collections;
import java.util.Map;
-public final class CommonFixtureSchemaMetaDataBuilder implements
RuleBasedSchemaMetaDataBuilder<CommonFixtureRule> {
+public final class CommonFixtureSchemaMetaDataDecorator implements
RuleBasedSchemaMetaDataDecorator<CommonFixtureRule> {
@Override
- public Map<String, SchemaMetaData> load(final Collection<String>
tableNames, final CommonFixtureRule rule, final GenericSchemaBuilderMaterials
materials) throws SQLException {
- return Collections.emptyMap();
- }
-
- @Override
- public Map<String, SchemaMetaData> decorate(final Map<String,
SchemaMetaData> schemaMetaDataMap, final CommonFixtureRule rule, final
GenericSchemaBuilderMaterials materials) throws SQLException {
+ public Map<String, SchemaMetaData> decorate(final Map<String,
SchemaMetaData> schemaMetaDataMap, final CommonFixtureRule rule, final
GenericSchemaBuilderMaterials materials) {
return schemaMetaDataMap;
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/fixture/loader/DataNodeContainedFixtureRuleBasedSchemaMetaDataBuilder.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/fixture/loader/DataNodeContainedFixtureRuleBasedSchemaMetaDataDecorator.java
similarity index 54%
rename from
shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/fixture/loader/DataNodeContainedFixtureRuleBasedSchemaMetaDataBuilder.java
rename to
shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/fixture/loader/DataNodeContainedFixtureRuleBasedSchemaMetaDataDecorator.java
index a0d5a11ca6e..033ec051461 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/fixture/loader/DataNodeContainedFixtureRuleBasedSchemaMetaDataBuilder.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/fixture/loader/DataNodeContainedFixtureRuleBasedSchemaMetaDataDecorator.java
@@ -18,34 +18,16 @@
package
org.apache.shardingsphere.infra.metadata.database.schema.fixture.loader;
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataDecorator;
import
org.apache.shardingsphere.infra.metadata.database.schema.fixture.rule.DataNodeContainedFixtureRule;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
-import java.sql.SQLException;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedHashMap;
import java.util.Map;
-public final class DataNodeContainedFixtureRuleBasedSchemaMetaDataBuilder
implements RuleBasedSchemaMetaDataBuilder<DataNodeContainedFixtureRule> {
+public final class DataNodeContainedFixtureRuleBasedSchemaMetaDataDecorator
implements RuleBasedSchemaMetaDataDecorator<DataNodeContainedFixtureRule> {
@Override
- public Map<String, SchemaMetaData> load(final Collection<String>
tableNames, final DataNodeContainedFixtureRule rule, final
GenericSchemaBuilderMaterials materials) throws SQLException {
- if (!tableNames.isEmpty() &&
(tableNames.contains("data_node_routed_table1") ||
tableNames.contains("data_node_routed_table2"))) {
- Map<String, TableMetaData> tableMetaDataMap = new
LinkedHashMap<>();
- for (String tableName : tableNames) {
- tableMetaDataMap.put(tableName, new TableMetaData(tableName,
Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
- }
- return Collections.singletonMap(materials.getDefaultSchemaName(),
new SchemaMetaData(materials.getDefaultSchemaName(), tableMetaDataMap));
- }
- return Collections.emptyMap();
- }
-
- @Override
- public Map<String, SchemaMetaData> decorate(final Map<String,
SchemaMetaData> schemaMetaDataMap,
- final
DataNodeContainedFixtureRule rule, final GenericSchemaBuilderMaterials
materials) throws SQLException {
+ public Map<String, SchemaMetaData> decorate(final Map<String,
SchemaMetaData> schemaMetaDataMap, final DataNodeContainedFixtureRule rule,
final GenericSchemaBuilderMaterials materials) {
return schemaMetaDataMap;
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder
b/shardingsphere-infra/shardingsphere-infra-common/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataDecorator
similarity index 89%
rename from
shardingsphere-infra/shardingsphere-infra-common/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder
rename to
shardingsphere-infra/shardingsphere-infra-common/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataDecorator
index 90cababb128..715f78fb9b4 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataDecorator
@@ -15,5 +15,5 @@
# limitations under the License.
#
-org.apache.shardingsphere.infra.metadata.database.schema.fixture.loader.CommonFixtureSchemaMetaDataBuilder
-org.apache.shardingsphere.infra.metadata.database.schema.fixture.loader.DataNodeContainedFixtureRuleBasedSchemaMetaDataBuilder
+org.apache.shardingsphere.infra.metadata.database.schema.fixture.loader.CommonFixtureSchemaMetaDataDecorator
+org.apache.shardingsphere.infra.metadata.database.schema.fixture.loader.DataNodeContainedFixtureRuleBasedSchemaMetaDataDecorator
diff --git
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresherTest.java
b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresherTest.java
index 644d142c1af..0793b70c878 100644
---
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresherTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresherTest.java
@@ -35,6 +35,7 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.Sim
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.RenameTableStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
+import org.apache.shardingsphere.test.mock.MockedDataSource;
import org.junit.Test;
import java.sql.SQLException;
@@ -42,6 +43,7 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
+import java.util.Properties;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
@@ -55,7 +57,7 @@ public final class RenameTableStatementSchemaRefresherTest {
RenameTableLister listener = new RenameTableLister(2);
ShardingSphereEventBus.getInstance().register(listener);
new
RenameTableStatementSchemaRefresher().refresh(createDatabaseMetaData(), new
FederationDatabaseMetaData("foo_database", Collections.emptyMap()),
- new HashMap<>(), Collections.singleton("foo_ds"),
"foo_schema", createRenameTableStatement(),
mock(ConfigurationProperties.class));
+ new HashMap<>(), Collections.singleton("foo_ds"),
"foo_schema", createRenameTableStatement(), new ConfigurationProperties(new
Properties()));
assertThat(listener.getActualCount(), is(listener.getRenameCount()));
ShardingSphereEventBus.getInstance().unregister(listener);
}
@@ -81,7 +83,7 @@ public final class RenameTableStatementSchemaRefresherTest {
private ShardingSphereResource mockShardingSphereResource() {
ShardingSphereResource result = mock(ShardingSphereResource.class);
- when(result.getDataSources()).thenReturn(Collections.emptyMap());
+
when(result.getDataSources()).thenReturn(Collections.singletonMap(DefaultDatabase.LOGIC_NAME,
new MockedDataSource()));
when(result.getDatabaseType()).thenReturn(new SQL92DatabaseType());
return result;
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-executor/src/test/java/org/apache/shardingsphere/infra/federation/executor/customized/fixture/CommonFixtureRule.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-executor/src/test/java/org/apache/shardingsphere/infra/federation/executor/customized/fixture/CommonFixtureRule.java
deleted file mode 100644
index 34a4bd43bc2..00000000000
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-executor/src/test/java/org/apache/shardingsphere/infra/federation/executor/customized/fixture/CommonFixtureRule.java
+++ /dev/null
@@ -1,36 +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.federation.executor.customized.fixture;
-
-import org.apache.shardingsphere.infra.rule.identifier.type.TableContainedRule;
-
-import java.util.Collection;
-import java.util.Collections;
-
-public final class CommonFixtureRule implements TableContainedRule {
-
- @Override
- public Collection<String> getTables() {
- return Collections.singletonList("t_order_new");
- }
-
- @Override
- public String getType() {
- return CommonFixtureRule.class.getSimpleName();
- }
-}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-executor/src/test/resources/META-INF.services/org.apache.shardingsphere.infra.metadata.schema.builder.spi.RuleBasedTableMetaDataBuilder
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-executor/src/test/resources/META-INF.services/org.apache.shardingsphere.infra.metadata.schema.builder.spi.RuleBasedTableMetaDataBuilder
deleted file mode 100644
index a58cf11ad21..00000000000
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-executor/src/test/resources/META-INF.services/org.apache.shardingsphere.infra.metadata.schema.builder.spi.RuleBasedTableMetaDataBuilder
+++ /dev/null
@@ -1,18 +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.
-#
-
-org.apache.shardingsphere.infra.federation.optimizer.metadata.fixture.CommonFixtureTableMetaDataBuilder
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/test/java/org/apache/shardingsphere/infra/federation/optimizer/metadata/fixture/CommonFixtureRule.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/test/java/org/apache/shardingsphere/infra/federation/optimizer/metadata/fixture/CommonFixtureRule.java
deleted file mode 100644
index 26a34ce0a6e..00000000000
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/test/java/org/apache/shardingsphere/infra/federation/optimizer/metadata/fixture/CommonFixtureRule.java
+++ /dev/null
@@ -1,36 +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.federation.optimizer.metadata.fixture;
-
-import org.apache.shardingsphere.infra.rule.identifier.type.TableContainedRule;
-
-import java.util.Collection;
-import java.util.Collections;
-
-public final class CommonFixtureRule implements TableContainedRule {
-
- @Override
- public Collection<String> getTables() {
- return Collections.singletonList("t_order_new");
- }
-
- @Override
- public String getType() {
- return CommonFixtureRule.class.getSimpleName();
- }
-}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/test/java/org/apache/shardingsphere/infra/federation/optimizer/metadata/fixture/CommonFixtureSchemaMetaDataBuilder.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/test/java/org/apache/shardingsphere/infra/federation/optimizer/metadata/fixture/CommonFixtureSchemaMetaDataBuilder.java
deleted file mode 100644
index ec6e5d1b0b6..00000000000
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/test/java/org/apache/shardingsphere/infra/federation/optimizer/metadata/fixture/CommonFixtureSchemaMetaDataBuilder.java
+++ /dev/null
@@ -1,53 +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.federation.optimizer.metadata.fixture;
-
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
-
-import java.sql.SQLException;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Map;
-
-public final class CommonFixtureSchemaMetaDataBuilder implements
RuleBasedSchemaMetaDataBuilder<CommonFixtureRule> {
-
- @Override
- public Map<String, SchemaMetaData> load(final Collection<String>
tableNames, final CommonFixtureRule rule, final GenericSchemaBuilderMaterials
materials) throws SQLException {
- Map<String, TableMetaData> tableMetaDataMap =
Collections.singletonMap("t_order_new",
- new TableMetaData("t_order_new", Collections.emptyList(),
Collections.emptyList(), Collections.emptyList()));
- return Collections.singletonMap(materials.getDefaultSchemaName(), new
SchemaMetaData(materials.getDefaultSchemaName(), tableMetaDataMap));
- }
-
- @Override
- public Map<String, SchemaMetaData> decorate(final Map<String,
SchemaMetaData> schemaMetaDataMap, final CommonFixtureRule rule, final
GenericSchemaBuilderMaterials materials) throws SQLException {
- return schemaMetaDataMap;
- }
-
- @Override
- public int getOrder() {
- return 1;
- }
-
- @Override
- public Class<CommonFixtureRule> getTypeClass() {
- return CommonFixtureRule.class;
- }
-}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder
deleted file mode 100644
index 05ec57efa1b..00000000000
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder
+++ /dev/null
@@ -1,18 +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.
-#
-
-org.apache.shardingsphere.infra.federation.optimizer.metadata.fixture.CommonFixtureSchemaMetaDataBuilder
diff --git
a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/metadata/SingleTableSchemaMetaDataBuilder.java
b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/metadata/SingleTableSchemaMetaDataDecorator.java
similarity index 71%
rename from
shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/metadata/SingleTableSchemaMetaDataBuilder.java
rename to
shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/metadata/SingleTableSchemaMetaDataDecorator.java
index 6f17097bcf6..14ca0bc60df 100644
---
a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/metadata/SingleTableSchemaMetaDataBuilder.java
+++
b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/metadata/SingleTableSchemaMetaDataDecorator.java
@@ -18,47 +18,28 @@
package org.apache.shardingsphere.singletable.metadata;
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.SchemaMetaDataLoaderEngine;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.TableMetaDataLoaderMaterial;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataDecorator;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ConstraintMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.IndexMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.util.IndexMetaDataUtil;
-import
org.apache.shardingsphere.infra.metadata.database.schema.util.TableMetaDataUtil;
import org.apache.shardingsphere.singletable.constant.SingleTableOrder;
import org.apache.shardingsphere.singletable.rule.SingleTableRule;
-import java.sql.SQLException;
import java.util.Collection;
-import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collectors;
/**
- * Schema meta data builder for single table.
+ * Schema meta data decorator for single table.
*/
-public final class SingleTableSchemaMetaDataBuilder implements
RuleBasedSchemaMetaDataBuilder<SingleTableRule> {
+public final class SingleTableSchemaMetaDataDecorator implements
RuleBasedSchemaMetaDataDecorator<SingleTableRule> {
@Override
- public Map<String, SchemaMetaData> load(final Collection<String>
tableNames, final SingleTableRule rule, final GenericSchemaBuilderMaterials
materials) throws SQLException {
- Collection<String> ruleTables = rule.getTables();
- Collection<String> needLoadTables =
tableNames.stream().filter(ruleTables::contains).collect(Collectors.toSet());
- if (needLoadTables.isEmpty()) {
- return Collections.emptyMap();
- }
- Collection<TableMetaDataLoaderMaterial> tableMetaDataLoaderMaterials =
TableMetaDataUtil.getTableMetaDataLoadMaterial(needLoadTables, materials,
false);
- if (tableMetaDataLoaderMaterials.isEmpty()) {
- return Collections.emptyMap();
- }
- return SchemaMetaDataLoaderEngine.load(tableMetaDataLoaderMaterials,
materials.getStorageType());
- }
-
- @Override
- public Map<String, SchemaMetaData> decorate(final Map<String,
SchemaMetaData> schemaMetaDataMap, final SingleTableRule rule, final
GenericSchemaBuilderMaterials materials) throws SQLException {
+ public Map<String, SchemaMetaData> decorate(final Map<String,
SchemaMetaData> schemaMetaDataMap, final SingleTableRule rule, final
GenericSchemaBuilderMaterials materials) {
Map<String, SchemaMetaData> result = new LinkedHashMap<>();
for (Entry<String, SchemaMetaData> entry :
schemaMetaDataMap.entrySet()) {
Map<String, TableMetaData> tables = new
LinkedHashMap<>(entry.getValue().getTables().size(), 1);
diff --git
a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder
b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataDecorator
similarity index 97%
rename from
shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder
rename to
shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataDecorator
index 616e38faa37..be441e1a4b7 100644
---
a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder
+++
b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataDecorator
@@ -15,4 +15,4 @@
# limitations under the License.
#
-org.apache.shardingsphere.singletable.metadata.SingleTableSchemaMetaDataBuilder
+org.apache.shardingsphere.singletable.metadata.SingleTableSchemaMetaDataDecorator
diff --git
a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/test/java/org/apache/shardingsphere/singletable/metadata/SingleTableSchemaMetaDataBuilderTest.java
b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/test/java/org/apache/shardingsphere/singletable/metadata/SingleTableSchemaMetaDataBuilderTest.java
index 6293b9c5744..3acd4abd30c 100644
---
a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/test/java/org/apache/shardingsphere/singletable/metadata/SingleTableSchemaMetaDataBuilderTest.java
+++
b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/test/java/org/apache/shardingsphere/singletable/metadata/SingleTableSchemaMetaDataBuilderTest.java
@@ -17,133 +17,40 @@
package org.apache.shardingsphere.singletable.metadata;
-import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.DefaultDatabase;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilderFactory;
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataDecoratorFactory;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.IndexMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import
org.apache.shardingsphere.singletable.config.SingleTableRuleConfiguration;
import org.apache.shardingsphere.singletable.rule.SingleTableRule;
-import org.junit.Before;
import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Answers;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-import javax.sql.DataSource;
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import java.util.Properties;
import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-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.when;
-@RunWith(MockitoJUnitRunner.class)
public final class SingleTableSchemaMetaDataBuilderTest {
- private SingleTableRule singleTableRule;
-
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private DatabaseType databaseType;
-
- @Mock
- private DataSource dataSource;
-
- @Before
- public void setUp() throws SQLException {
- Connection connection = mock(Connection.class, RETURNS_DEEP_STUBS);
- when(dataSource.getConnection()).thenReturn(connection);
- mockSingleTableLoad(connection);
- singleTableRule = new SingleTableRule(new
SingleTableRuleConfiguration(), DefaultDatabase.LOGIC_NAME, databaseType,
- Collections.singletonMap("ds", dataSource),
Collections.emptyList(), new ConfigurationProperties(new Properties()));
- when(databaseType.formatTableNamePattern("tbl")).thenReturn("tbl");
- mockTableIsExist(connection);
- mockTables(connection);
- when(databaseType.getQuoteCharacter().wrap("tbl")).thenReturn("tbl");
- }
-
- private void mockTables(final Connection connection) throws SQLException {
- ResultSet resultSet = mock(ResultSet.class);
- when(resultSet.next()).thenReturn(true, true, true, false);
- when(resultSet.getString("TABLE_NAME")).thenReturn("tbl");
- when(resultSet.getString("COLUMN_NAME")).thenReturn("id", "name",
"doc");
- when(resultSet.getInt("DATA_TYPE")).thenReturn(4, 12, -1);
- when(connection.getMetaData().getColumns(any(), any(), any(),
eq("%"))).thenReturn(resultSet);
- ResultSet indexResultSet = mock(ResultSet.class,
Answers.RETURNS_DEEP_STUBS);
- when(connection.getMetaData().getIndexInfo(any(), any(), eq("tbl"),
eq(false), eq(false))).thenReturn(indexResultSet);
- when(indexResultSet.getString("INDEX_NAME")).thenReturn("id",
"idx_name_tbl");
- when(indexResultSet.next()).thenReturn(true, true, false);
- ResultSet primaryResultSet = mock(ResultSet.class);
- when(connection.getMetaData().getPrimaryKeys(any(), any(),
eq("tbl"))).thenReturn(primaryResultSet);
- when(primaryResultSet.next()).thenReturn(true, false);
- when(primaryResultSet.getString("COLUMN_NAME")).thenReturn("id");
- }
-
- private void mockTableIsExist(final Connection connection) throws
SQLException {
- ResultSet resultSet = mock(ResultSet.class);
- when(connection.getMetaData().getTables(any(), any(), eq("tbl"),
eq(null))).thenReturn(resultSet);
- when(resultSet.next()).thenReturn(true);
- }
-
- private void mockSingleTableLoad(final Connection connection) throws
SQLException {
- ResultSet resultSet = mock(ResultSet.class);
- when(connection.getMetaData().getTables(any(), any(), eq(null),
any())).thenReturn(resultSet);
- when(resultSet.next()).thenReturn(true, false);
- when(resultSet.getString("TABLE_NAME")).thenReturn("tbl");
- }
-
- @Test
- public void assertLoad() throws SQLException {
- Collection<ShardingSphereRule> rules =
Collections.singletonList(singleTableRule);
- SingleTableSchemaMetaDataBuilder builder =
(SingleTableSchemaMetaDataBuilder)
RuleBasedSchemaMetaDataBuilderFactory.getInstances(rules).get(singleTableRule);
- Map<String, SchemaMetaData> actual =
builder.load(Collections.singleton("tbl"), singleTableRule,
- new GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap("ds", dataSource), rules, new
ConfigurationProperties(new Properties()), "sharding_db"));
- assertFalse(actual.isEmpty());
- assertTrue(actual.containsKey("sharding_db"));
- assertTrue(actual.get("sharding_db").getTables().containsKey("tbl"));
- TableMetaData actualTableMetaData =
actual.get("sharding_db").getTables().get("tbl");
- assertThat(actualTableMetaData.getColumns().size(), is(3));
- List<String> columnNames = new
ArrayList<>(actualTableMetaData.getColumns().keySet());
- assertThat(actualTableMetaData.getColumns().get(columnNames.get(0)),
is(new ColumnMetaData("id", 4, true, false, false)));
- assertThat(actualTableMetaData.getColumns().get(columnNames.get(1)),
is(new ColumnMetaData("name", 12, false, false, false)));
- assertThat(actualTableMetaData.getColumns().get(columnNames.get(2)),
is(new ColumnMetaData("doc", -1, false, false, false)));
- }
+ private static final String TABLE_NAME = "t_single";
@Test
- public void assertDecorate() throws SQLException {
+ public void assertDecorate() {
+ SingleTableRule singleTableRule = mock(SingleTableRule.class);
Collection<ShardingSphereRule> rules =
Collections.singletonList(singleTableRule);
- final SingleTableSchemaMetaDataBuilder builder =
(SingleTableSchemaMetaDataBuilder)
RuleBasedSchemaMetaDataBuilderFactory.getInstances(rules).get(singleTableRule);
- Map<String, SchemaMetaData> actual =
builder.load(Collections.singleton("tbl"), singleTableRule,
- new GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap("ds", dataSource), rules, new
ConfigurationProperties(new Properties()), "sharding_db"));
- assertFalse(actual.isEmpty());
- assertTrue(actual.containsKey("sharding_db"));
- TableMetaData actualTableMetaData =
actual.get("sharding_db").getTables().get("tbl");
- assertThat(actualTableMetaData.getColumns().size(), is(3));
- List<String> actualColumnNames = new
ArrayList<>(actualTableMetaData.getColumns().keySet());
-
assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(0)),
is(new ColumnMetaData("id", 4, true, false, false)));
-
assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(1)),
is(new ColumnMetaData("name", 12, false, false, false)));
-
assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(2)),
is(new ColumnMetaData("doc", -1, false, false, false)));
- TableMetaData tableMetaData = builder.decorate(actual,
singleTableRule,
mock(GenericSchemaBuilderMaterials.class)).get("sharding_db").getTables().get("tbl");
- actualColumnNames = new
ArrayList<>(tableMetaData.getColumns().keySet());
+ SingleTableSchemaMetaDataDecorator builder =
(SingleTableSchemaMetaDataDecorator)
RuleBasedSchemaMetaDataDecoratorFactory.getInstances(rules).get(singleTableRule);
+ Map<String, SchemaMetaData> schemaMetaDataMap =
mockSchemaMetaDataMap();
+ TableMetaData tableMetaData = builder.decorate(schemaMetaDataMap,
singleTableRule,
mock(GenericSchemaBuilderMaterials.class)).get("sharding_db").getTables().get(TABLE_NAME);
+ List<String> actualColumnNames = new
ArrayList<>(tableMetaData.getColumns().keySet());
assertThat(tableMetaData.getColumns().get(actualColumnNames.get(0)),
is(new ColumnMetaData("id", 4, true, false, false)));
assertThat(tableMetaData.getColumns().get(actualColumnNames.get(1)),
is(new ColumnMetaData("name", 12, false, false, false)));
assertThat(tableMetaData.getColumns().get(actualColumnNames.get(2)),
is(new ColumnMetaData("doc", -1, false, false, false)));
@@ -151,4 +58,14 @@ public final class SingleTableSchemaMetaDataBuilderTest {
assertThat(tableMetaData.getIndexes().get("id"), is(new
IndexMetaData("id")));
assertThat(tableMetaData.getIndexes().get("idx_name"), is(new
IndexMetaData("idx_name")));
}
+
+ private Map<String, SchemaMetaData> mockSchemaMetaDataMap() {
+ Collection<ColumnMetaData> columns = Arrays.asList(new
ColumnMetaData("id", 4, true, false, false),
+ new ColumnMetaData("name", 12, false, false, false),
+ new ColumnMetaData("doc", -1, false, false, false));
+ Collection<IndexMetaData> indexMetaDataList = Arrays.asList(new
IndexMetaData("id_" + TABLE_NAME), new IndexMetaData("idx_name_" + TABLE_NAME));
+ Map<String, TableMetaData> tableMetaDataMap = new LinkedHashMap<>();
+ tableMetaDataMap.put(TABLE_NAME, new TableMetaData(TABLE_NAME,
columns, indexMetaDataList, Collections.emptyList()));
+ return Collections.singletonMap("sharding_db", new
SchemaMetaData("sharding_db", tableMetaDataMap));
+ }
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/java/org/apache/shardingsphere/integration/data/pipeline/cases/base/BaseITCase.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/java/org/apache/shardingsphere/integration/data/pipeline/cases/base/BaseITCase.java
index a07ce91d290..6eb31d0a6bb 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/java/org/apache/shardingsphere/integration/data/pipeline/cases/base/BaseITCase.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-scaling/src/test/java/org/apache/shardingsphere/integration/data/pipeline/cases/base/BaseITCase.java
@@ -291,7 +291,7 @@ public abstract class BaseITCase {
List<Map<String, Object>> previewResults =
queryForListWithLog("PREVIEW SELECT COUNT(1) FROM t_order");
Set<Object> targetSources = previewResults.stream().map(each ->
each.get("actual_sql")).collect(Collectors.toSet());
assertThat(previewResults.stream().map(each ->
each.get("data_source_name")).collect(Collectors.toSet()), is(new
HashSet<>(Arrays.asList("ds_2", "ds_3", "ds_4"))));
- assertThat(targetSources, is(new HashSet<>(Arrays.asList("SELECT
COUNT(1) FROM t_order_0 UNION ALL SELECT COUNT(1) FROM t_order_3",
+ assertThat(targetSources, is(new HashSet<>(Arrays.asList("SELECT
COUNT(1) FROM t_order_0 UNION ALL SELECT COUNT(1) FROM t_order_3",
"SELECT COUNT(1) FROM t_order_1 UNION ALL SELECT COUNT(1) FROM
t_order_4", "SELECT COUNT(1) FROM t_order_2 UNION ALL SELECT COUNT(1) FROM
t_order_5"))));
}
}