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