diff --git a/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java b/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java index ee16ac33669..7f9c21384db 100644 --- a/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java +++ b/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java @@ -2513,7 +2513,32 @@ public boolean execute(String sql, List params) throws SQLException { * @since 2.3.2 */ public void execute(String sql, List params, @ClosureParams(value=FromString.class, options={"boolean,java.util.List", "boolean,int"}) Closure resultClosure) throws SQLException { - + Connection connection = createConnection(); + PreparedStatement statement = null; + try { + statement = getPreparedStatement(connection, sql, params); + boolean isResultSet = statement.execute(); + int updateCount = statement.getUpdateCount(); + while(isResultSet || updateCount != -1) { + if (resultClosure.getMaximumNumberOfParameters() != 2) { + throw new SQLException("Incorrect number of parameters for resultClosure"); + } + if (isResultSet) { + ResultSet resultSet = statement.getResultSet(); + List rowResult = resultSet == null ? null : asList(sql, resultSet); + resultClosure.call(isResultSet, rowResult); + } else { + resultClosure.call(isResultSet, updateCount); + } + isResultSet = statement.getMoreResults(); + updateCount = statement.getUpdateCount(); + } + } catch (SQLException e) { + LOG.warning("Failed to execute: " + sql + " because: " + e.getMessage()); + throw e; + } finally { + closeResources(connection, statement); + } } /**