[ 
https://issues.apache.org/jira/browse/DERBY-4313?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Knut Anders Hatlen closed DERBY-4313.
-------------------------------------

          Resolution: Fixed
       Fix Version/s: 10.6.0.0
    Issue & fix info:   (was: [Patch Available])

Committed revision 796834.

> JDBC.dropUsingDMD() may skip dropping objects
> ---------------------------------------------
>
>                 Key: DERBY-4313
>                 URL: https://issues.apache.org/jira/browse/DERBY-4313
>             Project: Derby
>          Issue Type: Bug
>          Components: Test
>    Affects Versions: 10.6.0.0
>            Reporter: Knut Anders Hatlen
>            Assignee: Knut Anders Hatlen
>            Priority: Minor
>             Fix For: 10.6.0.0
>
>         Attachments: dropUsingDMD.diff
>
>
> This loop in JDBC.dropUsingDMD() looks broken:
>         // Remove any statements from the list that succeeded.
>               boolean didDrop = false;
>               for (int i = 0; i < results.length; i++)
>               {
>                       int result = results[i];
>                       if (result == -3 /* Statement.EXECUTE_FAILED*/)
>                               hadError = true;
>                       else if (result == -2/*Statement.SUCCESS_NO_INFO*/)
>                               didDrop = true;
>                       else if (result >= 0)
>                               didDrop = true;
>                       else
>                               Assert.fail("Negative executeBatch status");
>             
>             if (didDrop)
>                 ddl.set(i, null);
>               }
> It is supposed to check the status of each individual statement executed in a 
> batch, and clear the successful ones from an ArrayList so that only the 
> unsuccessful ones are left.
> However, if one of the statements is reported to have failed, and one of the 
> proceeding statements has been successful, the failed statement will be 
> removed from the ArrayList because didDrop is true. This means that some of 
> the failed statements are not retried later. The statements normally fail 
> because some other object depends on the object being dropped, and they 
> usually succeed when they are retried after the other objects have been 
> dropped. By not retrying, some objects that were supposed to be dropped may 
> be left in the database.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to