This is an automated email from the ASF dual-hosted git repository.

zhangliang 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 f18436543dd refactor(metadata): turn SchemaMetaDataLoader into a 
utility class (#35306)
f18436543dd is described below

commit f18436543dd86e399e2752e862c6b07b1de665a9
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Thu May 1 13:27:02 2025 +0800

    refactor(metadata): turn SchemaMetaDataLoader into a utility class (#35306)
    
    - Remove static methods and make SchemaMetaDataLoader a utility class
    - Update related test cases to use the new utility class
    - Modify OpenGaussMetaDataLoader and PostgreSQLMetaDataLoader to use the 
new utility class- Update SingleTableDataNodeLoader to use the new utility class
---
 .../data/loader/type/SchemaMetaDataLoader.java     | 30 +++++++++++-----------
 .../data/loader/MySQLSchemaMetaDataLoaderTest.java |  7 +++--
 .../data/loader/OpenGaussMetaDataLoader.java       |  4 +--
 .../loader/OpenGaussSchemaMetaDataLoaderTest.java  |  9 ++++---
 .../data/loader/PostgreSQLMetaDataLoader.java      |  4 +--
 .../loader/PostgreSQLSchemaMetaDataLoaderTest.java |  8 +++---
 .../single/datanode/SingleTableDataNodeLoader.java |  2 +-
 7 files changed, 34 insertions(+), 30 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 3eff99f9e7c..45c60069486 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
@@ -19,10 +19,7 @@ package 
org.apache.shardingsphere.infra.database.core.metadata.data.loader.type;
 
 import com.cedarsoftware.util.CaseInsensitiveMap;
 import com.cedarsoftware.util.CaseInsensitiveSet;
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
 import 
org.apache.shardingsphere.infra.database.core.metadata.data.loader.MetaDataLoaderConnection;
-import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.DialectDatabaseMetaData;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.schema.DialectSchemaOption;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.system.SystemDatabase;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
@@ -40,7 +37,6 @@ import java.util.Map;
 /**
  * Schema meta data loader.
  */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class SchemaMetaDataLoader {
     
     private static final String TABLE_TYPE = "TABLE";
@@ -57,24 +53,30 @@ public final class SchemaMetaDataLoader {
     
     private static final String TABLE_SCHEME = "TABLE_SCHEM";
     
+    private final DatabaseType databaseType;
+    
+    private final DialectSchemaOption schemaOption;
+    
+    public SchemaMetaDataLoader(final DatabaseType databaseType) {
+        this.databaseType = databaseType;
+        schemaOption = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().getSchemaOption();
+    }
+    
     /**
      * Load schema table names.
      *
      * @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,
-                                                                       final 
Collection<String> excludedTables) throws SQLException {
+    public Map<String, Collection<String>> loadSchemaTableNames(final String 
databaseName, 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();
+            Collection<String> schemaNames = loadSchemaNames(connection);
             Map<String, Collection<String>> result = new 
CaseInsensitiveMap<>(schemaNames.size(), 1F);
             for (String each : schemaNames) {
-                String schemaName = 
dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent() ? each 
: databaseName;
+                String schemaName = 
schemaOption.getDefaultSchema().isPresent() ? each : databaseName;
                 result.put(schemaName, loadTableNames(connection, each, 
excludedTables));
             }
             return result;
@@ -85,12 +87,10 @@ public final class SchemaMetaDataLoader {
      * Load schema names.
      *
      * @param connection connection
-     * @param databaseType database type
      * @return schema names collection
      * @throws SQLException SQL exception
      */
-    public static Collection<String> loadSchemaNames(final Connection 
connection, final DatabaseType databaseType) throws SQLException {
-        DialectSchemaOption schemaOption = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().getSchemaOption();
+    public Collection<String> loadSchemaNames(final Connection connection) 
throws SQLException {
         if (!schemaOption.getDefaultSchema().isPresent()) {
             return Collections.singletonList(connection.getSchema());
         }
@@ -107,7 +107,7 @@ public final class SchemaMetaDataLoader {
         return result.isEmpty() ? 
Collections.singletonList(connection.getSchema()) : result;
     }
     
-    private static Collection<String> loadTableNames(final Connection 
connection, final String schemaName, final Collection<String> excludedTables) 
throws SQLException {
+    private Collection<String> loadTableNames(final Connection connection, 
final String schemaName, final Collection<String> excludedTables) throws 
SQLException {
         Collection<String> result = new CaseInsensitiveSet<>();
         try (
                 ResultSet resultSet = 
connection.getMetaData().getTables(connection.getCatalog(), schemaName, null,
@@ -122,7 +122,7 @@ public final class SchemaMetaDataLoader {
         return result;
     }
     
-    private static boolean isSystemTable(final String table) {
+    private boolean isSystemTable(final String table) {
         return table.contains("$") || table.contains("/") || 
table.contains("##");
     }
 }
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 78b7735b9d1..46b635a7173 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
@@ -50,6 +50,9 @@ class MySQLSchemaMetaDataLoaderTest {
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private DataSource dataSource;
     
+    private final DatabaseType databaseType = 
TypedSPILoader.getService(DatabaseType.class, "MySQL");
+    
+    @SuppressWarnings("JDBCResourceOpenedButNotSafelyClosed")
     @BeforeEach
     void setUp() throws SQLException {
         ResultSet tableResultSet = mockTableResultSet();
@@ -78,11 +81,11 @@ class MySQLSchemaMetaDataLoaderTest {
     @Test
     void assertLoadSchemaTableNames() throws SQLException {
         Map<String, Collection<String>> schemaTableNames = 
Collections.singletonMap("foo_db", new 
CaseInsensitiveSet<>(Arrays.asList("tbl", "partitioned_tbl")));
-        assertThat(SchemaMetaDataLoader.loadSchemaTableNames("foo_db", 
TypedSPILoader.getService(DatabaseType.class, "MySQL"), dataSource, 
Collections.emptyList()), is(schemaTableNames));
+        assertThat(new 
SchemaMetaDataLoader(databaseType).loadSchemaTableNames("foo_db", dataSource, 
Collections.emptyList()), is(schemaTableNames));
     }
     
     @Test
     void assertLoadSchemaNames() throws SQLException {
-        
assertThat(SchemaMetaDataLoader.loadSchemaNames(dataSource.getConnection(), 
TypedSPILoader.getService(DatabaseType.class, "MySQL")), 
is(Collections.singletonList("public")));
+        assertThat(new 
SchemaMetaDataLoader(databaseType).loadSchemaNames(dataSource.getConnection()), 
is(Collections.singletonList("public")));
     }
 }
diff --git 
a/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/data/loader/OpenGaussMetaDataLoader.java
 
b/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/data/loader/OpenGaussMetaDataLoader.java
index 855e01b92ba..7981c91c91d 100644
--- 
a/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/data/loader/OpenGaussMetaDataLoader.java
+++ 
b/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/data/loader/OpenGaussMetaDataLoader.java
@@ -27,8 +27,6 @@ import 
org.apache.shardingsphere.infra.database.core.metadata.data.model.IndexMe
 import 
org.apache.shardingsphere.infra.database.core.metadata.data.model.SchemaMetaData;
 import 
org.apache.shardingsphere.infra.database.core.metadata.data.model.TableMetaData;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.datatype.DataTypeRegistry;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 
 import java.sql.Connection;
 import java.sql.PreparedStatement;
@@ -70,7 +68,7 @@ public final class OpenGaussMetaDataLoader implements 
DialectMetaDataLoader {
     @Override
     public Collection<SchemaMetaData> load(final MetaDataLoaderMaterial 
material) throws SQLException {
         try (Connection connection = material.getDataSource().getConnection()) 
{
-            Collection<String> schemaNames = 
SchemaMetaDataLoader.loadSchemaNames(connection, 
TypedSPILoader.getService(DatabaseType.class, "openGauss"));
+            Collection<String> schemaNames = new 
SchemaMetaDataLoader(getType()).loadSchemaNames(connection);
             Map<String, Multimap<String, IndexMetaData>> 
schemaIndexMetaDataMap = loadIndexMetaDataMap(connection, schemaNames);
             Map<String, Multimap<String, ColumnMetaData>> 
schemaColumnMetaDataMap = loadColumnMetaDataMap(connection, 
material.getActualTableNames(), schemaNames);
             Collection<SchemaMetaData> result = new LinkedList<>();
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 b41212ec4fe..d07234275b6 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
@@ -51,6 +51,9 @@ class OpenGaussSchemaMetaDataLoaderTest {
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private DataSource dataSource;
     
+    private final DatabaseType databaseType = 
TypedSPILoader.getService(DatabaseType.class, "openGauss");
+    
+    @SuppressWarnings("JDBCResourceOpenedButNotSafelyClosed")
     @BeforeEach
     void setUp() throws SQLException {
         ResultSet tableResultSet = mockTableResultSet();
@@ -78,11 +81,11 @@ class OpenGaussSchemaMetaDataLoaderTest {
     
     @Test
     void assertLoadSchemaTableNames() throws SQLException {
-        assertThat(SchemaMetaDataLoader.loadSchemaTableNames("foo_db", 
TypedSPILoader.getService(DatabaseType.class, "openGauss"), dataSource, 
Collections.emptyList()), is(createSchemaTableNames()));
+        assertThat(new 
SchemaMetaDataLoader(databaseType).loadSchemaTableNames("foo_db", dataSource, 
Collections.emptyList()), is(createSchemaTableNames()));
     }
     
     private Map<String, Collection<String>> createSchemaTableNames() {
-        Map<String, Collection<String>> result = new LinkedHashMap<>();
+        Map<String, Collection<String>> result = new LinkedHashMap<>(3, 1F);
         result.put("public", new CaseInsensitiveSet<>(Arrays.asList("tbl", 
"partitioned_tbl")));
         result.put("schema_1", Collections.emptySet());
         result.put("schema_2", Collections.emptySet());
@@ -91,6 +94,6 @@ class OpenGaussSchemaMetaDataLoaderTest {
     
     @Test
     void assertLoadSchemaNames() throws SQLException {
-        
assertThat(SchemaMetaDataLoader.loadSchemaNames(dataSource.getConnection(), 
TypedSPILoader.getService(DatabaseType.class, "openGauss")), 
is(Arrays.asList("public", "schema_1", "schema_2")));
+        assertThat(new 
SchemaMetaDataLoader(databaseType).loadSchemaNames(dataSource.getConnection()), 
is(Arrays.asList("public", "schema_1", "schema_2")));
     }
 }
diff --git 
a/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/data/loader/PostgreSQLMetaDataLoader.java
 
b/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/data/loader/PostgreSQLMetaDataLoader.java
index ec151ec8c99..fe0607dd00d 100644
--- 
a/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/data/loader/PostgreSQLMetaDataLoader.java
+++ 
b/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/data/loader/PostgreSQLMetaDataLoader.java
@@ -29,8 +29,6 @@ import 
org.apache.shardingsphere.infra.database.core.metadata.data.model.SchemaM
 import 
org.apache.shardingsphere.infra.database.core.metadata.data.model.TableMetaData;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.datatype.DataTypeRegistry;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.TableType;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 
 import java.sql.Connection;
 import java.sql.PreparedStatement;
@@ -84,7 +82,7 @@ public final class PostgreSQLMetaDataLoader implements 
DialectMetaDataLoader {
     @Override
     public Collection<SchemaMetaData> load(final MetaDataLoaderMaterial 
material) throws SQLException {
         try (Connection connection = material.getDataSource().getConnection()) 
{
-            Collection<String> schemaNames = 
SchemaMetaDataLoader.loadSchemaNames(connection, 
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL"));
+            Collection<String> schemaNames = new 
SchemaMetaDataLoader(getType()).loadSchemaNames(connection);
             Map<String, Multimap<String, IndexMetaData>> 
schemaIndexMetaDataMap = loadIndexMetaDataMap(connection, schemaNames);
             Map<String, Multimap<String, ColumnMetaData>> 
schemaColumnMetaDataMap = loadColumnMetaDataMap(connection, 
material.getActualTableNames(), schemaNames);
             Map<String, Multimap<String, ConstraintMetaData>> 
schemaConstraintMetaDataMap = loadConstraintMetaDataMap(connection, 
schemaNames);
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 471f61647ac..98f49d46226 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
@@ -51,6 +51,9 @@ class PostgreSQLSchemaMetaDataLoaderTest {
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private DataSource dataSource;
     
+    private final DatabaseType databaseType = 
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL");
+    
+    @SuppressWarnings("JDBCResourceOpenedButNotSafelyClosed")
     @BeforeEach
     void setUp() throws SQLException {
         ResultSet tableResultSet = mockTableResultSet();
@@ -78,8 +81,7 @@ class PostgreSQLSchemaMetaDataLoaderTest {
     
     @Test
     void assertLoadSchemaTableNames() throws SQLException {
-        assertThat(SchemaMetaDataLoader.loadSchemaTableNames("foo_db",
-                TypedSPILoader.getService(DatabaseType.class, "PostgreSQL"), 
dataSource, Collections.emptyList()), is(createSchemaTableNames()));
+        assertThat(new 
SchemaMetaDataLoader(databaseType).loadSchemaTableNames("foo_db", dataSource, 
Collections.emptyList()), is(createSchemaTableNames()));
     }
     
     private Map<String, Collection<String>> createSchemaTableNames() {
@@ -92,6 +94,6 @@ class PostgreSQLSchemaMetaDataLoaderTest {
     
     @Test
     void assertLoadSchemaNames() throws SQLException {
-        
assertThat(SchemaMetaDataLoader.loadSchemaNames(dataSource.getConnection(), 
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL")), 
is(Arrays.asList("public", "schema_1", "schema_2")));
+        assertThat(new 
SchemaMetaDataLoader(databaseType).loadSchemaNames(dataSource.getConnection()), 
is(Arrays.asList("public", "schema_1", "schema_2")));
     }
 }
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 bc6c639ab0e..f0cc2e1d864 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
@@ -182,7 +182,7 @@ public final class SingleTableDataNodeLoader {
     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, excludedTables);
+            return new 
SchemaMetaDataLoader(storageType).loadSchemaTableNames(databaseName, 
dataSource, excludedTables);
         } catch (final SQLException ex) {
             throw new SingleTablesLoadingException(databaseName, 
dataSourceName, ex);
         }

Reply via email to