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();