You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "A B (JIRA)" <de...@db.apache.org> on 2005/05/26 23:20:56 UTC

[jira] Closed: (DERBY-107) Add Support for ODBC Metadata Calls to Derby

     [ http://issues.apache.org/jira/browse/DERBY-107?page=all ]
     
A B closed DERBY-107:
---------------------


> Add Support for ODBC Metadata Calls to Derby
> --------------------------------------------
>
>          Key: DERBY-107
>          URL: http://issues.apache.org/jira/browse/DERBY-107
>      Project: Derby
>         Type: Improvement
>   Components: Network Server
>  Environment: Connection to Derby Network Server with an ODBC driver.
>     Reporter: A B
>     Assignee: A B
>      Fix For: 10.1.0.0
>  Attachments: derby-107.I.patch, derby-107.II.patch, derby-107.III.patch
>
> BACKGROUND:
> Derby has a defined set of SQL statements that are used to return metadata about a given database.  These statements are the basis on which many of the Java methods in the java.sql.DatabaseMetaData class are implemented.  For example, DatabaseMetaData.getColumns() is ultimately mapped to a call to a SQL statement called "getColumns" that is defined in the file: 
> java\engine\org\apache\derby\impl\jdbc\metadata.properties 
> As can be seen from its definition, this statement returns a result set that agrees with the result set defined for the Java getColumns() method. 
> The ODBC equivalent to DatabaseMetaData is a set of ODBC methods that offer similar functionality.  For example, the ODBC equivalent to "DatabaseMetaData.getColumns()" is the ODBC call "SQLColumns()". 
> PROBLEM: 
> Right now, all metadata SQL statements return result sets that match the Java/JDBC standard, since in the past, Derby has only been used by JDBC drivers.  However, now that Cloudscape/Derby has beta support for ODBC clients (via Network Server; see http://www-106.ibm.com/developerworks/db2/library/techarticle/dm-0409cline2/index.html), and since the expected result sets for ODBC are different in some ways than those for JDBC, Derby metadata calls need to expand to accommodate ODBC clients. 
> An example of the need for this change can be found using Microsoft Access: if one tries to do a "table link" or "import" to a Derby database via Network Server (using the DB2 ODBC driver), the attempt will fail with "Reserved Error (-7734); there is no message for this error".  It turns out that the cause of this problem is the metadata result set mentioned above.
> PROPOSAL:
> What I would like to propose is that we add support in the Derby engine to allow the metadata methods to return result sets in two forms: one that conforms to the JDBC standard (which is what we do currently; that would be the default), and another that conforms to the ODBC standard.  For more info on the latter, see the following link:
> http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcsqlcolumns.asp
> Metadata calls over Network Server are executed via system procedures that are built-in to Derby--and these system procedures then map to the SQL statements mentioned above.  The procedures already have an "OPTION" parameter that accepts a string parameter, so what I would propose is that we add logic to recognize a "DATATYPE" keyword as part of this string--basically, if we see the string "DATATYPE='ODBC'" in the OPTION parameter, then the stored procedure would map to a new set of SQL statements in the "metadata.properties" file--and these new statements would return result sets that conform to the ODBC standard.  Otherwise, if "DATATYPE='JDBC'" or else no DATATYPE keyword is specified, the current SQL metadata statements would be used by default.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira