You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by cu...@apache.org on 2009/12/14 22:31:34 UTC

svn commit: r890486 - in /openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/identity/

Author: curtisr7
Date: Mon Dec 14 21:31:31 2009
New Revision: 890486

URL: http://svn.apache.org/viewvc?rev=890486&view=rev
Log:
OPENJPA-1224: Updating DBDictionaries to support setting precision on a BigDecimal column.

Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/AbstractDB2Dictionary.java
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MySQLDictionary.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/identity/TestSQLBigDecimalId.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/AbstractDB2Dictionary.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/AbstractDB2Dictionary.java?rev=890486&r1=890485&r2=890486&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/AbstractDB2Dictionary.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/AbstractDB2Dictionary.java Mon Dec 14 21:31:31 2009
@@ -29,7 +29,10 @@
     public int varcharCastLength = 1000;
 
     public AbstractDB2Dictionary() {
-        numericTypeName = "DOUBLE";
+    	// http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.apdv.java.doc
+    	//	/doc/rjvjdata.htm
+		// http://db.apache.org/derby/docs/10.3/ref/rrefsqlj12362.html
+    	numericTypeName = "DECIMAL";
         bitTypeName = "SMALLINT";
         smallintTypeName = "SMALLINT";
         tinyintTypeName = "SMALLINT";
@@ -69,6 +72,9 @@
         // the equivalent "X JOIN Y ON 1 = 1"
         crossJoinClause = "JOIN";
         requiresConditionForCrossJoin = true;
+        
+        // DB2 / Derby allows precision to be set on a DECIMAL column.
+        fixedSizeTypeNameSet.remove("DECIMAL");
     }
 
     public void indexOf(SQLBuffer buf, FilterValue str, FilterValue find,

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MySQLDictionary.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MySQLDictionary.java?rev=890486&r1=890485&r2=890486&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MySQLDictionary.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MySQLDictionary.java Mon Dec 14 21:31:31 2009
@@ -145,6 +145,8 @@
             "ZEROFILL" }));
 
         delimiter = "`";
+        
+        fixedSizeTypeNameSet.remove("NUMERIC");
     }
 
     public void connectedConfiguration(Connection conn) throws SQLException {

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/identity/TestSQLBigDecimalId.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/identity/TestSQLBigDecimalId.java?rev=890486&r1=890485&r2=890486&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/identity/TestSQLBigDecimalId.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/identity/TestSQLBigDecimalId.java Mon Dec 14 21:31:31 2009
@@ -24,10 +24,6 @@
 
 import junit.textui.TestRunner;
 
-import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
-import org.apache.openjpa.jdbc.sql.DBDictionary;
-import org.apache.openjpa.jdbc.sql.MySQLDictionary;
-import org.apache.openjpa.persistence.test.AllowFailure;
 import org.apache.openjpa.persistence.test.SingleEMFTestCase;
 
 /**
@@ -48,18 +44,6 @@
         e.setId(decimal);
         e.setData(1);
         
-        // trigger schema definition
-        JDBCConfiguration jdbccfg = (JDBCConfiguration) emf.getConfiguration();
-        DBDictionary dict = jdbccfg.getDBDictionaryInstance();
-        // currently BigDecimal is mapped to NUMERIC column type. This causes
-        // truncation error from MySQL. Without knowing the implication of changing the
-        // mapping of BigDecimal universally to DOUBLE, I will just change the mapping
-        // for this test case.
-        if (dict instanceof MySQLDictionary) {
-            dict.numericTypeName = "DOUBLE";
-        }
-
-        
         EntityManager em = emf.createEntityManager();
         em.getTransaction().begin();
         em.persist(e);
@@ -74,7 +58,6 @@
         
     }
     
-    @AllowFailure
     public void testQuery() {
         int data = 156;
         BigDecimal decimal = new BigDecimal(1234);
@@ -91,6 +74,7 @@
             (SQLBigDecimalIdEntity) em.createQuery("SELECT a FROM SQLBigDecimalIdEntity a WHERE a.data=" + data)
                 .getSingleResult();
         
+        // This would fail prior to OPENJPA-1224.
         assertEquals(e, e2);
         em.close();