Hao Zhong created DERBY-6927:
--------------------------------
Summary: SystemProcedures.hasSchema doe not 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)