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.