Details
-
Improvement
-
Status: Closed
-
Major
-
Resolution: Fixed
-
1.5.7
-
None
-
Windows XP SP3
Description
Sql.call method should clean up passed ResultSets...consider calling this method from "eachRow" as well if OutParameters are used (see Bug report GROOVY-3136)
public void call(String sql, List params, Closure closure) throws Exception { Connection connection = createConnection(); CallableStatement statement = connection.prepareCall(sql); List results = new ArrayList(); // <<< put result list here... try { log.fine(sql); setParameters(params, statement); statement.execute(); List results = new ArrayList(); int indx = 0; int inouts = 0; for (Iterator iter = params.iterator(); iter.hasNext();) { Object value = iter.next(); if (value instanceof OutParameter) { if (value instanceof ResultSetOutParameter) { results.add(CallResultSet.getImpl(statement, indx)); } else { Object o = statement.getObject(indx + 1); if (o instanceof ResultSet) { results.add(new GroovyResultSetProxy((ResultSet) o).getImpl()); } else { results.add(o); } } inouts++; } indx++; } closure.call(results.toArray(new Object[inouts])); } catch (SQLException e) { log.log(Level.WARNING, "Failed to execute: " + sql, e); throw e; } finally { // TODO: cleanup ResultSets in "results" -> closeResources(connection, statement); } }
Attachments
Issue Links
- is related to
-
GROOVY-3136 Groovy SQL eachRow and Resultset in parameters
- Closed