You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2026/03/08 13:13:40 UTC
(shardingsphere) branch master updated: Add more test cases on PostgreSQLMetaDataLoaderTest (#38375)
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 fced84682f5 Add more test cases on PostgreSQLMetaDataLoaderTest (#38375)
fced84682f5 is described below
commit fced84682f55bedefa00e4b76e9d9392379f60f2
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sun Mar 8 21:13:34 2026 +0800
Add more test cases on PostgreSQLMetaDataLoaderTest (#38375)
---
.../data/loader/PostgreSQLMetaDataLoaderTest.java | 111 ++++++++++-----------
1 file changed, 50 insertions(+), 61 deletions(-)
diff --git a/database/connector/dialect/postgresql/src/test/java/org/apache/shardingsphere/database/connector/postgresql/metadata/data/loader/PostgreSQLMetaDataLoaderTest.java b/database/connector/dialect/postgresql/src/test/java/org/apache/shardingsphere/database/connector/postgresql/metadata/data/loader/PostgreSQLMetaDataLoaderTest.java
index 71343ab99a9..1fd76be6ae2 100644
--- a/database/connector/dialect/postgresql/src/test/java/org/apache/shardingsphere/database/connector/postgresql/metadata/data/loader/PostgreSQLMetaDataLoaderTest.java
+++ b/database/connector/dialect/postgresql/src/test/java/org/apache/shardingsphere/database/connector/postgresql/metadata/data/loader/PostgreSQLMetaDataLoaderTest.java
@@ -28,7 +28,9 @@ import org.apache.shardingsphere.database.connector.core.metadata.database.datat
import org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPILoader;
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
import javax.sql.DataSource;
import java.sql.ResultSet;
@@ -37,12 +39,10 @@ import java.sql.Types;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
-import java.util.Optional;
+import java.util.stream.Stream;
-import static org.hamcrest.Matchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.ArgumentMatchers.startsWith;
+import static org.hamcrest.Matchers.is;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -74,47 +74,26 @@ class PostgreSQLMetaDataLoaderTest {
private static final String LOAD_ALL_ROLE_TABLE_GRANTS_SQL = "SELECT table_name FROM information_schema.role_table_grants";
- private static final String VIEW_META_DATA_SQL = "SELECT table_schema, table_name FROM information_schema.views WHERE table_schema IN ('public') and table_name IN ('tbl')";
+ private static final String LOAD_FILTERED_ROLE_TABLE_GRANTS_SQL = LOAD_ALL_ROLE_TABLE_GRANTS_SQL + " WHERE table_name IN ('tbl')";
- private final DatabaseType databaseType = TypedSPILoader.getService(DatabaseType.class, "PostgreSQL");
+ private static final String VIEW_META_DATA_SQL_WITHOUT_TABLES = "SELECT table_schema, table_name FROM information_schema.views WHERE table_schema IN ('public') and table_name IN ()";
- @SuppressWarnings("JDBCResourceOpenedButNotSafelyClosed")
- @Test
- void assertLoadWithoutTables() throws SQLException {
- DataSource dataSource = mockDataSource();
- ResultSet schemaResultSet = mockSchemaMetaDataResultSet();
- when(dataSource.getConnection().getMetaData().getSchemas()).thenReturn(schemaResultSet);
- ResultSet tableResultSet = mockTableMetaDataResultSet();
- when(dataSource.getConnection().prepareStatement(TABLE_META_DATA_SQL_WITHOUT_TABLES).executeQuery()).thenReturn(tableResultSet);
- ResultSet primaryKeyResultSet = mockPrimaryKeyMetaDataResultSet();
- when(dataSource.getConnection().prepareStatement(PRIMARY_KEY_META_DATA_SQL).executeQuery()).thenReturn(primaryKeyResultSet);
- ResultSet indexResultSet = mockIndexMetaDataResultSet();
- when(dataSource.getConnection().prepareStatement(BASIC_INDEX_META_DATA_SQL).executeQuery()).thenReturn(indexResultSet);
- ResultSet advanceIndexResultSet = mockAdvanceIndexMetaDataResultSet();
- when(dataSource.getConnection().prepareStatement(ADVANCE_INDEX_META_DATA_SQL).executeQuery()).thenReturn(advanceIndexResultSet);
- ResultSet constraintResultSet = mockConstraintMetaDataResultSet();
- when(dataSource.getConnection().prepareStatement(BASIC_CONSTRAINT_META_DATA_SQL).executeQuery()).thenReturn(constraintResultSet);
- ResultSet roleTableGrantsResultSet = mockRoleTableGrantsResultSet();
- when(dataSource.getConnection().prepareStatement(startsWith(LOAD_ALL_ROLE_TABLE_GRANTS_SQL)).executeQuery()).thenReturn(roleTableGrantsResultSet);
- DataTypeRegistry.load(dataSource, "PostgreSQL");
- assertTableMetaDataMap(getDialectTableMetaDataLoader().load(new MetaDataLoaderMaterial(Collections.emptyList(), "foo_ds", dataSource, databaseType, "sharding_db")));
- }
+ private static final String VIEW_META_DATA_SQL_WITH_TABLES = "SELECT table_schema, table_name FROM information_schema.views WHERE table_schema IN ('public') and table_name IN ('tbl')";
- private ResultSet mockSchemaMetaDataResultSet() throws SQLException {
- ResultSet result = mock(ResultSet.class);
- when(result.next()).thenReturn(true, false);
- when(result.getString("TABLE_SCHEM")).thenReturn("public");
- return result;
- }
+ private final DatabaseType databaseType = TypedSPILoader.getService(DatabaseType.class, "PostgreSQL");
- @SuppressWarnings("JDBCResourceOpenedButNotSafelyClosed")
- @Test
- void assertLoadWithTables() throws SQLException {
+ private final DialectMetaDataLoader metaDataLoader = DatabaseTypedSPILoader.getService(DialectMetaDataLoader.class, databaseType);
+
+ @SuppressWarnings({"JDBCResourceOpenedButNotSafelyClosed", "resource"})
+ @ParameterizedTest(name = "{0}")
+ @MethodSource("loadArguments")
+ void assertLoad(final String name, final Collection<String> actualTableNames, final String tableMetaDataSQL, final String roleTableGrantsSQL,
+ final String viewMetaDataSQL, final boolean hasView, final String secondColumnDefault) throws SQLException {
DataSource dataSource = mockDataSource();
ResultSet schemaResultSet = mockSchemaMetaDataResultSet();
when(dataSource.getConnection().getMetaData().getSchemas()).thenReturn(schemaResultSet);
- ResultSet tableResultSet = mockTableMetaDataResultSet();
- when(dataSource.getConnection().prepareStatement(TABLE_META_DATA_SQL_WITH_TABLES).executeQuery()).thenReturn(tableResultSet);
+ ResultSet tableResultSet = mockTableMetaDataResultSet(secondColumnDefault);
+ when(dataSource.getConnection().prepareStatement(tableMetaDataSQL).executeQuery()).thenReturn(tableResultSet);
ResultSet primaryKeyResultSet = mockPrimaryKeyMetaDataResultSet();
when(dataSource.getConnection().prepareStatement(PRIMARY_KEY_META_DATA_SQL).executeQuery()).thenReturn(primaryKeyResultSet);
ResultSet indexResultSet = mockIndexMetaDataResultSet();
@@ -124,18 +103,11 @@ class PostgreSQLMetaDataLoaderTest {
ResultSet constraintResultSet = mockConstraintMetaDataResultSet();
when(dataSource.getConnection().prepareStatement(BASIC_CONSTRAINT_META_DATA_SQL).executeQuery()).thenReturn(constraintResultSet);
ResultSet roleTableGrantsResultSet = mockRoleTableGrantsResultSet();
- when(dataSource.getConnection().prepareStatement(startsWith(LOAD_ALL_ROLE_TABLE_GRANTS_SQL)).executeQuery()).thenReturn(roleTableGrantsResultSet);
- ResultSet viewResultSet = mockViewMetaDataResultSet();
- when(dataSource.getConnection().prepareStatement(VIEW_META_DATA_SQL).executeQuery()).thenReturn(viewResultSet);
+ when(dataSource.getConnection().prepareStatement(roleTableGrantsSQL).executeQuery()).thenReturn(roleTableGrantsResultSet);
+ ResultSet viewResultSet = mockViewMetaDataResultSet(hasView);
+ when(dataSource.getConnection().prepareStatement(viewMetaDataSQL).executeQuery()).thenReturn(viewResultSet);
DataTypeRegistry.load(dataSource, "PostgreSQL");
- assertTableMetaDataMap(getDialectTableMetaDataLoader().load(new MetaDataLoaderMaterial(Collections.singletonList("tbl"), "foo_ds", dataSource, databaseType, "sharding_db")));
- }
-
- private ResultSet mockRoleTableGrantsResultSet() throws SQLException {
- ResultSet result = mock(ResultSet.class);
- when(result.next()).thenReturn(true, false);
- when(result.getString("table_name")).thenReturn("tbl");
- return result;
+ assertTableMetaDataMap(metaDataLoader.load(new MetaDataLoaderMaterial(actualTableNames, "foo_ds", dataSource, databaseType, "sharding_db")));
}
@SuppressWarnings("JDBCResourceOpenedButNotSafelyClosed")
@@ -146,6 +118,13 @@ class PostgreSQLMetaDataLoaderTest {
return result;
}
+ private ResultSet mockSchemaMetaDataResultSet() throws SQLException {
+ ResultSet result = mock(ResultSet.class);
+ when(result.next()).thenReturn(true, false);
+ when(result.getString("TABLE_SCHEM")).thenReturn("public");
+ return result;
+ }
+
private ResultSet mockTypeInfoResultSet() throws SQLException {
ResultSet result = mock(ResultSet.class);
when(result.next()).thenReturn(true, true, false);
@@ -154,7 +133,7 @@ class PostgreSQLMetaDataLoaderTest {
return result;
}
- private ResultSet mockTableMetaDataResultSet() throws SQLException {
+ private ResultSet mockTableMetaDataResultSet(final String secondColumnDefault) throws SQLException {
ResultSet result = mock(ResultSet.class);
when(result.next()).thenReturn(true, true, true, false);
when(result.getString("table_name")).thenReturn("ignored_tbl", "tbl", "tbl");
@@ -162,7 +141,7 @@ class PostgreSQLMetaDataLoaderTest {
when(result.getInt("ordinal_position")).thenReturn(1, 2, 3);
when(result.getString("data_type")).thenReturn("integer", "character varying");
when(result.getString("udt_name")).thenReturn("int4", "varchar");
- when(result.getString("column_default")).thenReturn("nextval('id_seq'::regclass)", null);
+ when(result.getString("column_default")).thenReturn("nextval('id_seq'::regclass)", secondColumnDefault);
when(result.getString("table_schema")).thenReturn("public", "public");
when(result.getString("is_nullable")).thenReturn("NO", "YES");
return result;
@@ -197,28 +176,29 @@ class PostgreSQLMetaDataLoaderTest {
return result;
}
- private ResultSet mockViewMetaDataResultSet() throws SQLException {
+ private ResultSet mockConstraintMetaDataResultSet() throws SQLException {
ResultSet result = mock(ResultSet.class);
when(result.next()).thenReturn(true, false);
when(result.getString("table_schema")).thenReturn("public");
when(result.getString("table_name")).thenReturn("tbl");
+ when(result.getString("constraint_name")).thenReturn("tbl_con");
+ when(result.getString("refer_table_name")).thenReturn("refer_tbl");
return result;
}
- private ResultSet mockConstraintMetaDataResultSet() throws SQLException {
+ private ResultSet mockRoleTableGrantsResultSet() throws SQLException {
ResultSet result = mock(ResultSet.class);
when(result.next()).thenReturn(true, false);
- when(result.getString("table_schema")).thenReturn("public");
when(result.getString("table_name")).thenReturn("tbl");
- when(result.getString("constraint_name")).thenReturn("tbl_con");
- when(result.getString("refer_table_name")).thenReturn("refer_tbl");
return result;
}
- private DialectMetaDataLoader getDialectTableMetaDataLoader() {
- Optional<DialectMetaDataLoader> result = DatabaseTypedSPILoader.findService(DialectMetaDataLoader.class, TypedSPILoader.getService(DatabaseType.class, "PostgreSQL"));
- assertTrue(result.isPresent());
- return result.get();
+ private ResultSet mockViewMetaDataResultSet(final boolean hasView) throws SQLException {
+ ResultSet result = mock(ResultSet.class);
+ when(result.next()).thenReturn(hasView, false);
+ when(result.getString("table_schema")).thenReturn("public");
+ when(result.getString("table_name")).thenReturn("tbl");
+ return result;
}
private void assertTableMetaDataMap(final Collection<SchemaMetaData> schemaMetaDataList) {
@@ -259,4 +239,13 @@ class PostgreSQLMetaDataLoaderTest {
assertThat(actual.getName(), is(expected.getName()));
assertThat(actual.getReferencedTableName(), is(expected.getReferencedTableName()));
}
+
+ private static Stream<Arguments> loadArguments() {
+ return Stream.of(
+ Arguments.of("without tables", Collections.emptyList(), TABLE_META_DATA_SQL_WITHOUT_TABLES, LOAD_ALL_ROLE_TABLE_GRANTS_SQL, VIEW_META_DATA_SQL_WITHOUT_TABLES, false, null),
+ Arguments.of("with view table", Collections.singletonList("tbl"), TABLE_META_DATA_SQL_WITH_TABLES, LOAD_FILTERED_ROLE_TABLE_GRANTS_SQL,
+ VIEW_META_DATA_SQL_WITH_TABLES, true, null),
+ Arguments.of("with non generated default", Collections.singletonList("tbl"), TABLE_META_DATA_SQL_WITH_TABLES, LOAD_FILTERED_ROLE_TABLE_GRANTS_SQL,
+ VIEW_META_DATA_SQL_WITH_TABLES, false, "'anonymous'"));
+ }
}