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);

Reply via email to