You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2021/06/18 07:41:35 UTC
[shardingsphere] branch master updated: For #10844 & #10138,
Fix getSaneResult in ShardingJDBC (#10845)
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 c029efa For #10844 & #10138, Fix getSaneResult in ShardingJDBC (#10845)
c029efa is described below
commit c029efae30cb0b88006583e51b5ed90c19170531
Author: Raigor <ra...@gmail.com>
AuthorDate: Fri Jun 18 15:41:14 2021 +0800
For #10844 & #10138, Fix getSaneResult in ShardingJDBC (#10845)
* For #10844➚, Fix getSaneResult in ShardingJDBC
* Add unit test and fix test error.
---
.../sql/execute/engine/jdbc/JDBCExecutorCallbackTest.java | 2 +-
.../driver/executor/batch/BatchPreparedStatementExecutor.java | 2 +-
.../jdbc/core/statement/ShardingSpherePreparedStatement.java | 5 ++---
.../driver/jdbc/core/statement/ShardingSphereStatement.java | 5 ++---
.../driver/executor/AbstractBaseExecutorTest.java | 2 +-
.../executor/batch/BatchPreparedStatementExecutorTest.java | 8 ++++----
.../core/statement/ShardingSpherePreparedStatementTest.java | 10 ++++++++++
.../jdbc/core/statement/ShardingSphereStatementTest.java | 8 ++++++++
8 files changed, 29 insertions(+), 13 deletions(-)
diff --git a/shardingsphere-infra/shardingsphere-infra-executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/jdbc/JDBCExecutorCallbackTest.java b/shardingsphere-infra/shardingsphere-infra-executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/jdbc/JDBCExecutorCallbackTest.java
index b1ad8d1..c3caf99 100644
--- a/shardingsphere-infra/shardingsphere-infra-executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/jdbc/JDBCExecutorCallbackTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/jdbc/JDBCExecutorCallbackTest.java
@@ -83,7 +83,7 @@ public final class JDBCExecutorCallbackTest {
@Override
protected Optional<Integer> getSaneResult(final SQLStatement sqlStatement) {
- return Optional.of(0);
+ return Optional.empty();
}
};
Field field = JDBCExecutorCallback.class.getDeclaredField("CACHED_DATASOURCE_METADATA");
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutor.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutor.java
index 68c6d6b..ad00546 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutor.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutor.java
@@ -131,7 +131,7 @@ public final class BatchPreparedStatementExecutor {
@SuppressWarnings("OptionalContainsCollection")
@Override
protected Optional<int[]> getSaneResult(final SQLStatement sqlStatement) {
- return Optional.of(new int[batchCount]);
+ return Optional.empty();
}
};
List<int[]> results = jdbcExecutor.execute(executionGroupContext, callback);
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index 4c922fc..82af5b5 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -73,7 +73,6 @@ import org.apache.shardingsphere.infra.rule.type.DataNodeContainedRule;
import org.apache.shardingsphere.infra.rule.type.RawExecutionRule;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.dal.DALStatement;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
import java.sql.Connection;
import java.sql.ParameterMetaData;
@@ -259,7 +258,7 @@ public final class ShardingSpherePreparedStatement extends AbstractPreparedState
@Override
protected Optional<Integer> getSaneResult(final SQLStatement sqlStatement) {
- return Optional.of(0);
+ return Optional.empty();
}
};
}
@@ -309,7 +308,7 @@ public final class ShardingSpherePreparedStatement extends AbstractPreparedState
@Override
protected Optional<Boolean> getSaneResult(final SQLStatement sqlStatement) {
- return Optional.of(sqlStatement instanceof SelectStatement);
+ return Optional.empty();
}
};
}
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index 6330473..358830f 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -73,7 +73,6 @@ import org.apache.shardingsphere.infra.rule.type.DataNodeContainedRule;
import org.apache.shardingsphere.infra.rule.type.RawExecutionRule;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.dal.DALStatement;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
import java.sql.Connection;
import java.sql.ResultSet;
@@ -275,7 +274,7 @@ public final class ShardingSphereStatement extends AbstractStatementAdapter {
@Override
protected Optional<Integer> getSaneResult(final SQLStatement sqlStatement) {
- return Optional.of(0);
+ return Optional.empty();
}
};
return driverJDBCExecutor.executeUpdate(executionGroupContext, sqlStatementContext, routeUnits, callback);
@@ -327,7 +326,7 @@ public final class ShardingSphereStatement extends AbstractStatementAdapter {
@Override
protected Optional<Boolean> getSaneResult(final SQLStatement sqlStatement) {
- return Optional.of(sqlStatement instanceof SelectStatement);
+ return Optional.empty();
}
};
return driverJDBCExecutor.execute(executionGroupContext, executionContext.getSqlStatementContext(), routeUnits, jdbcExecutorCallback);
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/executor/AbstractBaseExecutorTest.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/executor/AbstractBaseExecutorTest.java
index 61277f4..19e69cf 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/executor/AbstractBaseExecutorTest.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/executor/AbstractBaseExecutorTest.java
@@ -58,7 +58,7 @@ public abstract class AbstractBaseExecutorTest {
@Before
public void setUp() throws SQLException {
MockitoAnnotations.initMocks(this);
- SQLExecutorExceptionHandler.setExceptionThrown(false);
+ SQLExecutorExceptionHandler.setExceptionThrown(true);
executorEngine = new ExecutorEngine(Runtime.getRuntime().availableProcessors());
setConnection();
}
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutorTest.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutorTest.java
index fe24a9d..216e7d9 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutorTest.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutorTest.java
@@ -104,17 +104,17 @@ public final class BatchPreparedStatementExecutorTest extends AbstractBaseExecut
verify(preparedStatement2).executeBatch();
}
- @Test
+ @Test(expected = SQLException.class)
public void assertExecuteBatchForSinglePreparedStatementFailure() throws SQLException {
PreparedStatement preparedStatement = getPreparedStatement();
SQLException ex = new SQLException("");
when(preparedStatement.executeBatch()).thenThrow(ex);
setExecutionGroups(Collections.singletonList(preparedStatement));
- assertThat(actual.executeBatch(sqlStatementContext), is(new int[] {0, 0}));
+ actual.executeBatch(sqlStatementContext);
verify(preparedStatement).executeBatch();
}
- @Test
+ @Test(expected = SQLException.class)
public void assertExecuteBatchForMultiplePreparedStatementsFailure() throws SQLException {
PreparedStatement preparedStatement1 = getPreparedStatement();
PreparedStatement preparedStatement2 = getPreparedStatement();
@@ -122,7 +122,7 @@ public final class BatchPreparedStatementExecutorTest extends AbstractBaseExecut
when(preparedStatement1.executeBatch()).thenThrow(ex);
when(preparedStatement2.executeBatch()).thenThrow(ex);
setExecutionGroups(Arrays.asList(preparedStatement1, preparedStatement2));
- assertThat(actual.executeBatch(sqlStatementContext), is(new int[] {0, 0}));
+ actual.executeBatch(sqlStatementContext);
verify(preparedStatement1).executeBatch();
verify(preparedStatement2).executeBatch();
}
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatementTest.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatementTest.java
index 7d3eba1..da97f8f 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatementTest.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatementTest.java
@@ -63,6 +63,8 @@ public final class ShardingSpherePreparedStatementTest extends AbstractShardingS
private static final String UPDATE_BATCH_SQL = "UPDATE t_order SET status=? WHERE status=?";
+ private static final String UPDATE_WITH_ERROR_COLUMN = "UPDATE t_order SET error_column=?";
+
@Test
public void assertAddBatch() throws SQLException {
try (
@@ -531,4 +533,12 @@ public final class ShardingSpherePreparedStatementTest extends AbstractShardingS
assertThat(preparedStatement.getParameterMetaData().getParameterCount(), is(2));
}
}
+
+ @Test(expected = SQLException.class)
+ public void assertColumnNotFoundException() throws SQLException {
+ try (PreparedStatement preparedStatement = getShardingSphereDataSource().getConnection().prepareStatement(UPDATE_WITH_ERROR_COLUMN)) {
+ preparedStatement.setString(1, "OK");
+ preparedStatement.executeUpdate();
+ }
+ }
}
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatementTest.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatementTest.java
index 421871a..d521931 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatementTest.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatementTest.java
@@ -95,4 +95,12 @@ public final class ShardingSphereStatementTest extends AbstractShardingSphereDat
assertNull(statement.getResultSet());
}
}
+
+ @Test(expected = SQLException.class)
+ public void assertColumnNotFoundException() throws SQLException {
+ String sql = "UPDATE t_order_item SET error_column = '%s'";
+ try (Statement statement = getShardingSphereDataSource().getConnection().createStatement()) {
+ statement.executeUpdate(String.format(sql, "OK"));
+ }
+ }
}