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;

Reply via email to