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 bdb512753cd Minor refactor SchemaMetaDataLoader to add excludedTables
filter logic (#33200)
bdb512753cd is described below
commit bdb512753cdaa89e7d0a928a4c57b71edb710c3d
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Thu Oct 10 10:57:57 2024 +0800
Minor refactor SchemaMetaDataLoader to add excludedTables filter logic
(#33200)
---
.../metadata/data/loader/type/SchemaMetaDataLoader.java | 16 +++++++++-------
.../data/loader/MySQLSchemaMetaDataLoaderTest.java | 5 +++--
.../data/loader/OpenGaussSchemaMetaDataLoaderTest.java | 5 +++--
.../data/loader/PostgreSQLSchemaMetaDataLoaderTest.java | 5 +++--
.../single/datanode/SingleTableDataNodeLoader.java | 14 +++++++-------
.../distsql/handler/update/LoadSingleTableExecutor.java | 4 +++-
6 files changed, 28 insertions(+), 21 deletions(-)
diff --git
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/loader/type/SchemaMetaDataLoader.java
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/loader/type/SchemaMetaDataLoader.java
index 5d63dd24b9f..c3772ba51f9 100644
---
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/loader/type/SchemaMetaDataLoader.java
+++
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/loader/type/SchemaMetaDataLoader.java
@@ -17,6 +17,7 @@
package
org.apache.shardingsphere.infra.database.core.metadata.data.loader.type;
+import com.cedarsoftware.util.CaseInsensitiveMap;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import
org.apache.shardingsphere.infra.database.core.metadata.data.loader.MetaDataLoaderConnection;
@@ -31,7 +32,6 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
@@ -54,22 +54,24 @@ public final class SchemaMetaDataLoader {
private static final String TABLE_SCHEME = "TABLE_SCHEM";
/**
- * Load schema table names.
+ * Load schema table names by excluded tables.
*
* @param databaseName database name
* @param databaseType database type
* @param dataSource data source
+ * @param excludedTables excluded tables
* @return loaded schema table names
* @throws SQLException SQL exception
*/
- public static Map<String, Collection<String>> loadSchemaTableNames(final
String databaseName, final DatabaseType databaseType, final DataSource
dataSource) throws SQLException {
+ public static Map<String, Collection<String>>
loadSchemaTableNamesByExcludedTables(final String databaseName, final
DatabaseType databaseType, final DataSource dataSource,
+
final Collection<String> excludedTables) throws SQLException {
try (MetaDataLoaderConnection connection = new
MetaDataLoaderConnection(databaseType, dataSource.getConnection())) {
Collection<String> schemaNames = loadSchemaNames(connection,
databaseType);
DialectDatabaseMetaData dialectDatabaseMetaData = new
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData();
- Map<String, Collection<String>> result = new
HashMap<>(schemaNames.size(), 1F);
+ Map<String, Collection<String>> result = new
CaseInsensitiveMap<>(schemaNames.size(), 1F);
for (String each : schemaNames) {
String schemaName =
dialectDatabaseMetaData.getDefaultSchema().isPresent() ? each : databaseName;
- result.put(schemaName, loadTableNames(connection, each));
+ result.put(schemaName, loadTableNames(connection, each,
excludedTables));
}
return result;
}
@@ -101,12 +103,12 @@ public final class SchemaMetaDataLoader {
return result.isEmpty() ?
Collections.singletonList(connection.getSchema()) : result;
}
- private static Collection<String> loadTableNames(final Connection
connection, final String schemaName) throws SQLException {
+ private static Collection<String> loadTableNames(final Connection
connection, final String schemaName, final Collection<String> excludedTables)
throws SQLException {
Collection<String> result = new LinkedList<>();
try (ResultSet resultSet =
connection.getMetaData().getTables(connection.getCatalog(), schemaName, null,
new String[]{TABLE_TYPE, VIEW_TYPE, SYSTEM_TABLE_TYPE, SYSTEM_VIEW_TYPE})) {
while (resultSet.next()) {
String table = resultSet.getString(TABLE_NAME);
- if (!isSystemTable(table)) {
+ if (!isSystemTable(table) && !excludedTables.contains(table)) {
result.add(table);
}
}
diff --git
a/infra/database/type/mysql/src/test/java/org/apache/shardingsphere/infra/database/mysql/metadata/data/loader/MySQLSchemaMetaDataLoaderTest.java
b/infra/database/type/mysql/src/test/java/org/apache/shardingsphere/infra/database/mysql/metadata/data/loader/MySQLSchemaMetaDataLoaderTest.java
index 33d987e1e52..a0e15415ccb 100644
---
a/infra/database/type/mysql/src/test/java/org/apache/shardingsphere/infra/database/mysql/metadata/data/loader/MySQLSchemaMetaDataLoaderTest.java
+++
b/infra/database/type/mysql/src/test/java/org/apache/shardingsphere/infra/database/mysql/metadata/data/loader/MySQLSchemaMetaDataLoaderTest.java
@@ -74,9 +74,10 @@ class MySQLSchemaMetaDataLoaderTest {
}
@Test
- void assertLoadSchemaTableNames() throws SQLException {
+ void assertLoadSchemaTableNamesByExcludedTables() throws SQLException {
Map<String, Collection<String>> schemaTableNames =
Collections.singletonMap(DefaultDatabase.LOGIC_NAME,
Collections.singletonList("tbl"));
-
assertThat(SchemaMetaDataLoader.loadSchemaTableNames(DefaultDatabase.LOGIC_NAME,
TypedSPILoader.getService(DatabaseType.class, "MySQL"), dataSource),
is(schemaTableNames));
+
assertThat(SchemaMetaDataLoader.loadSchemaTableNamesByExcludedTables(DefaultDatabase.LOGIC_NAME,
+ TypedSPILoader.getService(DatabaseType.class, "MySQL"),
dataSource, Collections.emptyList()), is(schemaTableNames));
}
@Test
diff --git
a/infra/database/type/opengauss/src/test/java/org/apache/shardingsphere/infra/database/opengauss/metadata/data/loader/OpenGaussSchemaMetaDataLoaderTest.java
b/infra/database/type/opengauss/src/test/java/org/apache/shardingsphere/infra/database/opengauss/metadata/data/loader/OpenGaussSchemaMetaDataLoaderTest.java
index b99849da1c2..2db8141d3e0 100644
---
a/infra/database/type/opengauss/src/test/java/org/apache/shardingsphere/infra/database/opengauss/metadata/data/loader/OpenGaussSchemaMetaDataLoaderTest.java
+++
b/infra/database/type/opengauss/src/test/java/org/apache/shardingsphere/infra/database/opengauss/metadata/data/loader/OpenGaussSchemaMetaDataLoaderTest.java
@@ -76,8 +76,9 @@ class OpenGaussSchemaMetaDataLoaderTest {
}
@Test
- void assertLoadSchemaTableNames() throws SQLException {
-
assertThat(SchemaMetaDataLoader.loadSchemaTableNames(DefaultDatabase.LOGIC_NAME,
TypedSPILoader.getService(DatabaseType.class, "openGauss"), dataSource),
is(createSchemaTableNames()));
+ void assertLoadSchemaTableNamesByExcludedTables() throws SQLException {
+
assertThat(SchemaMetaDataLoader.loadSchemaTableNamesByExcludedTables(DefaultDatabase.LOGIC_NAME,
+ TypedSPILoader.getService(DatabaseType.class, "openGauss"),
dataSource, Collections.emptyList()), is(createSchemaTableNames()));
}
private Map<String, Collection<String>> createSchemaTableNames() {
diff --git
a/infra/database/type/postgresql/src/test/java/org/apache/shardingsphere/infra/database/postgresql/metadata/data/loader/PostgreSQLSchemaMetaDataLoaderTest.java
b/infra/database/type/postgresql/src/test/java/org/apache/shardingsphere/infra/database/postgresql/metadata/data/loader/PostgreSQLSchemaMetaDataLoaderTest.java
index 3ce83081962..b5540694b1a 100644
---
a/infra/database/type/postgresql/src/test/java/org/apache/shardingsphere/infra/database/postgresql/metadata/data/loader/PostgreSQLSchemaMetaDataLoaderTest.java
+++
b/infra/database/type/postgresql/src/test/java/org/apache/shardingsphere/infra/database/postgresql/metadata/data/loader/PostgreSQLSchemaMetaDataLoaderTest.java
@@ -76,8 +76,9 @@ class PostgreSQLSchemaMetaDataLoaderTest {
}
@Test
- void assertLoadSchemaTableNames() throws SQLException {
-
assertThat(SchemaMetaDataLoader.loadSchemaTableNames(DefaultDatabase.LOGIC_NAME,
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL"), dataSource),
is(createSchemaTableNames()));
+ void assertLoadSchemaTableNamesByExcludedTables() throws SQLException {
+
assertThat(SchemaMetaDataLoader.loadSchemaTableNamesByExcludedTables(DefaultDatabase.LOGIC_NAME,
+ TypedSPILoader.getService(DatabaseType.class, "PostgreSQL"),
dataSource, Collections.emptyList()), is(createSchemaTableNames()));
}
private Map<String, Collection<String>> createSchemaTableNames() {
diff --git
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/datanode/SingleTableDataNodeLoader.java
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/datanode/SingleTableDataNodeLoader.java
index 77982e9b638..5c07eb869ea 100644
---
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/datanode/SingleTableDataNodeLoader.java
+++
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/datanode/SingleTableDataNodeLoader.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.single.datanode;
+import com.cedarsoftware.util.CaseInsensitiveMap;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.shardingsphere.infra.database.DatabaseTypeEngine;
@@ -95,13 +96,10 @@ public final class SingleTableDataNodeLoader {
private static Map<String, Collection<DataNode>> load(final String
databaseName, final DatabaseType storageType, final String dataSourceName,
final DataSource
dataSource, final Collection<String> excludedTables) {
- Map<String, Collection<String>> schemaTableNames =
loadSchemaTableNames(databaseName, storageType, dataSource, dataSourceName);
- Map<String, Collection<DataNode>> result = new LinkedHashMap<>();
+ Map<String, Collection<String>> schemaTableNames =
loadSchemaTableNames(databaseName, storageType, dataSource, dataSourceName,
excludedTables);
+ Map<String, Collection<DataNode>> result = new CaseInsensitiveMap<>();
for (Entry<String, Collection<String>> entry :
schemaTableNames.entrySet()) {
for (String each : entry.getValue()) {
- if (excludedTables.contains(each)) {
- continue;
- }
Collection<DataNode> dataNodes = result.getOrDefault(each, new
LinkedList<>());
DataNode dataNode = new DataNode(dataSourceName, each);
dataNode.setSchemaName(entry.getKey());
@@ -177,12 +175,14 @@ public final class SingleTableDataNodeLoader {
* @param storageType storage type
* @param dataSource data source
* @param dataSourceName data source name
+ * @param excludedTables excluded tables
* @return schema table names
* @throws SingleTablesLoadingException Single tables loading exception
*/
- public static Map<String, Collection<String>> loadSchemaTableNames(final
String databaseName, final DatabaseType storageType, final DataSource
dataSource, final String dataSourceName) {
+ public static Map<String, Collection<String>> loadSchemaTableNames(final
String databaseName, final DatabaseType storageType,
+ final
DataSource dataSource, final String dataSourceName, final Collection<String>
excludedTables) {
try {
- return SchemaMetaDataLoader.loadSchemaTableNames(databaseName,
storageType, dataSource);
+ return
SchemaMetaDataLoader.loadSchemaTableNamesByExcludedTables(databaseName,
storageType, dataSource, excludedTables);
} catch (final SQLException ex) {
throw new SingleTablesLoadingException(databaseName,
dataSourceName, ex);
}
diff --git
a/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableExecutor.java
b/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableExecutor.java
index 8eef49fa8d1..8119e19feb7 100644
---
a/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableExecutor.java
+++
b/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableExecutor.java
@@ -42,6 +42,7 @@ import
org.apache.shardingsphere.single.util.SingleTableLoadUtils;
import javax.sql.DataSource;
import java.util.Collection;
+import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
@@ -131,7 +132,8 @@ public final class LoadSingleTableExecutor implements
DatabaseRuleCreateExecutor
Map<String, Map<String, Collection<String>>> result = new
LinkedHashMap<>(storageUnitNames.size(), 1F);
for (String each : storageUnitNames) {
DataSource dataSource = aggregatedDataSourceMap.get(each);
- Map<String, Collection<String>> schemaTableNames =
SingleTableDataNodeLoader.loadSchemaTableNames(database.getName(),
DatabaseTypeEngine.getStorageType(dataSource), dataSource, each);
+ Map<String, Collection<String>> schemaTableNames =
+
SingleTableDataNodeLoader.loadSchemaTableNames(database.getName(),
DatabaseTypeEngine.getStorageType(dataSource), dataSource, each,
Collections.emptyList());
if (!schemaTableNames.isEmpty()) {
result.put(each, schemaTableNames);
}