Author: cbegin
Date: Sat Jun  3 06:29:45 2006
New Revision: 411431

URL: http://svn.apache.org/viewvc?rev=411431&view=rev
Log:
Applied Sven's cursor support patch from the wiki (file name modsrc_new.zip)

Modified:
    ibatis/trunk/java/mapper/mapper2/build/version.properties
    
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java
    
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/sql-map-2.dtd
    
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/execution/SqlExecutor.java
    
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/parameter/BasicParameterMapping.java
    
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/TypeHandlerFactory.java

Modified: ibatis/trunk/java/mapper/mapper2/build/version.properties
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/build/version.properties?rev=411431&r1=411430&r2=411431&view=diff
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/build/version.properties (original)
+++ ibatis/trunk/java/mapper/mapper2/build/version.properties Sat Jun  3 
06:29:45 2006
@@ -1,5 +1,5 @@
 #Build version info
-#Fri Mar 03 23:28:40 MST 2006
+#Fri Jun 02 23:47:35 MDT 2006
 version=2.1.7
-buildDate=2006/03/03 23\:28
-buildNum=602
+buildDate=2006/06/02 23\:47
+buildNum=603

Modified: 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java?rev=411431&r1=411430&r2=411431&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java
 Sat Jun  3 06:29:45 2006
@@ -26,8 +26,8 @@
 
 public class SqlMapParser extends BaseParser {
 
-  private static final Log log = LogFactory.getLog(SqlMapParser.class);        
-       
+  private static final Log log = LogFactory.getLog(SqlMapParser.class);
+
   protected final NodeletParser parser = new NodeletParser();
 
   public SqlMapParser(Variables vars) {
@@ -246,12 +246,14 @@
         String jdbcType = childAttributes.getProperty("jdbcType");
         String type     = childAttributes.getProperty("typeName");
         String javaType = childAttributes.getProperty("javaType");
+        String resultMap = childAttributes.getProperty("resultMap");
         String nullValue = childAttributes.getProperty("nullValue");
         String mode = childAttributes.getProperty("mode");
         String callback = childAttributes.getProperty("typeHandler");
 
         callback = vars.typeHandlerFactory.resolveAlias(callback);
         javaType = vars.typeHandlerFactory.resolveAlias(javaType);
+        resultMap = applyNamespace( resultMap );
 
         vars.errorCtx.setObjectId(propertyName + " mapping of the " + 
vars.currentParameterMap.getId() + " parameter map");
 
@@ -279,6 +281,7 @@
         mapping.setPropertyName(propertyName);
         mapping.setJdbcTypeName(jdbcType);
         mapping.setTypeName(type);
+        mapping.setResultMapName( resultMap );
         mapping.setNullValue(nullValue);
         if (mode != null && mode.length() > 0) {
           mapping.setMode(mode);
@@ -305,7 +308,7 @@
 
         vars.currentResultMap.setDiscriminator(vars.discriminator);
         vars.discriminator = null;
-        
+
         vars.client.getDelegate().addResultMap(vars.currentResultMap);
 
         vars.errorCtx.setMoreInfo(null);

Modified: 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/sql-map-2.dtd
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/sql-map-2.dtd?rev=411431&r1=411430&r2=411431&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/sql-map-2.dtd
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/sql-map-2.dtd
 Sat Jun  3 06:29:45 2006
@@ -36,6 +36,7 @@
 nullValue CDATA #IMPLIED
 mode (IN | OUT | INOUT) #IMPLIED
 typeHandler CDATA #IMPLIED
+resultMap CDATA #IMPLIED
 >
 <!ELEMENT resultMap (result+, discriminator?)>
 <!ATTLIST resultMap

Modified: 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/execution/SqlExecutor.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/execution/SqlExecutor.java?rev=411431&r1=411430&r2=411431&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/execution/SqlExecutor.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/execution/SqlExecutor.java
 Sat Jun  3 06:29:45 2006
@@ -23,6 +23,8 @@
 import com.ibatis.sqlmap.engine.scope.ErrorContext;
 import com.ibatis.sqlmap.engine.scope.RequestScope;
 import com.ibatis.sqlmap.engine.scope.SessionScope;
+import com.ibatis.sqlmap.engine.impl.ExtendedSqlMapClient;
+import com.ibatis.sqlmap.engine.mapping.statement.DefaultRowHandler;
 
 import java.sql.*;
 import java.util.ArrayList;
@@ -239,7 +241,7 @@
       rows = cs.getUpdateCount();
 
       errorContext.setMoreInfo("Check the output parameters (retrieval of 
output parameters failed).");
-      retrieveOutputParameters(cs, mappings, parameters);
+      retrieveOutputParameters(request, cs, mappings, parameters, null);
     } finally {
       closeStatement(cs);
     }
@@ -298,7 +300,7 @@
       while (cs.getMoreResults());
 
       errorContext.setMoreInfo("Check the output parameters (retrieval of 
output parameters failed).");
-      retrieveOutputParameters(cs, mappings, parameters);
+      retrieveOutputParameters( request, cs, mappings, parameters, callback);
 
     } finally {
       try {
@@ -347,12 +349,30 @@
   // Private Methods
   //
 
-  private void retrieveOutputParameters(CallableStatement cs, 
ParameterMapping[] mappings, Object[] parameters) throws SQLException {
+  private void retrieveOutputParameters(RequestScope request, 
CallableStatement cs, ParameterMapping[] mappings, Object[] parameters, 
RowHandlerCallback callback) throws SQLException {
     for (int i = 0; i < mappings.length; i++) {
       BasicParameterMapping mapping = ((BasicParameterMapping) mappings[i]);
       if (mapping.isOutputAllowed()) {
-        Object o = mapping.getTypeHandler().getResult(cs, i + 1);
-        parameters[i] = o;
+               if ( 
"java.sql.ResultSet".equalsIgnoreCase(mapping.getJavaTypeName()) )  {
+                 ResultSet rs = (ResultSet) cs.getObject( i + 1 );
+                 ResultMap resultMap;
+                 if ( mapping.getResultMapName() == null ) {
+                        resultMap =  request.getResultMap();
+                        handleResults(request, resultMap, rs, callback);
+                 }
+                 else {
+                        ExtendedSqlMapClient client = 
(ExtendedSqlMapClient)request.getSession().getSqlMapClient();
+                    resultMap =  client.getDelegate().getResultMap( 
mapping.getResultMapName() );
+                    DefaultRowHandler rowHandler = new DefaultRowHandler();
+                    RowHandlerCallback handlerCallback = new 
RowHandlerCallback(resultMap, null, rowHandler);
+                    handleResults(request, resultMap, rs, handlerCallback);
+                    parameters[i] = rowHandler.getList();
+                 }
+                 rs.close();
+         }
+         else {
+              parameters[i] = mapping.getTypeHandler().getResult(cs, i + 1);
+             }
       }
     }
   }
@@ -367,6 +387,26 @@
           cs.registerOutParameter(i + 1, mapping.getJdbcType());
         }
       }
+    }
+  }
+
+  private void handleResults(RequestScope request, ResultMap resultMap, 
ResultSet rs, RowHandlerCallback callback) throws SQLException {
+       ResultMap orig = request.getResultMap();
+    try {
+      request.setResultSet(rs);
+      if (resultMap != null) {
+       request.setResultMap( resultMap );
+
+
+        // Get Results
+        while (rs.next()) {
+          Object[] columnValues = resultMap.resolveSubMap(request, 
rs).getResults(request, rs);
+          callback.handleResultObject(request, columnValues, rs);
+        }
+      }
+    } finally {
+      request.setResultSet(null);
+      request.setResultMap(orig);
     }
   }
 

Modified: 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/parameter/BasicParameterMapping.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/parameter/BasicParameterMapping.java?rev=411431&r1=411430&r2=411431&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/parameter/BasicParameterMapping.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/parameter/BasicParameterMapping.java
 Sat Jun  3 06:29:45 2006
@@ -35,6 +35,7 @@
   private boolean inputAllowed;
   private boolean outputAllowed;
   private Class javaType;
+  private String resultMapName;
 
   private String errorString;
 
@@ -134,7 +135,7 @@
 
   /**
    * user-defined or REF types
-   * 
+   *
    * @return typeName
    */
   public String getTypeName() {
@@ -147,6 +148,14 @@
    */
   public void setTypeName(String typeName) {
     this.typeName = typeName;
+  }
+
+  public String getResultMapName() {
+         return resultMapName;
+  }
+
+  public void setResultMapName(String resultMapName) {
+         this.resultMapName = resultMapName;
   }
 
 }

Modified: 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/TypeHandlerFactory.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/TypeHandlerFactory.java?rev=411431&r1=411430&r2=411431&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/TypeHandlerFactory.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/TypeHandlerFactory.java
 Sat Jun  3 06:29:45 2006
@@ -106,6 +106,7 @@
     putTypeAlias("arraylist", ArrayList.class.getName());
     putTypeAlias("collection", Collection.class.getName());
     putTypeAlias("iterator", Iterator.class.getName());
+    putTypeAlias("cursor", java.sql.ResultSet.class.getName());
 
   }
 
@@ -206,7 +207,7 @@
     } else {
       value = string;
     }
-    
+
     return value;
   }
 


Reply via email to