Skip to content

Commit b21ad1e

Browse files
committed
Make the cursor status transition consistent.
1 parent d14c67e commit b21ad1e

File tree

3 files changed

+12
-6
lines changed

3 files changed

+12
-6
lines changed

src/main/java/org/apache/ibatis/cursor/defaults/DefaultCursor.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,12 +139,11 @@ protected T fetchNextObjectFromDatabase() {
139139
return null;
140140
}
141141

142-
final boolean resultSetClosed;
143142
try {
144143
status = CursorStatus.OPEN;
145-
resultSetHandler.handleRowValues(rsw, resultMap, objectWrapperResultHandler, RowBounds.DEFAULT, null);
146-
// ResultSet might have been closed by the driver (e.g. DB2).
147-
resultSetClosed = rsw.getResultSet().isClosed();
144+
if (!rsw.getResultSet().isClosed()) {
145+
resultSetHandler.handleRowValues(rsw, resultMap, objectWrapperResultHandler, RowBounds.DEFAULT, null);
146+
}
148147
} catch (SQLException e) {
149148
throw new RuntimeException(e);
150149
}
@@ -154,7 +153,7 @@ protected T fetchNextObjectFromDatabase() {
154153
indexWithRowBound++;
155154
}
156155
// No more object or limit reached
157-
if (resultSetClosed || next == null || getReadItemsCount() == rowBounds.getOffset() + rowBounds.getLimit()) {
156+
if (next == null || getReadItemsCount() == rowBounds.getOffset() + rowBounds.getLimit()) {
158157
close();
159158
status = CursorStatus.CONSUMED;
160159
}

src/test/java/org/apache/ibatis/cursor/defaults/DefaultCursorTest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,13 @@ public void shouldCloseImmediatelyIfResultSetIsClosed() throws Exception {
100100
Map<String, Object> map = (Map<String, Object>) iter.next();
101101
assertEquals(Integer.valueOf(1), map.get("id"));
102102
assertEquals("CEO", ((Map<String, Object>) map.get("roles")).get("role"));
103+
104+
assertFalse(cursor.isConsumed());
105+
assertTrue(cursor.isOpen());
106+
107+
assertFalse(iter.hasNext());
103108
assertTrue(cursor.isConsumed());
104109
assertFalse(cursor.isOpen());
105-
assertFalse(iter.hasNext());
106110
}
107111
}
108112

src/test/java/org/apache/ibatis/submitted/cursor_nested/CursorNestedTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ public void shouldGetAllUser() {
7777
Assert.assertEquals(2, user.getGroups().size());
7878
Assert.assertEquals(2, user.getRoles().size());
7979

80+
Assert.assertTrue(usersCursor.isOpen());
81+
Assert.assertFalse(usersCursor.isConsumed());
82+
8083
// Check no more elements
8184
Assert.assertFalse(iterator.hasNext());
8285
Assert.assertFalse(usersCursor.isOpen());

0 commit comments

Comments
 (0)