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