You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Hao Zhong (JIRA)" <ji...@apache.org> on 2017/03/22 01:28:41 UTC
[jira] [Updated] (DERBY-6927) SystemProcedures.hasSchema can fail
to close the resultset.
[ https://issues.apache.org/jira/browse/DERBY-6927?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Hao Zhong updated DERBY-6927:
-----------------------------
Summary: SystemProcedures.hasSchema can fail to close the resultset. (was: SystemProcedures.hasSchema does not close the resultset.)
> SystemProcedures.hasSchema can fail to close the resultset.
> -----------------------------------------------------------
>
> Key: DERBY-6927
> URL: https://issues.apache.org/jira/browse/DERBY-6927
> Project: Derby
> Issue Type: Bug
> Components: Services
> Affects Versions: 10.12.1.1
> Reporter: Hao Zhong
>
> The SystemProcedures.hasSchema method has the following code:
> {code:title=SystemProcedures.java|borderStyle=solid}
> ResultSet rs = conn.getMetaData().getSchemas();
> boolean schemaFound = false;
> while (rs.next() && !schemaFound)
> schemaFound = schemaName.equals(rs.getString("TABLE_SCHEM"));
> rs.close();
> {code}
> The while statement can throw exceptions, so the rs.close can never be executed. Indeed, DERBY-6297 fixed a similar bug. The buggy code is:
> {code:title=AccessDatabase.java|borderStyle=solid}
> boolean found=false;
> ResultSet result = conn.getMetaData().getSchemas();
> while(result.next()){
> if(result.getString(1).equals(schema)){
> found=true;
> break;
> }
> }
> return found;
> {code}
> The fixed code ensures that result is closed:
> {code:title=AccessDatabase.java|borderStyle=solid}
> ResultSet result = conn.getMetaData().getSchemas();
> try {
> while (result.next()) {
> if (result.getString(1).equals(schema)) {
> // Found it!
> return true;
> }
> }
> } finally {
> result.close();
> }
> // Didn't find the schema.
> return false;
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)