Author: cbegin
Date: Sat Mar 22 22:10:18 2008
New Revision: 640154

URL: http://svn.apache.org/viewvc?rev=640154&view=rev
Log:
Added setting to force multiple result set support

Modified:
    
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapConfigParser.java
    
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/sql-map-config-2.dtd
    
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/config/SqlMapConfiguration.java
    
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/execution/SqlExecutor.java
    
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/impl/SqlMapExecutorDelegate.java

Modified: 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapConfigParser.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapConfigParser.java?rev=640154&r1=640153&r2=640154&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapConfigParser.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapConfigParser.java
 Sat Mar 22 22:10:18 2008
@@ -115,6 +115,10 @@
         boolean useColumnLabel = (useColumnLabelAttr == null || 
"true".equals(useColumnLabelAttr));
         config.setUseColumnLabel(useColumnLabel);
 
+        String forceMultipleResultSetSupportAttr = 
attributes.getProperty("forceMultipleResultSetSupport");
+        boolean forceMultipleResultSetSupport = 
"true".equals(forceMultipleResultSetSupportAttr);
+        config.setForceMultipleResultSetSupport(forceMultipleResultSetSupport);
+
         String defaultTimeoutAttr = 
attributes.getProperty("defaultStatementTimeout");
         Integer defaultTimeout = defaultTimeoutAttr == null ? null : 
Integer.valueOf(defaultTimeoutAttr);
         config.setDefaultStatementTimeout(defaultTimeout);

Modified: 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/sql-map-config-2.dtd
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/sql-map-config-2.dtd?rev=640154&r1=640153&r2=640154&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/sql-map-config-2.dtd
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/sql-map-config-2.dtd
 Sat Mar 22 22:10:18 2008
@@ -37,6 +37,7 @@
 errorTracingEnabled (true | false) #IMPLIED
 useStatementNamespaces (true | false) #IMPLIED
 useColumnLabel (true | false) #IMPLIED
+forceMultipleResultSetSupport (true | false) #IMPLIED
 defaultStatementTimeout CDATA #IMPLIED
 >
 

Modified: 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/config/SqlMapConfiguration.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/config/SqlMapConfiguration.java?rev=640154&r1=640153&r2=640154&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/config/SqlMapConfiguration.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/config/SqlMapConfiguration.java
 Sat Mar 22 22:10:18 2008
@@ -89,6 +89,10 @@
     client.getDelegate().setUseColumnLabel(useColumnLabel);
   }
 
+  public void setForceMultipleResultSetSupport(boolean 
forceMultipleResultSetSupport) {
+    
client.getDelegate().setForceMultipleResultSetSupport(forceMultipleResultSetSupport);
+  }
+
   public void setDefaultStatementTimeout(Integer defaultTimeout) {
     errorContext.setActivity("setting default timeout");
     if (defaultTimeout != null) {

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=640154&r1=640153&r2=640154&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 Mar 22 22:10:18 2008
@@ -295,7 +295,7 @@
 
   private ResultSet handleMultipleResults(PreparedStatement ps, StatementScope 
statementScope, int skipResults, int maxResults, RowHandlerCallback callback) 
throws SQLException {
     ResultSet rs;
-    rs = getFirstResultSet(ps);
+    rs = getFirstResultSet(statementScope, ps);
     if (rs != null) {
       handleResults(statementScope, rs, skipResults, maxResults, callback);
     }
@@ -309,7 +309,7 @@
         multipleResults.add(defaultRowHandler.getList());
         ResultMap[] resultMaps = statement.getAdditionalResultMaps();
         int i = 0;
-        while (moveToNextResultsSafely(ps)) {
+        while (moveToNextResultsSafely(statementScope, ps)) {
           if (i >= resultMaps.length) break;
           ResultMap rm = resultMaps[i];
           statementScope.setResultMap(rm);
@@ -322,14 +322,14 @@
         defaultRowHandler.setList(multipleResults);
         statementScope.setResultMap(statement.getResultMap());
       } else {
-        while (moveToNextResultsSafely(ps)) ;
+        while (moveToNextResultsSafely(statementScope, ps)) ;
       }
     }
     // End additional ResultSet handling
     return rs;
   }
 
-  private ResultSet getFirstResultSet(Statement stmt) throws SQLException {
+  private ResultSet getFirstResultSet(StatementScope scope, Statement stmt) 
throws SQLException {
     ResultSet rs = null;
     boolean hasMoreResults = true;
     while (hasMoreResults) {
@@ -337,23 +337,27 @@
       if (rs != null) {
         break;
       }
-      hasMoreResults = moveToNextResultsIfPresent(stmt);
+      hasMoreResults = moveToNextResultsIfPresent(scope, stmt);
     }
     return rs;
   }
 
-  private boolean moveToNextResultsIfPresent(Statement stmt) throws 
SQLException {
+  private boolean moveToNextResultsIfPresent(StatementScope scope, Statement 
stmt) throws SQLException {
     boolean moreResults;
     // This is the messed up JDBC approach for determining if there are more 
results
-    moreResults = !(((moveToNextResultsSafely(stmt) == false) && 
(stmt.getUpdateCount() == -1)));
+    moreResults = !(((moveToNextResultsSafely(scope, stmt) == false) && 
(stmt.getUpdateCount() == -1)));
     return moreResults;
   }
 
-  private boolean moveToNextResultsSafely(Statement stmt) throws SQLException {
-    if (stmt.getConnection().getMetaData().supportsMultipleResultSets()) {
+  private boolean moveToNextResultsSafely(StatementScope scope, Statement 
stmt) throws SQLException {
+    if (forceMultipleResultSetSupport(scope) || 
stmt.getConnection().getMetaData().supportsMultipleResultSets()) {
       return stmt.getMoreResults();
     }
     return false;
+  }
+
+  private boolean forceMultipleResultSetSupport(StatementScope scope) {
+    return 
((SqlMapClientImpl)scope.getSession().getSqlMapClient()).getDelegate().isForceMultipleResultSetSupport();
   }
 
   private void handleResults(StatementScope statementScope, ResultSet rs, int 
skipResults, int maxResults, RowHandlerCallback callback) throws SQLException {

Modified: 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/impl/SqlMapExecutorDelegate.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/impl/SqlMapExecutorDelegate.java?rev=640154&r1=640153&r2=640154&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/impl/SqlMapExecutorDelegate.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/impl/SqlMapExecutorDelegate.java
 Sat Mar 22 22:10:18 2008
@@ -61,6 +61,7 @@
   private boolean cacheModelsEnabled;
   private boolean enhancementEnabled;
   private boolean useColumnLabel = true;
+  private boolean forceMultipleResultSetSupport;
 
   private TransactionManager txManager;
 
@@ -899,6 +900,14 @@
 
   public void setStatementCacheEnabled(boolean statementCacheEnabled) {
     this.statementCacheEnabled = statementCacheEnabled;
+  }
+
+  public boolean isForceMultipleResultSetSupport() {
+    return forceMultipleResultSetSupport;
+  }
+
+  public void setForceMultipleResultSetSupport(boolean 
forceMultipleResultSetSupport) {
+    this.forceMultipleResultSetSupport = forceMultipleResultSetSupport;
   }
 }
 


Reply via email to