Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.5.0-beta-1, 2.4.12
-
None
Description
Sql.withBatch(batchSize, ..) calls delegate.executeBatch() both when batchCount reaches batchSize, and at the end of the method (after the call to the "batch statement" closure).
Thus, if the number of addBatch() calls in the closure is exactly the same as, or a multiple of batchSize, one too much call to executeBatch() is made : nothing has been added to the batch.
Which, at least with HSQLDB 2.4.0, leads to a SQLException on that very last call.
Test to reproduce (compliant with SqlBatchTest)
void testWithBatchSizeHavingSizeSameSizeAsStatements() { def numRows = sql.rows("SELECT * FROM PERSON").size() assert numRows == 3 def myOthers = ['f4':'l4','f5':'l5','f6':'l6','f7':'l7'] def result = sql.withBatch(myOthers.size(), "insert into PERSON (id, firstname, lastname) values (?, ?, ?)") { ps -> myOthers.eachWithIndex { k, v, index -> def id = index + numRows + 1 ps.addBatch(id, k, v) } } assert result == [1] * myOthers.size() assert sql.rows("SELECT * FROM PERSON").size() == numRows + myOthers.size() // end result the same as if no batching was in place but logging should show: // FINE: Successfully executed batch with 4 command(s) }
Attachments
Issue Links
- links to