Fix bug: mysql statement leak - #1627
Conversation
Fix bug: mysql statement leak fix apache#1626
Fix bug: mysql statement leak fix apache#1626
Fix bug: mysql statement leak fix apache#1626
Fix bug: mysql statement leak fix apache#1626
Fix bug: mysql statement leak fix apache#1626
javeme
left a comment
There was a problem hiding this comment.
Looks good, thank you for your contribution.
| try { | ||
| while (!this.results.isClosed() && this.results.next()) { | ||
| MysqlBackendEntry entry = this.row2Entry(this.results); | ||
| while (!this.resultSetWrapper.getResultSet().isClosed() && this.resultSetWrapper.getResultSet().next()) { |
There was a problem hiding this comment.
prefer to add hasNext method to ResultSetWrapper to wrap isClosed() and next()
| while (!this.results.isClosed() && this.results.next()) { | ||
| MysqlBackendEntry entry = this.row2Entry(this.results); | ||
| while (!this.resultSetWrapper.getResultSet().isClosed() && this.resultSetWrapper.getResultSet().next()) { | ||
| MysqlBackendEntry entry = this.row2Entry(this.resultSetWrapper.getResultSet()); |
| protected Iterator<BackendEntry> results2Entries(Query query, | ||
| ResultSet results) { | ||
| return new MysqlEntryIterator(results, query, this::mergeEntries); | ||
| ResultSetWrapper resultSetWrapper) { |
| try { | ||
| ResultSet resultSet = session.select(select); | ||
| resultSetWrapper = session.select(select); | ||
| ResultSet resultSet = resultSetWrapper.getResultSet(); |
| private PaloLoadInfo getLoadInfoByLabel(String label) { | ||
| String sql = String.format("SHOW LOAD WHERE LABEL = '%s'", label); | ||
| ResultSet result; | ||
| ResultSetWrapper resultSetWrapper = null; |
| if (result.next()) { | ||
| return new PaloLoadInfo(result); | ||
| resultSetWrapper = this.select(sql); | ||
| ResultSet resultSet = resultSetWrapper.getResultSet(); |
| for (StringBuilder selection : selections) { | ||
| ResultSet results = session.select(selection.toString()); | ||
| rs.extend(parser.apply(query, results)); | ||
| ResultSetWrapper resultSetWrapper = session.select(selection.toString()); |
| } | ||
| return this.conn.createStatement().execute(sql); | ||
| Statement statement = null; | ||
| try { |
There was a problem hiding this comment.
can use try (Statement statement = this.conn.createStatement())
| } finally { | ||
| if (resultSetWrapper != null) { | ||
| resultSetWrapper.close(); | ||
| } |
There was a problem hiding this comment.
seems lack of ResultSetWrapper file
Fix bug: mysql statement leak fix apache#1626
Fix bug: mysql statement leak fix apache#1626
Fix bug: mysql statement leak fix apache#1626
Fix bug: mysql statement leak fix apache#1626
Fix bug: mysql statement leak fix apache#1626
Fix bug: mysql statement leak fix apache#1626
Codecov Report
@@ Coverage Diff @@
## master #1627 +/- ##
============================================
+ Coverage 62.81% 63.18% +0.36%
- Complexity 6691 6715 +24
============================================
Files 418 419 +1
Lines 34504 34527 +23
Branches 4778 4779 +1
============================================
+ Hits 21674 21816 +142
+ Misses 10581 10456 -125
- Partials 2249 2255 +6
Continue to review full report at Codecov.
|
| try { | ||
| while (!this.resultSetWrapper.getResultSet().isClosed() && this.resultSetWrapper.getResultSet().next()) { | ||
| MysqlBackendEntry entry = this.row2Entry(this.resultSetWrapper.getResultSet()); | ||
| while (!this.results.isClosed() && this.results.next()) { |
There was a problem hiding this comment.
move !this.results.isClosed() into next() method
| return resultSet.next(); | ||
| } | ||
|
|
||
| public boolean isClosed() throws SQLException { |
| } | ||
| } | ||
|
|
||
| public ResultSet getResultSet() { |
| return resultSet; | ||
| } | ||
|
|
||
| public void setResultSet(ResultSet resultSet) { |
| public Statement getStatement() { | ||
| return statement; | ||
| } | ||
|
|
||
| public void setStatement(Statement statement) { | ||
| this.statement = statement; | ||
| } |
| private ResultSet resultSet; | ||
| private Statement statement; |
| Statement statement = this.conn.createStatement(); | ||
| ResultSet rs = statement.executeQuery(sql); | ||
| return new ResultSetWrapper(rs, statement); | ||
| } catch (SQLException sqlException) { |
| assert this.conn.getAutoCommit(); | ||
| return this.conn.createStatement().executeQuery(sql); | ||
| try { | ||
| Statement statement = this.conn.createStatement(); |
| ResultSet rs = statement.executeQuery(sql); | ||
| return new ResultSetWrapper(rs, statement); | ||
| } catch (SQLException sqlException) { | ||
| throw sqlException; |
There was a problem hiding this comment.
close statement if exception occurred when executeQuery()
| try { | ||
| ResultSet resultSet = session.select(select); | ||
| results = session.select(select); | ||
| ResultSet resultSet = results.getResultSet(); |
Fix bug: mysql statement leak fix apache#1626
Fix bug: mysql statement leak fix apache#1626
Fix bug: mysql statement leak fix apache#1626
Fix bug: mysql statement leak fix apache#1626
Fix bug: mysql statement leak fix apache#1626
Fix bug: mysql statement leak fix apache#1626
| public ResultSet resultSet() { | ||
| return resultSet; | ||
| } | ||
|
|
| } | ||
| } catch (SQLException e) { | ||
| throw new BackendException( | ||
| "Failed to close resultSet and statement", e); |
There was a problem hiding this comment.
Failed to close resultSet or Statement
also prefer align " with BackendException in prior line
| @@ -66,7 +66,7 @@ protected final boolean fetch() { | |||
|
|
|||
| try { | |||
| while (!this.results.isClosed() && this.results.next()) { | |||
There was a problem hiding this comment.
can remove !this.results.isClosed() && since done in results.next()
| } | ||
| } catch (SQLException e) { | ||
| throw new BackendException( | ||
| "Failed to close resultSet and statement", e); |
There was a problem hiding this comment.
align with "new" and keep "ResultSet and Statement"
| if (this.statement != null) { | ||
| this.statement.close(); | ||
| } |
| if (result.next()) { | ||
| return new PaloLoadInfo(result); | ||
| try (ResultSetWrapper results = this.select(sql)){ | ||
| ResultSet resultSet = results.resultSet(); |
Fix bug: mysql statement leak fix apache#1626
Fix bug: mysql statement leak fix apache#1626
Fix bug: mysql statement leak fix apache#1626
Fix bug: mysql statement leak
fix #1626