Details
-
Type:
Improvement
-
Status:
Closed
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: 1.5.7
-
Fix Version/s: 1.6.5
-
Component/s: SQL processing
-
Labels:None
-
Environment:Windows XP SP3
-
Number of attachments :
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); } }
Issue Links
- is related to
-
GROOVY-3136
Groovy SQL eachRow and Resultset in parameters
-
Activity
Paul King
made changes -
| Field | Original Value | New Value |
|---|---|---|
| Description |
Sql.call method should clean up passed ResultSets...consider calling this method from "eachRow" as well if OutParameters are used (see Bug report 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); } } |
Sql.call method should clean up passed ResultSets...consider calling this method from "eachRow" as well if OutParameters are used (see Bug report {code} 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); } } {code} |
Paul King
made changes -
| Link |
This issue is related to |
Paul King
made changes -
| Assignee | Paul King [ paulk_asert ] |
Paul King
made changes -
| Status | Open [ 1 ] | Closed [ 6 ] |
| Fix Version/s | 1.6.5 [ 15539 ] | |
| Resolution | Fixed [ 1 ] |
add code tags