persistence@glassfish.java.net

REquest for review of code changes

From: Pramod Gopinath <Pramod.Gopinath_at_Sun.COM>
Date: Tue, 14 Feb 2006 12:11:44 -0800

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);