Author: cbegin
Date: Sat Jan 23 15:42:08 2010
New Revision: 902425

URL: http://svn.apache.org/viewvc?rev=902425&view=rev
Log:
fixed ibatis-733 ResultContext.stop() has no effect

Modified:
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/FastResultSetHandler.java
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/NestedResultSetHandler.java
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java

Modified: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/FastResultSetHandler.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/FastResultSetHandler.java?rev=902425&r1=902424&r2=902425&view=diff
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/FastResultSetHandler.java
 (original)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/FastResultSetHandler.java
 Sat Jan 23 15:42:08 2010
@@ -12,10 +12,7 @@
 import org.apache.ibatis.mapping.*;
 import org.apache.ibatis.reflection.MetaObject;
 import org.apache.ibatis.reflection.factory.ObjectFactory;
-import org.apache.ibatis.session.Configuration;
-import org.apache.ibatis.session.ResultHandler;
-import org.apache.ibatis.session.RowBounds;
-import org.apache.ibatis.session.AutoMappingBehavior;
+import org.apache.ibatis.session.*;
 import org.apache.ibatis.type.TypeHandler;
 import org.apache.ibatis.type.TypeHandlerRegistry;
 
@@ -127,7 +124,7 @@
   protected void handleRowValues(ResultSet rs, ResultMap resultMap, 
ResultHandler resultHandler, RowBounds rowBounds) throws SQLException {
     final DefaultResultContext resultContext = new DefaultResultContext();
     skipRows(rs, rowBounds);
-    while (shouldProcessMoreRows(rs, resultContext.getResultCount(), 
rowBounds)) {
+    while (shouldProcessMoreRows(rs, resultContext, rowBounds)) {
       final ResultMap discriminatedResultMap = 
resolveDiscriminatedResultMap(rs, resultMap);
       Object rowValue = getRowValue(rs, discriminatedResultMap, null);
       resultContext.nextResultObject(rowValue);
@@ -135,8 +132,8 @@
     }
   }
 
-  protected boolean shouldProcessMoreRows(ResultSet rs, int count, RowBounds 
rowBounds) throws SQLException {
-    return rs.next() && count < rowBounds.getLimit();
+  protected boolean shouldProcessMoreRows(ResultSet rs, ResultContext context, 
RowBounds rowBounds) throws SQLException {
+    return rs.next() && context.getResultCount() < rowBounds.getLimit() && 
!context.isStopped();
   }
 
   protected void skipRows(ResultSet rs, RowBounds rowBounds) throws 
SQLException {

Modified: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/NestedResultSetHandler.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/NestedResultSetHandler.java?rev=902425&r1=902424&r2=902425&view=diff
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/NestedResultSetHandler.java
 (original)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/NestedResultSetHandler.java
 Sat Jan 23 15:42:08 2010
@@ -69,7 +69,7 @@
   protected void handleRowValues(ResultSet rs, ResultMap resultMap, 
ResultHandler resultHandler, RowBounds rowBounds) throws SQLException {
     final DefaultResultContext resultContext = new DefaultResultContext();
     skipRows(rs, rowBounds);
-    while (shouldProcessMoreRows(rs, resultContext.getResultCount(), 
rowBounds)) {
+    while (shouldProcessMoreRows(rs, resultContext, rowBounds)) {
       final ResultMap discriminatedResultMap = 
resolveDiscriminatedResultMap(rs, resultMap);
       final CacheKey rowKey = createRowKey(discriminatedResultMap, rs);
       final boolean knownValue = globalRowValueCache.containsKey(rowKey);

Modified: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java?rev=902425&r1=902424&r2=902425&view=diff
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java
 (original)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java
 Sat Jan 23 15:42:08 2010
@@ -464,6 +464,27 @@
     }
   }
 
+  private static class TestResultHandler implements ResultHandler {
+    int count = 0;
+    public void handleResult(ResultContext context) {
+      count++;
+      if (count == 2) context.stop();
+    }
+  }
+
+  @Test
+  public void shouldStopResultHandler() throws Exception {
+    SqlSession session = sqlMapper.openSession();
+
+    try {
+      final TestResultHandler resultHandler = new TestResultHandler();
+      session.select("domain.blog.mappers.BlogMapper.selectAllPosts", null, 
resultHandler);
+      assertEquals(2, resultHandler.count);
+    } finally {
+      session.close();
+    }
+  }
+
   @Test
   public void shouldOffsetAndLimitResultsUsingMapperClass() throws Exception {
     SqlSession session = sqlMapper.openSession();


Reply via email to