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;
}