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

Rick Hillegas updated DERBY-5488:
---------------------------------

    Attachment: derby-5488-10-aa-metadataTypo.diff

Attaching derby-5488-10-aa-metadataTypo.diff. This a simple candidate patch to 
change SCOPE_CATLOG to SCOPE_CATALOG. Regression tests pass cleanly on this 
patch.

Before discussing this patch and alternatives we might consider, I want to 
summarize my understanding of this problem:

A) The JDBC expert group regards this as fixing a typo in the javadoc. I 
believe that some other databases recognized the typo for what it was and 
always named the column SCOPE_CATALOG. Derby, however, hewed closely to the 
published javadoc and called the column SCOPE_CATLOG.

B) For those other databases, there is no functional change. A documentation 
typo has simply been corrected. For Derby, however, the change creates a 
backward incompatibility.

C) Derby must break one of its important constraints. There is no way that we 
can conform to the corrected JDBC javadoc and avoid a backward incompatibility.

D) I think that the backward incompatibility is quite minor, nevertheless. The 
column in question carries no meaning for Derby. The column only has meaning 
for databases which implement both catalogs and reference types. For Derby, the 
column always contains a null. I doubt that (m)any Derby users inspect this 
column at all, let alone by name.

Here are the user-visible effects of some possible solutions:

1) Based on engine version - The column is called SCOPE_CATALOG if  
DatabaseMetaData.getDatabaseMajorVersion() and 
DatabaseMetaData.getDatabaseMinorVersion() report that the engine is at Derby 
10.9 or higher. Otherwise, the column is called SCOPE_CATLOG. This is the 
approach taken by this patch.

2) Based on client version - The column is called SCOPE_CATALOG if  
DatabaseMetaData.getDriverMajorVersion() and 
DatabaseMetaData.getDriverMinorVersion() report that the client is at Derby 
10.9 or higher. Otherwise, the column is called SCOPE_CATLOG.

3) Based on JDBC driver version - The column is called SCOPE_CATALOG if 
DatabaseMetaData.getJDBCMajorVersion() and 
DatabaseMetaData.getJDBCMinorVersion() report that the driver is at JDBC 4.1 or 
higher. Otherwise, the column is called SCOPE_CATLOG.

Even fancier solutions are possible. They involve combinations of the JDBC and 
driver versions at the client and engine. I believe that the solutions listed 
above give rise to straightforward workarounds for applications affected by 
this change. They are easy to explain. The fancier solutions push more 
complexity into the application and/or involve backporting tricky code into 
older Derby branches.

Of the straightforward solutions, I opted for (1) because it was the easiest to 
implement. A casual look at options (2) and (3) suggests that they involve 
adding some potentially tricky code to our JDBC drivers. I did not think that 
this problem warranted the additional complexity.

But those are my opinions. I am open to arguments that we should solve this 
problem a different way.

Thanks in advance for your feedback.

Touches the following files:

------------

M       java/engine/org/apache/derby/impl/jdbc/metadata.properties
M       java/engine/org/apache/derby/impl/jdbc/EmbedDatabaseMetaData.java

Actual change to the JDBC metadata.

------------

M       
java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/DatabaseMetaDataTest.java

Corresponding change to the regression test for this metadata.

                
> Add remaining JDBC 4.1 bits which did not appear in the Java 7 javadoc.
> -----------------------------------------------------------------------
>
>                 Key: DERBY-5488
>                 URL: https://issues.apache.org/jira/browse/DERBY-5488
>             Project: Derby
>          Issue Type: Improvement
>          Components: JDBC, SQL
>    Affects Versions: 10.9.0.0
>            Reporter: Rick Hillegas
>            Assignee: Rick Hillegas
>         Attachments: JDBC_4.1_Supplement.html, 
> derby-5488-01-aa-objectMappingAndConversion.diff, 
> derby-5488-02-aa-fixBigInteger.diff, 
> derby-5488-03-ac-moveDecimalSetterGetterAndTest.diff, 
> derby-5488-04-aa-fixBigIntegerDecimal.diff, 
> derby-5488-05-ad-limitOffset.diff, derby-5488-06-aa-limitOffsetTests.diff, 
> derby-5488-07-aa-booleanObjects.diff, 
> derby-5488-08-aa-extraLimitOffsetTest.diff, 
> derby-5488-09-aa-jdbcMinorVersion.diff, derby-5488-10-aa-metadataTypo.diff, 
> z.java
>
>
> In addition to the JDBC 4.1 bits which were visible in the Java 7 javadoc, a 
> couple other items appear in the JDBC 4.1 Maintenance Review spec. This spec 
> has been published on the JCP website at 
> http://download.oracle.com/otndocs/jcp/jdbc-4_1-mrel-eval-spec/index.html. I 
> will attach a functional spec for the remaining bits.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to