Skip to content

Commit 471b54a

Browse files
committed
[CONJ-1239] disable BULK use when there isn't any parameter
1 parent b89bb2b commit 471b54a

File tree

3 files changed

+35
-1
lines changed

3 files changed

+35
-1
lines changed

src/main/java/org/mariadb/jdbc/ClientPreparedStatement.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ private boolean executeInternalPreparedBatch() throws SQLException {
117117
&& ((isCommandInsert && (conf.useBulkStmts() || conf.useBulkStmtsForInserts()))
118118
|| (!isCommandInsert && conf.useBulkStmts()))
119119
&& batchParameters.size() > 1
120+
&& batchParameters.get(0).size() > 0
120121
&& autoGeneratedKeys != Statement.RETURN_GENERATED_KEYS) {
121122
executeBatchBulk();
122123
return isCommandInsert;

src/main/java/org/mariadb/jdbc/ServerPreparedStatement.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,8 @@ private boolean executeInternalPreparedBatch() throws SQLException {
180180
checkIfInsertCommand();
181181
if (((isCommandInsert && (conf.useBulkStmts() || conf.useBulkStmtsForInserts()))
182182
|| (!isCommandInsert && conf.useBulkStmts()))
183-
&& autoGeneratedKeys != Statement.RETURN_GENERATED_KEYS) {
183+
&& autoGeneratedKeys != Statement.RETURN_GENERATED_KEYS
184+
&& batchParameters.get(0).size() > 0) {
184185
executeBatchBulk(cmd);
185186
return isCommandInsert;
186187
} else {

src/test/java/org/mariadb/jdbc/integration/BatchTest.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -725,4 +725,36 @@ public String toString() {
725725
return "TimestampCal{" + "val=" + val + ", id=" + id + '}';
726726
}
727727
}
728+
729+
730+
@Test
731+
public void batchWithoutParameter() throws SQLException {
732+
try (Connection con = createCon("&useServerPrepStmts=false&useBulkStmts=true")) {
733+
batchWithoutParameter(con);
734+
}
735+
try (Connection con = createCon("&useServerPrepStmts=true&useBulkStmts=true")) {
736+
batchWithoutParameter(con);
737+
}
738+
}
739+
740+
private void batchWithoutParameter(Connection con) throws SQLException {
741+
Assumptions.assumeTrue(isMariaDBServer());
742+
Statement stmt = con.createStatement();
743+
stmt.execute("DROP TABLE IF EXISTS batchWithoutParameter");
744+
stmt.setFetchSize(3);
745+
stmt.execute("CREATE TABLE batchWithoutParameter(val varchar(10))");
746+
try (PreparedStatement prep =
747+
con.prepareStatement("INSERT INTO batchWithoutParameter VALUES ('')")) {
748+
prep.addBatch();
749+
prep.addBatch();
750+
prep.addBatch();
751+
prep.addBatch();
752+
prep.executeBatch();
753+
754+
ResultSet rs = stmt.executeQuery("SELECT count(*) FROM batchWithoutParameter");
755+
rs.next();
756+
assertEquals(rs.getInt(1), 4);
757+
}
758+
}
759+
728760
}

0 commit comments

Comments
 (0)