You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by ka...@apache.org on 2009/02/19 23:50:25 UTC

svn commit: r746041 - /ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/JdbcExternalVariableModule.java

Author: karthick
Date: Thu Feb 19 22:50:24 2009
New Revision: 746041

URL: http://svn.apache.org/viewvc?rev=746041&view=rev
Log:
Downcast parameter values so that it matches BAM table definition.

Modified:
    ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/JdbcExternalVariableModule.java

Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/JdbcExternalVariableModule.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/JdbcExternalVariableModule.java?rev=746041&r1=746040&r2=746041&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/JdbcExternalVariableModule.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/JdbcExternalVariableModule.java Thu Feb 19 22:50:24 2009
@@ -18,17 +18,21 @@
  */
 package org.apache.ode.bpel.extvar.jdbc;
 
+import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.sql.Connection;
 import java.sql.DatabaseMetaData;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.sql.Types;
 import java.util.HashMap;
 import java.util.List;
 
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
 import javax.sql.DataSource;
+import javax.swing.text.StyleContext.SmallAttributeSet;
 import javax.xml.namespace.QName;
 
 import org.apache.commons.logging.Log;
@@ -335,7 +339,7 @@
                 if (val == null)
                     stmt.setNull(idx, c.dataType);
                 else
-                    stmt.setObject(idx, val);
+                    stmt.setObject(idx, downcastValue(val, c.dataType));
                 idx++;
             }
 
@@ -345,7 +349,7 @@
                 if (val == null)
                     stmt.setNull(idx, ck.dataType);
                 else
-                    stmt.setObject(idx, val);
+                    stmt.setObject(idx, downcastValue(val, ck.dataType));
                 idx++;
             }
             return stmt.executeUpdate();
@@ -355,7 +359,127 @@
         }
     }
 
-    RowVal execSelect(DbExternalVariable dbev, Locator locator) throws SQLException, ExternalVariableModuleException {
+    private Object downcastValue(Object value, int dataType) {
+    	if (value == null) {
+    		return null;
+    	}
+    	// Try down casting the value as per its column type.
+    	try {
+        	// Some JDBC 4.0 types have been ignored to avoid compilation errors 
+	    	switch (dataType) {
+	    	case Types.ARRAY:
+	    		break;
+	    	case Types.BIGINT:
+	    		if (!(value instanceof BigInteger)) {
+	    			value = new BigDecimal(value.toString()).longValue();
+	    		}
+	    		break;
+	    	case Types.BINARY:
+	    		break;
+	    	case Types.BIT:
+	    		if (!(value instanceof Boolean)) {
+	    			value = new Boolean(value.toString());
+	    		}
+	    		break;
+	    	case Types.BLOB:
+	    		break;
+	    	case Types.BOOLEAN:
+	    		if (!(value instanceof Boolean)) {
+	    			value = new Boolean(value.toString());
+	    		}
+	    		break;
+	    	case Types.CHAR:
+	    		break;
+	    	case Types.CLOB:
+	    		break;
+	    	case Types.DATALINK:
+	    		break;
+	    	case Types.DATE:    		
+	    		break;
+	    	case Types.DECIMAL:
+	    		if (!(value instanceof BigDecimal)) {
+	    			value = new BigDecimal(value.toString());
+	    		}
+	    		break;
+	    	case Types.DISTINCT:
+	    		break;
+	    	case Types.DOUBLE:
+	    		if (!(value instanceof Double)) {
+	    			value = Double.valueOf(value.toString()).doubleValue();
+	    		}
+	    		break;
+	    	case Types.FLOAT:
+	    		if (!(value instanceof Float)) {
+	    			value = Float.valueOf(value.toString()).floatValue();
+	    		}
+	    		break;
+	    	case Types.INTEGER:
+	    		if (!(value instanceof Integer)) {
+	    			value = Double.valueOf(value.toString()).intValue();
+	    		}
+	    		break;
+	    	case Types.JAVA_OBJECT:
+	    		break;
+//	    	case Types.LONGNVARCHAR:
+//	    		break;
+	    	case Types.LONGVARBINARY:
+	    		break;
+	    	case Types.LONGVARCHAR:
+	    		break;
+//	    	case Types.NCHAR:
+//	    		break;
+//	    	case Types.NCLOB:
+//	    		break;
+	    	case Types.NUMERIC:
+	    		if (!(value instanceof BigDecimal)) {
+	    			value = new BigDecimal(value.toString());
+	    		}
+	    		break;
+//	    	case Types.NVARCHAR:
+//	    		break;
+	    	case Types.OTHER:
+	    		break;
+	    	case Types.REAL:
+	    		if (!(value instanceof Double)) {
+	    			value = Float.valueOf(value.toString()).floatValue();
+	    		}
+	    		break;
+	    	case Types.REF:
+	    		break;
+//	    	case Types.ROWID:
+//	    		break;
+	    	case Types.SMALLINT:
+	    		if (!(value instanceof Short)) {
+	    			value = new Short(value.toString()).shortValue();
+	    		}
+	    		break;
+//	    	case Types.SQLXML:
+//	    		break;
+	    	case Types.STRUCT:
+	    		break;
+	    	case Types.TIME:
+	    		break;
+	    	case Types.TIMESTAMP:
+	    		break;
+	    	case Types.TINYINT:
+	    		if (!(value instanceof Short)) {
+	    			value = new Short(value.toString()).shortValue();
+	    		}
+	    		break;
+	    	case Types.VARBINARY:
+	    		break;
+	    	case Types.VARCHAR:
+	    		break;
+	    	default:    	
+	    		break;
+	    	}
+    	} catch (Exception e) {
+    		// couldn't cast... let's just use original value object
+    	}
+    	return value;
+	}
+
+	RowVal execSelect(DbExternalVariable dbev, Locator locator) throws SQLException, ExternalVariableModuleException {
         RowKey rowkey = dbev.keyFromLocator(locator);
         if (__log.isDebugEnabled()) __log.debug("execSelect: " + rowkey);