You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ibatis.apache.org by cb...@apache.org on 2008/03/23 06:10:19 UTC

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

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