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

Reply via email to