You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by ev...@apache.org on 2009/12/10 12:30:19 UTC

svn commit: r889196 - /cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/types/UtilDateType.java

Author: evgeny
Date: Thu Dec 10 11:30:18 2009
New Revision: 889196

URL: http://svn.apache.org/viewvc?rev=889196&view=rev
Log:
CAY-1323 Fix explicit type mapping from oracle.sql.TIMESTAMP to JDBC Timestamp in Result of query on Oracle (Can be related with other DB special types handling).

* Part of solution in 3.1 branch that is changing UtillDateType behavior, Not to use getObject() from JDTS driver that can return Object of various * types.

Modified:
    cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/types/UtilDateType.java

Modified: cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/types/UtilDateType.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/types/UtilDateType.java?rev=889196&r1=889195&r2=889196&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/types/UtilDateType.java (original)
+++ cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/types/UtilDateType.java Thu Dec 10 11:30:18 2009
@@ -25,8 +25,6 @@
 import java.sql.Types;
 import java.util.Date;
 
-import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.dba.TypesMapping;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.validation.ValidationResult;
 
@@ -87,28 +85,17 @@
                 val = rs.getTime(index);
                 break;
             default:
-                // here the driver can "surpirse" us
-                // check the type of returned value...
-                Object object = rs.getObject(index);
-
-                if (object != null && !(object instanceof Date)) {
-                    throw new CayenneRuntimeException(
-                            "Expected an instance of java.util.Date, instead got "
-                                    + object.getClass().getName()
-                                    + ", column index: "
-                                    + index);
-                }
-
-                val = (Date) object;
+                val = rs.getTimestamp(index);
                 break;
         }
 
-        return (rs.wasNull()) ? null : new Date(val.getTime());
+        // return java.util.Date instead of subclass
+        return val == null ? null : new Date(val.getTime());
     }
 
     public Object materializeObject(CallableStatement cs, int index, int type)
             throws Exception {
-        Object val = null;
+        Date val = null;
 
         switch (type) {
             case Types.TIMESTAMP:
@@ -121,25 +108,12 @@
                 val = cs.getTime(index);
                 break;
             default:
-                val = cs.getObject(index);
-                // check if value was properly converted by the driver
-                if (val != null && !(val instanceof java.util.Date)) {
-                    String typeName = TypesMapping.getSqlNameByType(type);
-                    throw new ClassCastException(
-                            "Expected a java.util.Date or subclass, instead fetched '"
-                                    + val.getClass().getName()
-                                    + "' for JDBC type "
-                                    + typeName);
-                }
+                val = cs.getTimestamp(index);
                 break;
         }
 
-        // all sql time/date classes are subclasses of java.util.Date,
-        // so lets cast it to Date,
-        // if it is not date, ClassCastException will be thrown,
-        // which is what we want
-        return (cs.wasNull()) ? null : new java.util.Date(((java.util.Date) val)
-                .getTime());
+        // return java.util.Date instead of subclass
+        return val == null ? null : new Date(val.getTime());
     }
 
     public void setJdbcObject(