Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -191,10 +191,6 @@ private class CursorIterator implements Iterator<T> {

@Override
public boolean hasNext() {
if (isClosed()) {
return false;
}

if (object == null) {
object = fetchNextUsingRowBound();
}
Expand All @@ -203,10 +199,6 @@ public boolean hasNext() {

@Override
public T next() {
if (isClosed()) {
throw new CursorException("Cursor is closed");
}

// Fill next with object fetched from hasNext()
T next = object;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ public void testCursorWithRowBound() {

Iterator<User> iterator = usersCursor.iterator();

Assert.assertTrue(iterator.hasNext());
User user = iterator.next();
Assert.assertEquals("User3", user.getName());
Assert.assertEquals(2, usersCursor.getCurrentIndex());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,4 @@ insert into users values(1, 'User1');
insert into users values(2, 'User2');
insert into users values(3, 'User3');
insert into users values(4, 'User4');
insert into users values(5, 'User5');
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;

public class CursorSimpleTest {

Expand Down Expand Up @@ -93,6 +94,10 @@ public void shouldGetAllUser() {
Assert.assertEquals("User4", user.getName());
Assert.assertEquals(3, usersCursor.getCurrentIndex());

user = iterator.next();
Assert.assertEquals("User5", user.getName());
Assert.assertEquals(4, usersCursor.getCurrentIndex());

// Check no more elements
Assert.assertFalse(iterator.hasNext());
Assert.assertFalse(usersCursor.isOpen());
Expand Down Expand Up @@ -140,26 +145,80 @@ public void testCursorWithRowBound() {

try {
// RowBound starting at offset 1 and limiting to 2 items
Cursor<User> usersCursor = sqlSession.selectCursor("getAllUsers", null, new RowBounds(1, 2));
Cursor<User> usersCursor = sqlSession.selectCursor("getAllUsers", null, new RowBounds(1, 3));

Iterator<User> iterator = usersCursor.iterator();

User user = iterator.next();
Assert.assertEquals("User2", user.getName());
Assert.assertEquals(1, usersCursor.getCurrentIndex());

// Calling hasNext() before next()
Assert.assertTrue(iterator.hasNext());
user = iterator.next();
Assert.assertEquals("User3", user.getName());
Assert.assertEquals(2, usersCursor.getCurrentIndex());

// Calling next() without a previous hasNext() call
user = iterator.next();
Assert.assertEquals("User4", user.getName());
Assert.assertEquals(3, usersCursor.getCurrentIndex());

Assert.assertFalse(iterator.hasNext());
Assert.assertFalse(usersCursor.isOpen());
Assert.assertTrue(usersCursor.isConsumed());
} finally {
sqlSession.close();
}
}

@Test
public void testCursorIteratorNoSuchElementExceptionWithHasNext() {
SqlSession sqlSession = sqlSessionFactory.openSession();

Cursor<User> usersCursor = sqlSession.selectCursor("getAllUsers", null, new RowBounds(1, 1));
try {
Iterator<User> iterator = usersCursor.iterator();

User user = iterator.next();
Assert.assertEquals("User2", user.getName());
Assert.assertEquals(1, usersCursor.getCurrentIndex());

Assert.assertFalse(iterator.hasNext());
iterator.next();
Assert.fail("We should have failed since we call next() when hasNext() returned false");
} catch (NoSuchElementException e) {
Assert.assertFalse(usersCursor.isOpen());
Assert.assertTrue(usersCursor.isConsumed());
} finally {
sqlSession.close();
}
}

@Test
public void testCursorIteratorNoSuchElementExceptionNoHasNext() {
SqlSession sqlSession = sqlSessionFactory.openSession();

Cursor<User> usersCursor = sqlSession.selectCursor("getAllUsers", null, new RowBounds(1, 1));
try {
Iterator<User> iterator = usersCursor.iterator();

User user = iterator.next();
Assert.assertEquals("User2", user.getName());
Assert.assertEquals(1, usersCursor.getCurrentIndex());

// Trying next() without hasNext()
iterator.next();
Assert.fail("We should have failed since we call next() when is no more items");
} catch (NoSuchElementException e) {
Assert.assertFalse(usersCursor.isOpen());
Assert.assertTrue(usersCursor.isConsumed());
} finally {
sqlSession.close();
}
}


@Test
public void testCursorWithBadRowBound() {
SqlSession sqlSession = sqlSessionFactory.openSession();
Expand Down Expand Up @@ -285,8 +344,8 @@ public void testCursorUsageAfterClose() throws IOException {
// trying next() will fail
iterator.next();

Assert.fail("We should have failed since Cursor is closed");
} catch (CursorException e) {
Assert.fail("We should have failed with NoSuchElementException since Cursor is closed");
} catch (NoSuchElementException e) {
// We had an exception and current index has not changed
Assert.assertEquals(1, usersCursor.getCurrentIndex());
return;
Expand Down Expand Up @@ -316,17 +375,19 @@ public void shouldGetAllUserUsingAnnotationBasedMapper() {

Assert.assertFalse(usersCursor.isOpen());
Assert.assertTrue(usersCursor.isConsumed());
Assert.assertEquals(3, usersCursor.getCurrentIndex());
Assert.assertEquals(4, usersCursor.getCurrentIndex());

Assert.assertEquals(4, userList.size());
Assert.assertEquals(5, userList.size());
User user = userList.get(0);
Assert.assertEquals("User1", user.getName());
user = userList.get(1);
Assert.assertEquals("User2", user.getName());
user = userList.get(2);
Assert.assertEquals("User3", user.getName());
user = userList.get(3);;
user = userList.get(3);
Assert.assertEquals("User4", user.getName());
user = userList.get(4);
Assert.assertEquals("User5", user.getName());

} finally {
sqlSession.close();
Expand Down