[ 
https://issues.apache.org/jira/browse/IBATIS-537?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12633786#action_12633786
 ] 

Kai Grabfelder commented on IBATIS-537:
---------------------------------------

It's really easy: Check out the subversion trunk, perform your changes and most 
subversion tools do have an option to create patch files. See the following 
link for information about how to do this in tortoise. Other subversion clients 
(e.g. the subversive eclipse plugin) offer similar functionality. 
http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-patch.html Feel 
free to ask on the mailing list for help

> Multiple external RowHandler support
> ------------------------------------
>
>                 Key: IBATIS-537
>                 URL: https://issues.apache.org/jira/browse/IBATIS-537
>             Project: iBatis for Java
>          Issue Type: Improvement
>          Components: SQL Maps
>    Affects Versions: 2.3.3
>            Reporter: Amol Jadhav
>            Priority: Minor
>
> We have MS-SQL  store proc which returns mutiple result sets. The results 
> sets are big and it will not be a good idea to put them in ArraList. The 
> current iBatis version do not support multiple external RowHandler (external 
> means, provided by iBatis user). By defualt iBatis uses DefaultRowHandler to 
> process multiple resultsets, the current code which handles multiple 
> resultset is as below
> Class:  com.ibatis.sqlmap.engine.execution.SqlExecutor 
> in method private ResultSet handleMultipleResults(....
>     // Multiple ResultSet handling
>     if (callback.getRowHandler() instanceof DefaultRowHandler) {
>       MappedStatement statement = statementScope.getStatement();
>       DefaultRowHandler defaultRowHandler = ((DefaultRowHandler) 
> callback.getRowHandler());
>       if (statement.hasMultipleResultMaps()) {
>         List multipleResults = new ArrayList();
>         multipleResults.add(defaultRowHandler.getList());
>         ResultMap[] resultMaps = statement.getAdditionalResultMaps();
>         int i = 0;
>         while (moveToNextResultsSafely(statementScope, ps)) {
>           if (i >= resultMaps.length) break;
>           ResultMap rm = resultMaps[i];
>           statementScope.setResultMap(rm);
>           rs = ps.getResultSet();
>           DefaultRowHandler rh = new DefaultRowHandler();
>           handleResults(statementScope, rs, skipResults, maxResults, new 
> RowHandlerCallback(rm, null, rh));
>           multipleResults.add(rh.getList());
>           i++;
>         }
>         defaultRowHandler.setList(multipleResults);
>         statementScope.setResultMap(statement.getResultMap());
>       } else {
>         while (moveToNextResultsSafely(statementScope, ps)) ;
>       }
>     }
>     // End additional ResultSet handling
> The fix which was put to solve this was as below, please let me know your 
> suggestions.
> 1. A new interface as below 
>  
> package com.ibatis.sqlmap.client.event;
> import com.ibatis.sqlmap.client.event.RowHandler;
> public interface MultiRowHandler extends RowHandler{
>       public MultiRowHandler getNextRowHandler();
> }
>  2. Changes to com.ibatis.sqlmap.engine.execution.SqlExecutor 
> if (callback.getRowHandler() instanceof MultiRowHandler) {
>         MappedStatement statement = statementScope.getStatement();
>         MultiRowHandler multipleRowHandler = 
> (MultiRowHandler)callback.getRowHandler();
>         if (statement.hasMultipleResultMaps()) {
>           ResultMap[] resultMaps = statement.getAdditionalResultMaps();
>           int i = 0;
>           while (moveToNextResultsSafely(statementScope, ps)) {
>             if (i >= resultMaps.length) break;
>             ResultMap rm = resultMaps[i];
>             statementScope.setResultMap(rm);
>             rs = ps.getResultSet();
>             RowHandler rh = multipleRowHandler.getNextRowHandler();
>             RowHandlerCallback hdc = new RowHandlerCallback(rm, null, rh);
>             handleResults(statementScope, rs, skipResults, maxResults,hdc );
>             multipleRowHandler = (MultiRowHandler)hdc.getRowHandler();
>             i++;
>           }
>           statementScope.setResultMap(statement.getResultMap());
>         } else {
>           while (moveToNextResultsSafely(statementScope, ps)) ;
>         }
>       }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to