From a2e8460a0fae8caea2f9982a9f9c788c67834df2 Mon Sep 17 00:00:00 2001 From: Paul King Date: Thu, 5 Sep 2024 10:13:45 +1000 Subject: [PATCH] GROOVY-11469: Empty execute method in groovy.sql.Sql --- .../src/main/java/groovy/sql/Sql.java | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) 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 a8d0268357d..6ae7900473d 100644 --- a/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java +++ b/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java @@ -2512,7 +2512,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); + } } /**