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

Donald Woods updated OPENJPA-1189:
----------------------------------

    Affects Version/s:     (was: 2.0.0)
                       2.0.0-beta
        Fix Version/s:     (was: 2.0.0)
                       2.0.0-beta

show as being fixed in 2.0.0-beta

> Column names do not contain delimiters when obtained from DatabaseMetaData
> --------------------------------------------------------------------------
>
>                 Key: OPENJPA-1189
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1189
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: jdbc
>    Affects Versions: 2.0.0-beta
>         Environment: DB2 (could exist on other databases)
>            Reporter: Michael Dick
>            Assignee: Jeremy Bauer
>             Fix For: 2.0.0-beta
>
>         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 schema.
> 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(MappingTool.java:553)
>       at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:453)
>        <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.

Reply via email to