openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jeremy Bauer (JIRA)" <>
Subject [jira] Resolved: (OPENJPA-1189) Column names do not contain delimiters when obtained from DatabaseMetaData
Date Wed, 24 Mar 2010 18:19:27 GMT


Jeremy Bauer resolved OPENJPA-1189.

       Resolution: Fixed
    Fix Version/s: 2.0.0
         Assignee: Jeremy Bauer  (was: Dianne Richards)

This issue was resolved under OPENJPA-1115.  The OpenJPA naming utility detects when identifiers
returned from dbmd require delimiters.

> Column names do not contain delimiters when obtained from DatabaseMetaData
> --------------------------------------------------------------------------
>                 Key: OPENJPA-1189
>                 URL:
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: jdbc
>    Affects Versions: 2.0.0
>         Environment: DB2 (could exist on other databases)
>            Reporter: Michael Dick
>            Assignee: Jeremy Bauer
>             Fix For: 2.0.0
>         Attachments: patch.txt
> The DatabaseMetaData returned by DB2 does not include delimiters for column names which
include whitespace. This causes potential duplicate column names if we merge into an existing
> The problem can be illustrated by running the TestManualDelimitedJoinAnnotations test
twice sequentially. The first time the test is executed the database will be clean (presumably)
and everything will work. Subsequent executions read the existing column information from
the database (non delimited) and end up creating a duplicate column.
> Example stacktrace : 
>  <openjpa-2.0.0-SNAPSHOT-r422266:794075M nonfatal general error> org.apache.openjpa.persistence.PersistenceException:
DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=);entityCs_c id OTHER;<references_spec>,
DRIVER=3.50.152 {stmnt 10751758 CREATE TABLE "delim id"."c d" ("entityCs_c id" INTEGER, ENTITYDS_ID
INTEGER, entityCs_c id OTHER)} [code=-104, state=42601]
> 	at org.apache.openjpa.jdbc.meta.MappingTool.record(
> 	at org.apache.openjpa.jdbc.meta.MappingTool.record(
>        <snip>
> To resolve the problem we can detect a column / table / schema name which contains whitespace
and add the appropriate delimiters (when the name is provided by the database). One place
to make this change is in DBDictionary.newColumn() 
>     protected Column newColumn(ResultSet colMeta)
>         throws SQLException {
>         Column c = new Column();
>         c.setSchemaName(colMeta.getString("TABLE_SCHEM"));
>         c.setTableName(colMeta.getString("TABLE_NAME"));
>         c.setName(colMeta.getString("COLUMN_NAME"));  // detect whether we need delimiters
and add them
> It's also worth noting that the testcase drops the offending table and then recreates
it. There may be a larger issue where the metadata is cached improperly (could be DB2 specific).

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

View raw message