[ 
https://issues.apache.org/jira/browse/DERBY-6968?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16196273#comment-16196273
 ] 

Rick Hillegas commented on DERBY-6968:
--------------------------------------

Hey Bryan,

Thanks for pointing out the ordering on the SCOPE column. The queries are not 
ordered by returned column name, which is what the test needs. They are not 
ordered by SCOPE either.

I can only guess at the purpose served by getBestRowIdentifier(). Maybe 
object-relational-mappers use the method in order to dream up object 
identifiers for updating/deleting rows in databases which don't have a 
system-supplied ROWID pseudo column. The following link was slightly useful: 
http://media.datadirect.com/download/docs/jdbc/alljdbc/index.html#page/jdbcconnect/using-getbestrowidentifier.html

Adding an ordering by SCOPE to DatabaseMetaData.getBestRowIdentifier() is 
probably warranted since it would bring us into better compliance with the JDBC 
contract. I don't think that it will improve the behavior of this test, though. 
I do see that similar problems were addressed by DERBY-6623. For those 
problems, Dag had another solution, a variation on (1):

3) Use JDBC.assertUnorderedResultSet()

Changing the order of the results returned by 
DatabaseMetaData.getBestRowIdentifier() would probably break the upgrade tests. 
That is because they end up running the current DatabaseMetaDataTest against 
old engines, and the old engines would still be returning results in the old 
order. We would still need to do (1) or (3) I think.


> Instability in DatabaseMetaDataTest.testGetBestRowIdentifier
> ------------------------------------------------------------
>
>                 Key: DERBY-6968
>                 URL: https://issues.apache.org/jira/browse/DERBY-6968
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC, Test
>    Affects Versions: 10.14.1.0
>            Reporter: Rick Hillegas
>         Attachments: 10.14.1.testResults.0-failures
>
>
> Ingo reports instabilities in his platform tests of the 10.14.1.0 release 
> candidate. He sees intermittent failures in 
> DatabaseMetaDataTest.testGetBestRowIdentifier and then subsequent failures 
> due to poor test case isolation in that test. The test case fails because 
> DatabaseMetaData.getBestRowIdentifier() sometimes returns rows in a different 
> order than the test expects.
> The JDBC contract for that method does not specify an order for the returned 
> rows. ORDER BY clauses appear on some but not all the catalog queries in 
> metadata.properties which define the Derby result.
> I see two ways to address this issue:
> 1) The test could be fixed so that it hand-sorts the returned rows in order 
> to guarantee deterministic results.
> 2) ORDER BY clauses could be added to all the implicated metadata queries.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to