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