You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Joe Weinstein (JIRA)" <ji...@apache.org> on 2008/01/29 22:28:34 UTC

[jira] Updated: (OPENJPA-505) CLONE -Incorrect Oracle DDL Generation for integer types since OPENJPA-455

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

Joe Weinstein updated OPENJPA-505:
----------------------------------

    Description: 
Since the fix for 455, I've found a problem. Oracle has a NUMBER 
column type, which may be specified with sizes, eg:  NUMBER(7),
or NUMBER(9,3), but may also be unsized,  eg: NUMBER. Since the
fix for 455, the new code is failing to  process the "NUMBER{0}" template
for non-sized  columns, so the DDL sent to the DBMS is like: 

CREATE TABLE ABSTRACTMAPPEDAPPIDSUPER ( ..., VERSN NUMBER{0}, ... 

which needless to say, dies. 

A change I made to DBDictionary, that fixed this for me is: 

    protected String insertSize(String typeName, String size) { 
        if(StringUtils.isEmpty(size)) { 

          int idx = typeName.indexOf("{0}"); // remove the size token if not needed... 
          if (idx != -1) { 
            return typeName.substring(0,idx); 
          } 
          return typeName; 
        } 

        int idx = typeName.indexOf("{0}"); 
... 


ie: 

Index: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java 
=================================================================== 
--- openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java (revision 610999) 
+++ openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java (working copy) 
@@ -1648,8 +1648,13 @@ 
      */ 
     protected String insertSize(String typeName, String size) { 
        if(StringUtils.isEmpty(size)) { 
- return typeName; 
- } 
+ 
+ int idx = typeName.indexOf("{0}"); 
+ if (idx != -1) { 
+ return typeName.substring(0,idx); 
+ } 
+ return typeName; 
+ } 

         int idx = typeName.indexOf("{0}"); 
         if (idx != -1) { 

Please let me know what you think, and how to absorb this 
change, or it's purpose. thanks, 
Joe Weinstein at BEA Systems 

  was:
Opening a JIRA report on Tim's behalf. 

I turned the schema tool loose on a MySQL production database this
afternoon and it failed. The essence of the problem appears that DDL was
being generated with a type declaration of this form:

int unsigned(10)

In MySQL, the proper form is:

int(10) unsigned

viz:

ALTER TABLE fubar MODIFY col1 int(10) unsigned;

Checking other options indicates that similar constructs such as CREATE
TABLE are likewise defective.

I looked at the svn trunk head source code in
org.apache.openjpa.jdbc.sql.MySQLDictionary.java and the parent class
DBDictionary.java. The offending method appears to be:

1508:     public String getTypeName(Column col)

This method has no override in MySQLDictionary, but apparently needs
one. I think it's a minor mod, but I'm not currently set up to build and
test in the environment where the offending database exists.

This is a SEVERE error. It causes generation of defective SQL for
SQL-generating options and causes live updates to schemas to fail.

I don't have a Jira login at present, so if someone could log this, it
would be appreciated.

  Thanks,

   Tim Holloway

        Summary: CLONE -Incorrect Oracle DDL Generation for integer types since OPENJPA-455   (was: CLONE -Incorrect MySQL DDL Generation for integer types)

> CLONE -Incorrect Oracle DDL Generation for integer types since OPENJPA-455 
> ---------------------------------------------------------------------------
>
>                 Key: OPENJPA-505
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-505
>             Project: OpenJPA
>          Issue Type: Bug
>    Affects Versions: 1.0.0, 1.0.1
>            Reporter: Joe Weinstein
>            Assignee: Michael Dick
>             Fix For: 1.1.0
>
>
> Since the fix for 455, I've found a problem. Oracle has a NUMBER 
> column type, which may be specified with sizes, eg:  NUMBER(7),
> or NUMBER(9,3), but may also be unsized,  eg: NUMBER. Since the
> fix for 455, the new code is failing to  process the "NUMBER{0}" template
> for non-sized  columns, so the DDL sent to the DBMS is like: 
> CREATE TABLE ABSTRACTMAPPEDAPPIDSUPER ( ..., VERSN NUMBER{0}, ... 
> which needless to say, dies. 
> A change I made to DBDictionary, that fixed this for me is: 
>     protected String insertSize(String typeName, String size) { 
>         if(StringUtils.isEmpty(size)) { 
>           int idx = typeName.indexOf("{0}"); // remove the size token if not needed... 
>           if (idx != -1) { 
>             return typeName.substring(0,idx); 
>           } 
>           return typeName; 
>         } 
>         int idx = typeName.indexOf("{0}"); 
> ... 
> ie: 
> Index: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java 
> =================================================================== 
> --- openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java (revision 610999) 
> +++ openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java (working copy) 
> @@ -1648,8 +1648,13 @@ 
>       */ 
>      protected String insertSize(String typeName, String size) { 
>         if(StringUtils.isEmpty(size)) { 
> - return typeName; 
> - } 
> + 
> + int idx = typeName.indexOf("{0}"); 
> + if (idx != -1) { 
> + return typeName.substring(0,idx); 
> + } 
> + return typeName; 
> + } 
>          int idx = typeName.indexOf("{0}"); 
>          if (idx != -1) { 
> Please let me know what you think, and how to absorb this 
> change, or it's purpose. thanks, 
> Joe Weinstein at BEA Systems 

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