Author: tomdz
Date: Wed Jan  4 15:06:55 2006
New Revision: 366015

URL: http://svn.apache.org/viewcvs?rev=366015&view=rev
Log:
Added fix for BigDecimal values that are inserted into the database because 
Statement.setObject(index/name,object,datatype) uses a scale value of 0 for 
NUMERIC/DECIMAL columns; therefore the setBigDecimal method is now used instead

Modified:
    
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java

Modified: 
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java
URL: 
http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java?rev=366015&r1=366014&r2=366015&view=diff
==============================================================================
--- 
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java 
(original)
+++ 
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java 
Wed Jan  4 15:06:55 2006
@@ -664,7 +664,17 @@
 
             for (Iterator iter = parameters.iterator(); iter.hasNext(); 
paramIdx++)
             {
-                statement.setObject(paramIdx, iter.next());
+                Object arg = iter.next();
+
+                if (arg instanceof BigDecimal)
+                {
+                    // to avoid scale problems because setObject assumes a 
scale of 0
+                    statement.setBigDecimal(paramIdx, (BigDecimal)arg);
+                }
+                else
+                {
+                    statement.setObject(paramIdx, arg);
+                }
             }
             resultSet = statement.executeQuery();
             answer    = createResultSetIterator(model, resultSet, queryHints);
@@ -787,7 +797,17 @@
 
             for (Iterator iter = parameters.iterator(); iter.hasNext(); 
paramIdx++)
             {
-                statement.setObject(paramIdx, iter.next());
+                Object arg = iter.next();
+
+                if (arg instanceof BigDecimal)
+                {
+                    // to avoid scale problems because setObject assumes a 
scale of 0
+                    statement.setBigDecimal(paramIdx, (BigDecimal)arg);
+                }
+                else
+                {
+                    statement.setObject(paramIdx, arg);
+                }
             }
             resultSet = statement.executeQuery();
 
@@ -1523,7 +1543,7 @@
         }
         else if (value instanceof BigDecimal)
         {
-            // Derby doesn't like BigDecimal's in setObject
+            // setObject assumes a scale of 0, so we rather use the typed 
setter
             statement.setBigDecimal(sqlIndex, (BigDecimal)value);
         }
         else if (value instanceof Float)


Reply via email to