Fixes #1345 - Workaround for an issue when using mybatis cursor on DB2 #1346
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When using a Mybatis Cursor the DefaultResultSetHandler would interact with the ResultSet after it was closed automatically by the DB2 driver when we reached the end, this causes SqlExceptions. This commit implements a workaround that checks if the result set is already closed.
I also added a unit test with a mocked ResultSet that replicates the behavior of DB2. With my fix the SQLException is avoided, whereas the old code triggers the exception.
It would be nice if someone with a better knowledge of the Mybatis code base could have a look and see if there are better ways to fix it. I'm under the impression that the code in
DefaultResultSetHandler#handleRowValueswas never intended to be called multiple times like the DefaultCursor does. Maybe the code in DefaultResultSetHandler would be better off being split into two implementations: a list-based handler and a iterator-based handler.