Author: mikedd
Date: Sun Mar  1 20:38:21 2009
New Revision: 749090

URL: http://svn.apache.org/viewvc?rev=749090&view=rev
Log:
OPENJPA-213. Scale and precision specified for doubles upgrade column type to 
NUMERIC.

Modified:
    
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingInfo.java
    
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/mapping/TestPrecisionMapping.java

Modified: 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingInfo.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingInfo.java?rev=749090&r1=749089&r2=749090&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingInfo.java
 (original)
+++ 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingInfo.java
 Sun Mar  1 20:38:21 2009
@@ -654,8 +654,18 @@
         // user-given specifics to override it
         int type = tmplate.getType();
         int size = tmplate.getSize();
-        if (type == Types.OTHER)
-            type = dict.getJDBCType(tmplate.getJavaType(), size == -1);
+        if (type == Types.OTHER) {
+            int precis = 0;
+            int scale = 0;
+            if(given != null) {
+                precis = given.getSize();
+                scale = given.getDecimalDigits();
+            }
+            type =
+                dict.getJDBCType(tmplate.getJavaType(), size == -1, precis,
+                    scale);
+        }
+            
         boolean ttype = true;
         int otype = type;
         String typeName = tmplate.getTypeName();

Modified: 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java?rev=749090&r1=749089&r2=749090&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
 (original)
+++ 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
 Sun Mar  1 20:38:21 2009
@@ -1479,12 +1479,21 @@
     /////////
     // Types
     /////////
-
+    
     /**
      * Return the preferred {...@link Types} constant for the given
      * {...@link JavaTypes} or {...@link JavaSQLTypes} constant.
      */
     public int getJDBCType(int metaTypeCode, boolean lob) {
+        return getJDBCType(metaTypeCode, lob, 0, 0);
+    }
+
+    /**
+     * Return the preferred {...@link Types} constant for the given
+     * {...@link JavaTypes} or {...@link JavaSQLTypes} constant.
+     */
+    public int getJDBCType(int metaTypeCode, boolean lob, int precis, 
+        int scale) {
         if (lob) {
             switch (metaTypeCode) {
                 case JavaTypes.STRING:
@@ -1510,10 +1519,20 @@
                 return getPreferredType(Types.CHAR);
             case JavaTypes.DOUBLE:
             case JavaTypes.DOUBLE_OBJ:
-                return getPreferredType(Types.DOUBLE);
+                if(precis > 0 || scale > 0) {
+                    return getPreferredType(Types.NUMERIC);
+                }
+                else {
+                    return getPreferredType(Types.DOUBLE);
+                }
             case JavaTypes.FLOAT:
             case JavaTypes.FLOAT_OBJ:
-                return getPreferredType(Types.REAL);
+                if(precis > 0 || scale > 0) {
+                    return getPreferredType(Types.NUMERIC);
+                }
+                else {
+                    return getPreferredType(Types.REAL);
+                }
             case JavaTypes.INT:
             case JavaTypes.INT_OBJ:
                 return getPreferredType(Types.INTEGER);

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/mapping/TestPrecisionMapping.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/mapping/TestPrecisionMapping.java?rev=749090&r1=749089&r2=749090&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/mapping/TestPrecisionMapping.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/mapping/TestPrecisionMapping.java
 Sun Mar  1 20:38:21 2009
@@ -40,18 +40,18 @@
         testBigDecimalMapping("", Types.NUMERIC, 0, 0);
     }
     
-    public void testPrecisionOnly() { 
-        // testDoubleMapping("Precis", Types.NUMERIC, 10, 0);
+    public void testPrecisionOnly() {
+        testDoubleMapping("Precis", Types.NUMERIC, 10, 0);
         testBigDecimalMapping("Precis", Types.NUMERIC, 10, 0);
     }
-    
-    public void testScaleOnly() { 
-        // testDoubleMapping("Scale", Types.NUMERIC, 0 , 10);
+
+    public void testScaleOnly() {
+        testDoubleMapping("Scale", Types.NUMERIC, 0, 10);
         testBigDecimalMapping("Scale", Types.NUMERIC, 0, 10);
     }
     
     public void testPrecisionAndScale() { 
-//        testDoubleMapping("PrecisScale", Types.NUMERIC,10,10);
+        testDoubleMapping("PrecisScale", Types.NUMERIC,10,10);
         testBigDecimalMapping("PrecisScale", Types.NUMERIC, 10, 10);
     }
     
@@ -83,5 +83,4 @@
             assertEquals(expectedScale, cols[0].getDecimalDigits());
         }
     }
-    
 }


Reply via email to