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 6281889d27e Support metadata URL fallback for SQLException (#39014)
6281889d27e is described below
commit 6281889d27e70e8526db2d949a282d3488e73749
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Jul 6 00:07:20 2026 +0800
Support metadata URL fallback for SQLException (#39014)
---
.../connector/core/type/DatabaseTypeFactory.java | 3 +--
.../core/type/DatabaseTypeFactoryTest.java | 31 ++++++++++++++++++++++
2 files changed, 32 insertions(+), 2 deletions(-)
diff --git
a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/type/DatabaseTypeFactory.java
b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/type/DatabaseTypeFactory.java
index 01ebc1082dc..01b85f6c55c 100644
---
a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/type/DatabaseTypeFactory.java
+++
b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/type/DatabaseTypeFactory.java
@@ -27,7 +27,6 @@ import
org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
-import java.sql.SQLFeatureNotSupportedException;
import java.util.Collection;
import java.util.Optional;
import java.util.stream.Collectors;
@@ -65,7 +64,7 @@ public final class DatabaseTypeFactory {
public static DatabaseType get(final DatabaseMetaData metaData) throws
SQLException {
try {
return get(metaData.getURL());
- } catch (final SQLFeatureNotSupportedException ex) {
+ } catch (final SQLException ex) {
return
findByDialectJdbcUrlFetcher(metaData.getConnection()).orElseThrow(() -> ex);
}
}
diff --git
a/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/type/DatabaseTypeFactoryTest.java
b/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/type/DatabaseTypeFactoryTest.java
index 56473da1a4f..ee2d90b26ba 100644
---
a/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/type/DatabaseTypeFactoryTest.java
+++
b/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/type/DatabaseTypeFactoryTest.java
@@ -91,6 +91,22 @@ class DatabaseTypeFactoryTest {
assertThat(DatabaseTypeFactory.get(metaData), is(databaseType));
}
+ @Test
+ void assertGetWithSQLExceptionMetadataURLAndDialectJdbcUrlFetcher() throws
SQLException {
+ DatabaseType databaseType = mockDatabaseType("jdbc:trunk:", null);
+ DatabaseMetaData metaData = mock(DatabaseMetaData.class);
+ Connection connection = mock(Connection.class);
+ DialectJdbcUrlFetcher jdbcUrlFetcher =
mock(DialectJdbcUrlFetcher.class);
+ when(metaData.getURL()).thenThrow(new SQLException("unsupported"));
+ when(metaData.getConnection()).thenReturn(connection);
+ doReturn(Connection.class).when(jdbcUrlFetcher).getConnectionClass();
+ when(connection.isWrapperFor(Connection.class)).thenReturn(true);
+
when(jdbcUrlFetcher.fetch(connection)).thenReturn("jdbc:trunk://localhost:3306/test");
+
when(ShardingSphereServiceLoader.getServiceInstances(DialectJdbcUrlFetcher.class)).thenReturn(Collections.singleton(jdbcUrlFetcher));
+
when(ShardingSphereServiceLoader.getServiceInstances(DatabaseType.class)).thenReturn(Collections.singleton(databaseType));
+ assertThat(DatabaseTypeFactory.get(metaData), is(databaseType));
+ }
+
@Test
void assertGetWithUnsupportedMetadataURLAndNoDialectJdbcUrlFetcher()
throws SQLException {
SQLFeatureNotSupportedException expectedException = new
SQLFeatureNotSupportedException("unsupported");
@@ -106,6 +122,21 @@ class DatabaseTypeFactoryTest {
assertThat(actualException, is(expectedException));
}
+ @Test
+ void assertGetWithSQLExceptionMetadataURLAndNoDialectJdbcUrlFetcher()
throws SQLException {
+ SQLException expectedException = new SQLException("unsupported");
+ DatabaseMetaData metaData = mock(DatabaseMetaData.class);
+ Connection connection = mock(Connection.class);
+ DialectJdbcUrlFetcher jdbcUrlFetcher =
mock(DialectJdbcUrlFetcher.class);
+ when(metaData.getURL()).thenThrow(expectedException);
+ when(metaData.getConnection()).thenReturn(connection);
+ doReturn(Connection.class).when(jdbcUrlFetcher).getConnectionClass();
+ when(connection.isWrapperFor(Connection.class)).thenReturn(false);
+
when(ShardingSphereServiceLoader.getServiceInstances(DialectJdbcUrlFetcher.class)).thenReturn(Collections.singleton(jdbcUrlFetcher));
+ SQLException actualException = assertThrows(SQLException.class, () ->
DatabaseTypeFactory.get(metaData));
+ assertThat(actualException, is(expectedException));
+ }
+
@Test
void assertGetWithUnsupportedDialectJdbcUrlFetcherURL() throws
SQLException {
DatabaseType databaseType = mock(DatabaseType.class);