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)

Reply via email to