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 62fce41549a Add more test cases on SQLServerMetaDataLoaderTest (#38148)
62fce41549a is described below

commit 62fce41549a3acf23b1a76fe1c77eb36d7fc9937
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Feb 22 23:44:48 2026 +0800

    Add more test cases on SQLServerMetaDataLoaderTest (#38148)
---
 .../data/loader/SQLServerMetaDataLoaderTest.java   | 105 ++++++++++++---------
 1 file changed, 61 insertions(+), 44 deletions(-)

diff --git 
a/database/connector/dialect/sqlserver/src/test/java/org/apache/shardingsphere/database/connector/sql92/sqlserver/metadata/data/loader/SQLServerMetaDataLoaderTest.java
 
b/database/connector/dialect/sqlserver/src/test/java/org/apache/shardingsphere/database/connector/sql92/sqlserver/metadata/data/loader/SQLServerMetaDataLoaderTest.java
index a9eb7e91c9d..76055e168b3 100644
--- 
a/database/connector/dialect/sqlserver/src/test/java/org/apache/shardingsphere/database/connector/sql92/sqlserver/metadata/data/loader/SQLServerMetaDataLoaderTest.java
+++ 
b/database/connector/dialect/sqlserver/src/test/java/org/apache/shardingsphere/database/connector/sql92/sqlserver/metadata/data/loader/SQLServerMetaDataLoaderTest.java
@@ -28,18 +28,23 @@ import 
org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPILoa
 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;
 import java.sql.SQLException;
 import java.sql.Types;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Iterator;
-import java.util.Optional;
+import java.util.List;
+import java.util.stream.Stream;
 
-import static org.hamcrest.Matchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
@@ -69,42 +74,37 @@ class SQLServerMetaDataLoaderTest {
     
     private final DatabaseType databaseType = 
TypedSPILoader.getService(DatabaseType.class, "SQLServer");
     
+    private final DialectMetaDataLoader dialectMetaDataLoader = 
DatabaseTypedSPILoader.getService(DialectMetaDataLoader.class, databaseType);
+    
+    @SuppressWarnings({"JDBCResourceOpenedButNotSafelyClosed", "resource"})
     @Test
-    void assertLoadWithTablesWithHighVersion() throws SQLException {
+    void assertLoadWithEmptyColumnMetaData() throws SQLException {
         DataSource dataSource = mockDataSource();
-        ResultSet resultSet = mockTableMetaDataResultSet();
-        
when(dataSource.getConnection().prepareStatement(LOAD_COLUMN_META_DATA_WITH_TABLES_HIGH_VERSION).executeQuery()).thenReturn(resultSet);
-        ResultSet indexResultSet = mockIndexMetaDataResultSet();
-        when(dataSource.getConnection().prepareStatement(LOAD_INDEX_META_DATA)
-                .executeQuery()).thenReturn(indexResultSet);
-        
when(dataSource.getConnection().getMetaData().getDatabaseMajorVersion()).thenReturn(15);
+        ResultSet tableMetaDataResultSet = mock(ResultSet.class);
+        when(tableMetaDataResultSet.next()).thenReturn(false);
+        
when(dataSource.getConnection().prepareStatement(LOAD_COLUMN_META_DATA_WITH_TABLES_LOW_VERSION).executeQuery()).thenReturn(tableMetaDataResultSet);
+        
when(dataSource.getConnection().getMetaData().getDatabaseMajorVersion()).thenReturn(14);
         DataTypeRegistry.load(dataSource, "SQLServer");
-        Collection<SchemaMetaData> actual = 
getDialectTableMetaDataLoader().load(
-                new MetaDataLoaderMaterial(Collections.singletonList("tbl"), 
"foo_ds", dataSource, databaseType, "sharding_db"));
-        assertTableMetaDataMap(actual);
-        TableMetaData actualTableMetaData = 
actual.iterator().next().getTables().iterator().next();
-        Iterator<ColumnMetaData> columnsIterator = 
actualTableMetaData.getColumns().iterator();
-        assertColumnMetaData(columnsIterator.next(), new ColumnMetaData("id", 
Types.INTEGER, false, true, true, true, false, false));
-        assertColumnMetaData(columnsIterator.next(), new 
ColumnMetaData("name", Types.VARCHAR, false, false, false, false, false, true));
+        Collection<SchemaMetaData> actual = dialectMetaDataLoader.load(new 
MetaDataLoaderMaterial(Collections.singletonList("tbl"), "foo_ds", dataSource, 
databaseType, "sharding_db"));
+        assertThat(actual.size(), is(1));
+        assertTrue(actual.iterator().next().getTables().isEmpty());
     }
     
-    @Test
-    void assertLoadWithTablesWithLowVersion() throws SQLException {
+    @SuppressWarnings({"JDBCResourceOpenedButNotSafelyClosed", "resource"})
+    @ParameterizedTest(name = "{0}")
+    @MethodSource("loadArguments")
+    void assertLoad(final String name, final String tableMetaDataSQL, final 
int majorVersion, final boolean includeCompositeIndex,
+                    final boolean expectedSecondColumnVisible, final 
Collection<String> expectedIndexColumns) throws SQLException {
         DataSource dataSource = mockDataSource();
-        ResultSet resultSet = mockTableMetaDataResultSet();
-        
when(dataSource.getConnection().prepareStatement(LOAD_COLUMN_META_DATA_WITH_TABLES_LOW_VERSION).executeQuery()).thenReturn(resultSet);
-        ResultSet indexResultSet = mockIndexMetaDataResultSet();
-        when(dataSource.getConnection().prepareStatement(LOAD_INDEX_META_DATA)
-                .executeQuery()).thenReturn(indexResultSet);
-        
when(dataSource.getConnection().getMetaData().getDatabaseMajorVersion()).thenReturn(14);
+        ResultSet tableMetaDataResultSet = mockTableMetaDataResultSet();
+        
when(dataSource.getConnection().prepareStatement(tableMetaDataSQL).executeQuery()).thenReturn(tableMetaDataResultSet);
+        ResultSet indexMetaDataResultSet = includeCompositeIndex ? 
mockCompositeIndexMetaDataResultSet() : mockSimpleIndexMetaDataResultSet();
+        
when(dataSource.getConnection().prepareStatement(LOAD_INDEX_META_DATA).executeQuery()).thenReturn(indexMetaDataResultSet);
+        
when(dataSource.getConnection().getMetaData().getDatabaseMajorVersion()).thenReturn(majorVersion);
         DataTypeRegistry.load(dataSource, "SQLServer");
-        Collection<SchemaMetaData> actual = 
getDialectTableMetaDataLoader().load(
+        Collection<SchemaMetaData> actual = dialectMetaDataLoader.load(
                 new MetaDataLoaderMaterial(Collections.singletonList("tbl"), 
"foo_ds", dataSource, databaseType, "sharding_db"));
-        assertTableMetaDataMap(actual);
-        TableMetaData actualTableMetaData = 
actual.iterator().next().getTables().iterator().next();
-        Iterator<ColumnMetaData> columnsIterator = 
actualTableMetaData.getColumns().iterator();
-        assertColumnMetaData(columnsIterator.next(), new ColumnMetaData("id", 
Types.INTEGER, false, true, true, true, false, false));
-        assertColumnMetaData(columnsIterator.next(), new 
ColumnMetaData("name", Types.VARCHAR, false, false, false, true, false, true));
+        assertTableMetaData(actual, expectedSecondColumnVisible, 
expectedIndexColumns);
     }
     
     private DataSource mockDataSource() throws SQLException {
@@ -128,15 +128,15 @@ class SQLServerMetaDataLoaderTest {
         when(result.getString("TABLE_NAME")).thenReturn("tbl");
         when(result.getString("COLUMN_NAME")).thenReturn("id", "name");
         when(result.getString("DATA_TYPE")).thenReturn("int", "varchar");
-        when(result.getString("COLUMN_KEY")).thenReturn("1", "");
+        when(result.getString("IS_PRIMARY_KEY")).thenReturn("1", "");
         when(result.getString("IS_IDENTITY")).thenReturn("1", "");
         when(result.getString("IS_HIDDEN")).thenReturn("0", "1");
-        
when(result.getString("COLLATION_NAME")).thenReturn("SQL_Latin1_General_CP1_CS_AS",
 "utf8");
+        
when(result.getString("COLLATION_NAME")).thenReturn("SQL_Latin1_General_CP1_CS_AS",
 (String) null);
         when(result.getString("IS_NULLABLE")).thenReturn("0", "1");
         return result;
     }
     
-    private ResultSet mockIndexMetaDataResultSet() throws SQLException {
+    private ResultSet mockSimpleIndexMetaDataResultSet() throws SQLException {
         ResultSet result = mock(ResultSet.class);
         when(result.next()).thenReturn(true, false);
         when(result.getString("INDEX_NAME")).thenReturn("id");
@@ -146,21 +146,31 @@ class SQLServerMetaDataLoaderTest {
         return result;
     }
     
-    private DialectMetaDataLoader getDialectTableMetaDataLoader() {
-        Optional<DialectMetaDataLoader> result = 
DatabaseTypedSPILoader.findService(DialectMetaDataLoader.class, 
TypedSPILoader.getService(DatabaseType.class, "SQLServer"));
-        assertTrue(result.isPresent());
-        return result.get();
+    private ResultSet mockCompositeIndexMetaDataResultSet() throws 
SQLException {
+        ResultSet result = mock(ResultSet.class);
+        when(result.next()).thenReturn(true, true, false);
+        when(result.getString("INDEX_NAME")).thenReturn("id", "id");
+        when(result.getString("TABLE_NAME")).thenReturn("tbl", "tbl");
+        when(result.getString("COLUMN_NAME")).thenReturn("id", "name");
+        when(result.getString("IS_UNIQUE")).thenReturn("1", "1");
+        return result;
     }
     
-    private void assertTableMetaDataMap(final Collection<SchemaMetaData> 
schemaMetaDataList) {
+    private void assertTableMetaData(final Collection<SchemaMetaData> 
schemaMetaDataList, final boolean expectedSecondColumnVisible, final 
Collection<String> expectedIndexColumns) {
         assertThat(schemaMetaDataList.size(), is(1));
-        TableMetaData actualTableMetaData = 
schemaMetaDataList.iterator().next().getTables().iterator().next();
+        Collection<TableMetaData> tables = 
schemaMetaDataList.iterator().next().getTables();
+        assertThat(tables.size(), is(1));
+        TableMetaData actualTableMetaData = tables.iterator().next();
+        assertThat(actualTableMetaData.getName(), is("tbl"));
         assertThat(actualTableMetaData.getColumns().size(), is(2));
         assertThat(actualTableMetaData.getIndexes().size(), is(1));
-        Iterator<IndexMetaData> indexesIterator = 
actualTableMetaData.getIndexes().iterator();
-        IndexMetaData expected = new IndexMetaData("id", 
Collections.singletonList("id"));
-        expected.setUnique(true);
-        assertIndexMetaData(indexesIterator.next(), expected);
+        List<ColumnMetaData> columnsIterator = new 
ArrayList<>(actualTableMetaData.getColumns());
+        assertColumnMetaData(columnsIterator.get(0), new ColumnMetaData("id", 
Types.INTEGER, true, true, true, true, false, false));
+        assertColumnMetaData(columnsIterator.get(1), new 
ColumnMetaData("name", Types.VARCHAR, false, false, false, 
expectedSecondColumnVisible, false, true));
+        List<IndexMetaData> indexes = new 
ArrayList<>(actualTableMetaData.getIndexes());
+        IndexMetaData expectedIndexMetaData = new IndexMetaData("id", 
expectedIndexColumns);
+        expectedIndexMetaData.setUnique(true);
+        assertIndexMetaData(indexes.get(0), expectedIndexMetaData);
     }
     
     private void assertColumnMetaData(final ColumnMetaData actual, final 
ColumnMetaData expected) {
@@ -179,4 +189,11 @@ class SQLServerMetaDataLoaderTest {
         assertThat(actual.getColumns(), is(expected.getColumns()));
         assertThat(actual.isUnique(), is(expected.isUnique()));
     }
+    
+    private static Stream<Arguments> loadArguments() {
+        return Stream.of(
+                Arguments.of("load with hidden column on high version", 
LOAD_COLUMN_META_DATA_WITH_TABLES_HIGH_VERSION, 15, false, false, 
Collections.singletonList("id")),
+                Arguments.of("load with hidden column ignored on low version", 
LOAD_COLUMN_META_DATA_WITH_TABLES_LOW_VERSION, 14, false, true, 
Collections.singletonList("id")),
+                Arguments.of("load with composite index", 
LOAD_COLUMN_META_DATA_WITH_TABLES_HIGH_VERSION, 15, true, false, 
Arrays.asList("id", "name")));
+    }
 }

Reply via email to