This is an automated email from the ASF dual-hosted git repository.
terrymanu 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 979d36f357a Fix JDBC fallback view metadata type loading (#39830)
979d36f357a is described below
commit 979d36f357a1abff7c844f6ee04f5a3a32fca7d9
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Sep 13 16:08:46 2026 +0800
Fix JDBC fallback view metadata type loading (#39830)
---
.../data/loader/type/TableMetaDataLoader.java | 19 +++++++++++++------
.../data/loader/type/TableMetaDataLoaderTest.java | 16 +++++++++++++++-
2 files changed, 28 insertions(+), 7 deletions(-)
diff --git
a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/metadata/data/loader/type/TableMetaDataLoader.java
b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/metadata/data/loader/type/TableMetaDataLoader.java
index 70df9f44555..71138cd185b 100644
---
a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/metadata/data/loader/type/TableMetaDataLoader.java
+++
b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/metadata/data/loader/type/TableMetaDataLoader.java
@@ -21,6 +21,7 @@ import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import
org.apache.shardingsphere.database.connector.core.metadata.data.loader.MetaDataLoaderConnection;
import
org.apache.shardingsphere.database.connector.core.metadata.data.model.TableMetaData;
+import
org.apache.shardingsphere.database.connector.core.metadata.database.enums.TableType;
import
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierCasePolicy;
import
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierNormalizeEngine;
import
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierScope;
@@ -83,16 +84,22 @@ public final class TableMetaDataLoader {
private static Optional<TableMetaData> loadTableMetaData(final DataSource
dataSource, final String tableName,
final String
tableNamePattern, final DatabaseType databaseType) throws SQLException {
try (MetaDataLoaderConnection connection = new
MetaDataLoaderConnection(databaseType, dataSource.getConnection())) {
- return isTableExist(connection, tableNamePattern)
- ? Optional.of(new TableMetaData(tableName,
ColumnMetaDataLoader.load(
- connection, tableNamePattern, databaseType),
IndexMetaDataLoader.load(connection, tableNamePattern),
Collections.emptyList()))
- : Optional.empty();
+ Optional<TableType> tableType = loadTableType(connection,
tableNamePattern);
+ if (!tableType.isPresent()) {
+ return Optional.empty();
+ }
+ return Optional.of(new TableMetaData(tableName,
ColumnMetaDataLoader.load(connection, tableNamePattern, databaseType),
+ IndexMetaDataLoader.load(connection, tableNamePattern),
Collections.emptyList(), tableType.get()));
}
}
- private static boolean isTableExist(final Connection connection, final
String tableNamePattern) throws SQLException {
+ private static Optional<TableType> loadTableType(final Connection
connection, final String tableNamePattern) throws SQLException {
try (ResultSet resultSet =
connection.getMetaData().getTables(connection.getCatalog(),
connection.getSchema(), tableNamePattern, null)) {
- return resultSet.next();
+ if (!resultSet.next()) {
+ return Optional.empty();
+ }
+ String tableType = resultSet.getString("TABLE_TYPE");
+ return Optional.of(TableType.VIEW.name().equals(tableType) ||
"SYSTEM VIEW".equals(tableType) ? TableType.VIEW : TableType.TABLE);
}
}
}
diff --git
a/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/metadata/data/loader/type/TableMetaDataLoaderTest.java
b/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/metadata/data/loader/type/TableMetaDataLoaderTest.java
index 2b279dd6869..2aff4a074fa 100644
---
a/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/metadata/data/loader/type/TableMetaDataLoaderTest.java
+++
b/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/metadata/data/loader/type/TableMetaDataLoaderTest.java
@@ -23,11 +23,14 @@ import
org.apache.shardingsphere.database.connector.core.metadata.data.model.Col
import
org.apache.shardingsphere.database.connector.core.metadata.data.model.IndexMetaData;
import
org.apache.shardingsphere.database.connector.core.metadata.data.model.SchemaMetaData;
import
org.apache.shardingsphere.database.connector.core.metadata.data.model.TableMetaData;
+import
org.apache.shardingsphere.database.connector.core.metadata.database.enums.TableType;
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
@@ -91,6 +94,7 @@ class TableMetaDataLoaderTest {
when(dataSource.getConnection().getCatalog()).thenReturn(TEST_CATALOG);
when(dataSource.getConnection().getMetaData().getTables(TEST_CATALOG,
null, TEST_TABLE, null)).thenReturn(tableExistResultSet);
when(tableExistResultSet.next()).thenReturn(true);
+ when(tableExistResultSet.getString("TABLE_TYPE")).thenReturn("TABLE");
when(dataSource.getConnection().getMetaData().getTables(TEST_CATALOG,
null, NOT_EXISTED_TABLE, null)).thenReturn(mock(ResultSet.class));
when(dataSource.getConnection().getMetaData().getColumns(TEST_CATALOG,
null, TEST_TABLE, "%")).thenReturn(columnResultSet);
when(columnResultSet.next()).thenReturn(true, true, false);
@@ -127,10 +131,20 @@ class TableMetaDataLoaderTest {
}
@Test
- void assertLoadNormalizedTableName() throws SQLException {
+ void assertLoadNormalizedTable() throws SQLException {
Optional<TableMetaData> actual =
TableMetaDataLoader.loadNormalized(dataSource, TEST_TABLE, databaseType);
assertTrue(actual.isPresent());
assertThat(actual.get().getName(), is(TEST_TABLE));
+ assertThat(actual.get().getType(), is(TableType.TABLE));
+ }
+
+ @ParameterizedTest(name = "{0}")
+ @ValueSource(strings = {"VIEW", "SYSTEM VIEW"})
+ void assertLoadNormalizedView(final String tableType) throws SQLException {
+
when(tableExistResultSet.getString("TABLE_TYPE")).thenReturn(tableType);
+ Optional<TableMetaData> actual =
TableMetaDataLoader.loadNormalized(dataSource, TEST_TABLE, databaseType);
+ assertTrue(actual.isPresent());
+ assertThat(actual.get().getType(), is(TableType.VIEW));
}
private void assertColumnMetaData(final ColumnMetaData actual, final
String name, final int dataType, final boolean primaryKey, final boolean
caseSensitive) {