Hi Tom
Could you take a look at the code changes that I am sending as part of
this email. The issues that are being addressed as part of these changes
are
1. Issue 98: DDL generation should not generate NUMBER sql type for a
float Java type.
Files affected :
entity-persistence/src/java/oracle/toplink/essentials/platform/database/oracle/OraclePlatform.java
2. Issue 104: Wrong column type defined for Long using java2db in Derby.
Files affected :
entity-persistence/src/java/oracle/toplink/essentials/platform/database/DerbyPlatform.java
3. Additionally changed the PostgreSQLPlatform too to ensure that the
Long and Number fields are created with the correct datatypes.
Files affected :
entity-persistence/src/java/oracle/toplink/essentials/platform/database/PostgreSQLPlatform.java
4. Based on your previous email, as the spec has been changed to ensure
that the initialValue of a sequence is 1, ensured that changes are made
to the code to reflect this.
Files affected :
entity-persistence/src/java/oracle/toplink/essentials/sequencing/Sequence.java
entity-persistence/src/java/oracle/toplink/essentials/tools/schemaframework/OracleSequenceDefinition.java
Have also attached the cvs diff messages for these files. I have run
entity-persistence-tests against Oracle for these changes. Additionally
have run the "datatypes" test case that has been attached to the issue
report against Oracle , Derby and PostgreSQL.
Thanks
Pramod
Index: src/java/oracle/toplink/essentials/platform/database/DerbyPlatform.java
===================================================================
RCS file: /cvs/glassfish/entity-persistence/src/java/oracle/toplink/essentials/platform/database/DerbyPlatform.java,v
retrieving revision 1.2
diff -r1.2 DerbyPlatform.java
23a24
> import oracle.toplink.essentials.internal.databaseaccess.FieldTypeDefinition;
33a35
> import java.util.Hashtable;
183a186,209
>
> protected Hashtable buildFieldTypes() {
> Hashtable fieldTypeMapping = new Hashtable();
>
> fieldTypeMapping.put(Boolean.class, new FieldTypeDefinition("SMALLINT DEFAULT 0", false));
>
> fieldTypeMapping.put(Integer.class, new FieldTypeDefinition("INTEGER", false));
> fieldTypeMapping.put(Long.class, new FieldTypeDefinition("BIGINT", false));
> fieldTypeMapping.put(Float.class, new FieldTypeDefinition("FLOAT", false));
> fieldTypeMapping.put(Double.class, new FieldTypeDefinition("FLOAT", false));
> fieldTypeMapping.put(Short.class, new FieldTypeDefinition("SMALLINT", false));
> fieldTypeMapping.put(Byte.class, new FieldTypeDefinition("SMALLINT", false));
> fieldTypeMapping.put(java.math.BigInteger.class, new FieldTypeDefinition("BIGINT", false));
> fieldTypeMapping.put(java.math.BigDecimal.class, new FieldTypeDefinition("DECIMAL(38)", false));
> fieldTypeMapping.put(Number.class, new FieldTypeDefinition("DECIMAL(38)", false));
>
> fieldTypeMapping.put(String.class, new FieldTypeDefinition("VARCHAR", 255));
> fieldTypeMapping.put(Character.class, new FieldTypeDefinition("CHAR", 1));
> fieldTypeMapping.put(Byte[].class, new FieldTypeDefinition("BLOB", 64000));
> fieldTypeMapping.put(Character[].class, new FieldTypeDefinition("CLOB", 64000));
>
> fieldTypeMapping.put(java.sql.Date.class, new FieldTypeDefinition("DATE", false));
> fieldTypeMapping.put(java.sql.Time.class, new FieldTypeDefinition("TIME", false));
> fieldTypeMapping.put(java.sql.Timestamp.class, new FieldTypeDefinition("TIMESTAMP", false));
184a211,212
> return fieldTypeMapping;
> }
Index: src/java/oracle/toplink/essentials/platform/database/PostgreSQLPlatform.java
===================================================================
RCS file: /cvs/glassfish/entity-persistence/src/java/oracle/toplink/essentials/platform/database/PostgreSQLPlatform.java,v
retrieving revision 1.1
diff -r1.1 PostgreSQLPlatform.java
176c176
< fieldTypeMapping.put(Long.class, new FieldTypeDefinition("INTEGER", false));
---
> fieldTypeMapping.put(Long.class, new FieldTypeDefinition("BIGINT", false));
182,183c182,183
< fieldTypeMapping.put(java.math.BigDecimal.class, new FieldTypeDefinition("DECIMAL", 15));
< fieldTypeMapping.put(Number.class, new FieldTypeDefinition("DECIMAL", 15));
---
> fieldTypeMapping.put(java.math.BigDecimal.class, new FieldTypeDefinition("DECIMAL(38)", false));
> fieldTypeMapping.put(Number.class, new FieldTypeDefinition("DECIMAL(15)", false));
Index: src/java/oracle/toplink/essentials/platform/database/oracle/OraclePlatform.java
===================================================================
RCS file: /cvs/glassfish/entity-persistence/src/java/oracle/toplink/essentials/platform/database/oracle/OraclePlatform.java,v
retrieving revision 1.4
diff -r1.4 OraclePlatform.java
145,146c145,146
< fieldTypeMapping.put(Float.class, new FieldTypeDefinition("NUMBER", 19, 4));
< fieldTypeMapping.put(Double.class, new FieldTypeDefinition("NUMBER", 19, 4));
---
> fieldTypeMapping.put(Float.class, new FieldTypeDefinition("NUMBER"));
> fieldTypeMapping.put(Double.class, new FieldTypeDefinition("NUMBER"));
Index: src/java/oracle/toplink/essentials/sequencing/Sequence.java
===================================================================
RCS file: /cvs/glassfish/entity-persistence/src/java/oracle/toplink/essentials/sequencing/Sequence.java,v
retrieving revision 1.3
diff -r1.3 Sequence.java
67c67
< protected int initialValue = 0;
---
> protected int initialValue = 1;
Index: src/java/oracle/toplink/essentials/tools/schemaframework/OracleSequenceDefinition.java
===================================================================
RCS file: /cvs/glassfish/entity-persistence/src/java/oracle/toplink/essentials/tools/schemaframework/OracleSequenceDefinition.java,v
retrieving revision 1.6
diff -r1.6 OracleSequenceDefinition.java
51,53c51
< // Oracle requires the sequence start value to be greater than 0
< int startValue = start == 0 ? start : 1;
< setStart(startValue);
---
> setStart(start);