This is an automated email from the ASF dual-hosted git repository.

tuichenchuxin 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 a19c46cf981 Handle SQLFeatureNotSupportedException when some db not 
implement jdbc interface (#26906)
a19c46cf981 is described below

commit a19c46cf981f96dabce00d73ef236f03f0166369
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Wed Jul 12 08:32:11 2023 +0800

    Handle SQLFeatureNotSupportedException when some db not implement jdbc 
interface (#26906)
---
 .../impl/driver/jdbc/metadata/JDBCQueryResultMetaData.java    |  6 +++++-
 .../jdbc/executor/callback/ProxyJDBCExecutorCallback.java     | 11 ++++++++---
 .../callback/impl/ProxyStatementExecutorCallback.java         |  7 ++++++-
 3 files changed, 19 insertions(+), 5 deletions(-)

diff --git 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/metadata/JDBCQueryResultMetaData.java
 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/metadata/JDBCQueryResultMetaData.java
index 05216aaf23e..b6745f66430 100644
--- 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/metadata/JDBCQueryResultMetaData.java
+++ 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/metadata/JDBCQueryResultMetaData.java
@@ -39,7 +39,11 @@ public final class JDBCQueryResultMetaData implements 
QueryResultMetaData {
     
     @Override
     public String getTableName(final int columnIndex) throws SQLException {
-        return resultSetMetaData.getTableName(columnIndex);
+        try {
+            return resultSetMetaData.getTableName(columnIndex);
+        } catch (final SQLFeatureNotSupportedException ignore) {
+            return "";
+        }
     }
     
     @Override
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/executor/callback/ProxyJDBCExecutorCallback.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/executor/callback/ProxyJDBCExecutorCallback.java
index 0d0979f26e0..0f84ac40e5d 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/executor/callback/ProxyJDBCExecutorCallback.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/executor/callback/ProxyJDBCExecutorCallback.java
@@ -36,6 +36,7 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.sql.SQLFeatureNotSupportedException;
 import java.sql.Statement;
 import java.sql.Types;
 import java.util.Optional;
@@ -71,7 +72,7 @@ public abstract class ProxyJDBCExecutorCallback extends 
JDBCExecutorCallback<Exe
             databaseConnector.add(resultSet);
             return createQueryResult(resultSet, connectionMode, storageType);
         }
-        return new UpdateResult(statement.getUpdateCount(), 
isReturnGeneratedKeys ? getGeneratedKey(statement) : 0L);
+        return new UpdateResult(Math.max(statement.getUpdateCount(), 0), 
isReturnGeneratedKeys ? getGeneratedKey(statement) : 0L);
     }
     
     protected abstract boolean execute(String sql, Statement statement, 
boolean isReturnGeneratedKeys) throws SQLException;
@@ -81,8 +82,12 @@ public abstract class ProxyJDBCExecutorCallback extends 
JDBCExecutorCallback<Exe
     }
     
     private long getGeneratedKey(final Statement statement) throws 
SQLException {
-        ResultSet resultSet = statement.getGeneratedKeys();
-        return resultSet.next() ? getGeneratedKeyIfInteger(resultSet) : 0L;
+        try {
+            ResultSet resultSet = statement.getGeneratedKeys();
+            return resultSet.next() ? getGeneratedKeyIfInteger(resultSet) : 0L;
+        } catch (final SQLFeatureNotSupportedException ignore) {
+            return 0L;
+        }
     }
     
     private long getGeneratedKeyIfInteger(final ResultSet resultSet) throws 
SQLException {
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/executor/callback/impl/ProxyStatementExecutorCallback.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/executor/callback/impl/ProxyStatementExecutorCallback.java
index ccf2a9e02a5..7b5f2b7b333 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/executor/callback/impl/ProxyStatementExecutorCallback.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/executor/callback/impl/ProxyStatementExecutorCallback.java
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.proxy.backend.connector.jdbc.executor.callback.
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 
 import java.sql.SQLException;
+import java.sql.SQLFeatureNotSupportedException;
 import java.sql.Statement;
 
 /**
@@ -39,6 +40,10 @@ public final class ProxyStatementExecutorCallback extends 
ProxyJDBCExecutorCallb
     
     @Override
     protected boolean execute(final String sql, final Statement statement, 
final boolean isReturnGeneratedKeys) throws SQLException {
-        return statement.execute(sql, isReturnGeneratedKeys ? 
Statement.RETURN_GENERATED_KEYS : Statement.NO_GENERATED_KEYS);
+        try {
+            return statement.execute(sql, isReturnGeneratedKeys ? 
Statement.RETURN_GENERATED_KEYS : Statement.NO_GENERATED_KEYS);
+        } catch (final SQLFeatureNotSupportedException ignore) {
+            return statement.execute(sql);
+        }
     }
 }

Reply via email to