This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 2dc66a7 fix problem:Statement setFetchDirection not supported #6661
(#7546)
2dc66a7 is described below
commit 2dc66a733c6265506e538de680e5c1ef1b0b051c
Author: wenweibin <[email protected]>
AuthorDate: Tue Sep 22 16:21:08 2020 +0800
fix problem:Statement setFetchDirection not supported #6661 (#7546)
* fix problem:Statement setFetchDirection not supported #6661
---
.../jdbc/adapter/AbstractStatementAdapter.java | 14 ++++++++++++++
.../AbstractUnsupportedOperationStatement.java | 12 +-----------
.../driver/jdbc/adapter/StatementAdapterTest.java | 21 ++++++++++++++++++++-
.../UnsupportedOperationStatementTest.java | 17 +----------------
.../circuit/statement/CircuitBreakerStatement.java | 12 +++++++++++-
5 files changed, 47 insertions(+), 29 deletions(-)
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractStatementAdapter.java
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractStatementAdapter.java
index f8b378e..5698b3a 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractStatementAdapter.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractStatementAdapter.java
@@ -39,6 +39,8 @@ public abstract class AbstractStatementAdapter extends
AbstractUnsupportedOperat
private boolean poolable;
private int fetchSize;
+
+ private int fecthDirection;
private final ForceExecuteTemplate<Statement> forceExecuteTemplate = new
ForceExecuteTemplate<>();
@@ -83,6 +85,18 @@ public abstract class AbstractStatementAdapter extends
AbstractUnsupportedOperat
recordMethodInvocation(targetClass, "setFetchSize", new Class[]
{int.class}, new Object[] {rows});
forceExecuteTemplate.execute((Collection) getRoutedStatements(),
statement -> statement.setFetchSize(rows));
}
+
+ @Override
+ public int getFetchDirection() throws SQLException {
+ return fecthDirection;
+ }
+
+ @Override
+ public void setFetchDirection(final int direction) throws SQLException {
+ this.fecthDirection = direction;
+ recordMethodInvocation(targetClass, "setFetchDirection", new Class[]
{int.class}, new Object[] {direction});
+ forceExecuteTemplate.execute((Collection) getRoutedStatements(),
statement -> statement.setFetchDirection(direction));
+ }
@SuppressWarnings("unchecked")
@Override
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/unsupported/AbstractUnsupportedOperationStatement.java
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/unsupported/AbstractUnsupportedOperationStatement.java
index 1b36bef..5b13616 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/unsupported/AbstractUnsupportedOperationStatement.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/unsupported/AbstractUnsupportedOperationStatement.java
@@ -27,17 +27,7 @@ import java.sql.Statement;
* Unsupported {@code Statement} methods.
*/
public abstract class AbstractUnsupportedOperationStatement extends
WrapperAdapter implements Statement {
-
- @Override
- public final int getFetchDirection() throws SQLException {
- throw new SQLFeatureNotSupportedException("getFetchDirection");
- }
-
- @Override
- public final void setFetchDirection(final int direction) throws
SQLException {
- throw new SQLFeatureNotSupportedException("setFetchDirection");
- }
-
+
@Override
public final void addBatch(final String sql) throws SQLException {
throw new SQLFeatureNotSupportedException("addBatch sql");
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/StatementAdapterTest.java
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/StatementAdapterTest.java
index 5b0a3b1..a44661d 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/StatementAdapterTest.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/StatementAdapterTest.java
@@ -121,7 +121,26 @@ public final class StatementAdapterTest extends
AbstractShardingSphereDataSource
assertThat(each.getFetchSize(), is(fetchSize));
}
}
-
+
+ @Test
+ public void assertSetFetchDirection() throws SQLException {
+ for (Statement each : statements.values()) {
+ each.setFetchDirection(ResultSet.FETCH_FORWARD);
+ each.executeQuery(sql);
+ assertFetchDirection((ShardingSphereStatement) each,
ResultSet.FETCH_FORWARD);
+ each.setFetchDirection(ResultSet.FETCH_REVERSE);
+ assertFetchDirection((ShardingSphereStatement) each,
ResultSet.FETCH_REVERSE);
+ }
+ }
+
+ private void assertFetchDirection(final ShardingSphereStatement actual,
final int fetchDirection) throws SQLException {
+ assertThat(actual.getFetchDirection(), is(fetchDirection));
+ for (Statement each : actual.getRoutedStatements()) {
+ // H2,MySQL getFetchDirection() always return
ResultSet.FETCH_FORWARD
+ assertThat(each.getFetchDirection(), is(ResultSet.FETCH_FORWARD));
+ }
+ }
+
@Test
public void assertSetEscapeProcessing() throws SQLException {
for (Statement each : statements.values()) {
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationStatementTest.java
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationStatementTest.java
index 2305367..0250088 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationStatementTest.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationStatementTest.java
@@ -23,7 +23,6 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.sql.Statement;
@@ -52,21 +51,7 @@ public final class UnsupportedOperationStatementTest extends
AbstractShardingSph
each.close();
}
}
-
- @Test(expected = SQLFeatureNotSupportedException.class)
- public void assertGetFetchDirection() throws SQLException {
- for (Statement each : statements) {
- each.getFetchDirection();
- }
- }
-
- @Test(expected = SQLFeatureNotSupportedException.class)
- public void assertSetFetchDirection() throws SQLException {
- for (Statement each : statements) {
- each.setFetchDirection(ResultSet.FETCH_UNKNOWN);
- }
- }
-
+
@Test(expected = SQLFeatureNotSupportedException.class)
public void assertAddBatch() throws SQLException {
for (Statement each : statements) {
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/circuit/statement/CircuitBreakerStatement.java
b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/circuit/statement/CircuitBreakerStatement.java
index f920b5f..da65924 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/circuit/statement/CircuitBreakerStatement.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/circuit/statement/CircuitBreakerStatement.java
@@ -23,6 +23,7 @@ import
org.apache.shardingsphere.driver.governance.internal.circuit.connection.C
import java.sql.Connection;
import java.sql.ResultSet;
+import java.sql.SQLException;
import java.sql.SQLWarning;
/**
@@ -97,7 +98,16 @@ public final class CircuitBreakerStatement extends
AbstractUnsupportedOperationS
public int getFetchSize() {
return 0;
}
-
+
+ @Override
+ public int getFetchDirection() throws SQLException {
+ return ResultSet.FETCH_FORWARD;
+ }
+
+ @Override
+ public void setFetchDirection(final int direction) throws SQLException {
+ }
+
@Override
public int getResultSetConcurrency() {
return ResultSet.CONCUR_READ_ONLY;