You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by mi...@apache.org on 2010/07/09 21:12:50 UTC

svn commit: r962640 - in /db/derby/code/branches/10.5: ./ java/engine/org/apache/derby/iapi/types/SQLDate.java java/engine/org/apache/derby/iapi/types/SQLTimestamp.java java/testing/org/apache/derbyTesting/functionTests/tests/lang/DateTimeTest.java

Author: mikem
Date: Fri Jul  9 19:12:50 2010
New Revision: 962640

URL: http://svn.apache.org/viewvc?rev=962640&view=rev
Log:
DERBY-3856: difference between Embedded vs DerbyNetClient in format of
return from timestamp(cast(? as varchar(32)))

backporting change #952581 from trunk to 10.5 branch.

Stop caching the original input string in the parse methods of SQLDate
and SQLTimestamp, and instead generate (and cache) a normalized
datetime string on the first call to getString().


Modified:
    db/derby/code/branches/10.5/   (props changed)
    db/derby/code/branches/10.5/java/engine/org/apache/derby/iapi/types/SQLDate.java
    db/derby/code/branches/10.5/java/engine/org/apache/derby/iapi/types/SQLTimestamp.java
    db/derby/code/branches/10.5/java/testing/org/apache/derbyTesting/functionTests/tests/lang/DateTimeTest.java

Propchange: db/derby/code/branches/10.5/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jul  9 19:12:50 2010
@@ -1,2 +1,2 @@
 /db/derby/code/branches/10.6:957000
-/db/derby/code/trunk:757811,769596,769602,769606,769962,772090,772337,772449,772534,774281,777105,779681,782991,785131,785139,785163,785570,785662,788369,788670,788674,788968,789264,790218,791027,792434,793089,793588,794106,794303,794955,795166,795459,796020,796027,796316,796372,797147,798347,798742,800523,803548,803948,805696,808494,808850,809643,810860,812669,816531,816536,819006,822289,823659,824694,829022,829410,831304,831319,832379,833430,835286,881074,881444,882732,884163,885421,885659,887246,888311,892912,897161,898635,901165,901648,901760,903108,905224,908418,908586,909176,911315,915733,916075,916897,918359,921028,927430,928065,936215,942286,942476,942480,942587,946794,948045,948069,951346,952138,954748,955001,955634,956075,956445,956659,958163,959550
+/db/derby/code/trunk:757811,769596,769602,769606,769962,772090,772337,772449,772534,774281,777105,779681,782991,785131,785139,785163,785570,785662,788369,788670,788674,788968,789264,790218,791027,792434,793089,793588,794106,794303,794955,795166,795459,796020,796027,796316,796372,797147,798347,798742,800523,803548,803948,805696,808494,808850,809643,810860,812669,816531,816536,819006,822289,823659,824694,829022,829410,831304,831319,832379,833430,835286,881074,881444,882732,884163,885421,885659,887246,888311,892912,897161,898635,901165,901648,901760,903108,905224,908418,908586,909176,911315,915733,916075,916897,918359,921028,927430,928065,936215,942286,942476,942480,942587,946794,948045,948069,951346,952138,952581,954748,955001,955634,956075,956445,956659,958163,959550

Modified: db/derby/code/branches/10.5/java/engine/org/apache/derby/iapi/types/SQLDate.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.5/java/engine/org/apache/derby/iapi/types/SQLDate.java?rev=962640&r1=962639&r2=962640&view=diff
==============================================================================
--- db/derby/code/branches/10.5/java/engine/org/apache/derby/iapi/types/SQLDate.java (original)
+++ db/derby/code/branches/10.5/java/engine/org/apache/derby/iapi/types/SQLDate.java Fri Jul  9 19:12:50 2010
@@ -471,7 +471,6 @@ public final class SQLDate extends DataT
             {
             case ISO_SEPARATOR:
                 encodedDate = SQLTimestamp.parseDateOrTimestamp( parser, false)[0];
-                valueString = parser.getTrimmedString();
                 return;
 
             case IBM_USA_SEPARATOR:
@@ -507,7 +506,6 @@ public final class SQLDate extends DataT
         }
         if( validSyntax)
         {
-            valueString = parser.checkEnd();
             encodedDate = computeEncodedDate( year, month, day);
         }
         else
@@ -541,7 +539,6 @@ public final class SQLDate extends DataT
                     throw StandardException.newException( SQLState.LANG_DATE_SYNTAX_EXCEPTION);
                 }
             }
-            valueString = dateStr;
         }
     } // end of parseDate
 

Modified: db/derby/code/branches/10.5/java/engine/org/apache/derby/iapi/types/SQLTimestamp.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.5/java/engine/org/apache/derby/iapi/types/SQLTimestamp.java?rev=962640&r1=962639&r2=962640&view=diff
==============================================================================
--- db/derby/code/branches/10.5/java/engine/org/apache/derby/iapi/types/SQLTimestamp.java (original)
+++ db/derby/code/branches/10.5/java/engine/org/apache/derby/iapi/types/SQLTimestamp.java Fri Jul  9 19:12:50 2010
@@ -519,7 +519,6 @@ public final class SQLTimestamp extends 
             encodedDate = dateTimeNano[0];
             encodedTime = dateTimeNano[1];
             nanos = dateTimeNano[2];
-            valueString = parser.getTrimmedString();
             return;
         }
         catch( StandardException se)
@@ -533,7 +532,6 @@ public final class SQLTimestamp extends 
             int[] dateAndTime = parseLocalTimestamp( timestampStr, localeFinder, cal);
             encodedDate = dateAndTime[0];
             encodedTime = dateAndTime[1];
-            valueString = timestampStr;
             return;
         }
         catch( ParseException pe){}

Modified: db/derby/code/branches/10.5/java/testing/org/apache/derbyTesting/functionTests/tests/lang/DateTimeTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.5/java/testing/org/apache/derbyTesting/functionTests/tests/lang/DateTimeTest.java?rev=962640&r1=962639&r2=962640&view=diff
==============================================================================
--- db/derby/code/branches/10.5/java/testing/org/apache/derbyTesting/functionTests/tests/lang/DateTimeTest.java (original)
+++ db/derby/code/branches/10.5/java/testing/org/apache/derbyTesting/functionTests/tests/lang/DateTimeTest.java Fri Jul  9 19:12:50 2010
@@ -1604,14 +1604,8 @@ public final class DateTimeTest extends 
         
         rs = pSt.executeQuery();
         JDBC.assertColumnNames(rs, new String[] { "1", "2" });
-        // See DERBY-3856 - there's a diff between Embedded and DerbyNetClient
-        // in how the cast returns the following...
-        if (usingDerbyNetClient())
-            JDBC.assertFullResultSet(rs, new String[][] { { "1970-01-01",
+        JDBC.assertFullResultSet(rs, new String[][] { { "1970-01-01",
             "2003-03-05 17:05:43.111111" } }, true);
-        else
-            JDBC.assertFullResultSet(rs, new String[][] { { "1970-01-01",
-                "2003-03-05-17.05.43.111111" } }, true);
 
         rs = st.executeQuery("values(2, '20030422190200')");
         rs.next();
@@ -1751,4 +1745,55 @@ public final class DateTimeTest extends 
         
         st.close();
     }
+
+    /**
+     * Regression test case for DERBY-3856. The embedded driver sometimes
+     * returned an unnormalized datetime string when getString() was used
+     * to retrieve the result from an invocation of the unary TIMESTAMP or
+     * DATE function.
+     */
+    public void testDerby3856() throws SQLException {
+        // TIMESTAMP called on literal has always a returned normalized value.
+        assertSingleValue(
+                "values timestamp('2003-03-05-17.05.43.111111')",
+                "2003-03-05 17:05:43.111111");
+
+        // This one used to return the original unnormalized input with the
+        // embedded driver.
+        assertSingleValue(
+                "values timestamp(cast('2003-03-05-17.05.43.111111' " +
+                "as varchar(32)))",
+                "2003-03-05 17:05:43.111111");
+
+        // DATE called on literal has always a returned normalized value.
+        assertSingleValue("values date('10/07/2008')", "2008-10-07");
+
+        // This one used to return the original unnormalized input with the
+        // embedded driver.
+        assertSingleValue(
+                "values date(cast('10/07/2008' as varchar(10)))",
+                "2008-10-07");
+
+        // TIME called on literal has always a returned normalized string.
+        assertSingleValue("values time('10.00.00')", "10:00:00");
+
+        // TIME has also always returned a normalized value for the variant
+        // with a CAST.
+        assertSingleValue(
+                "values time(cast('10.00.00' as varchar(10)))",
+                "10:00:00");
+    }
+
+    /**
+     * Execute an SQL statement and check that it returns a single, specific
+     * value.
+     *
+     * @param sql the statement to execute
+     * @param expectedValue the expected value
+     */
+    private void assertSingleValue(String sql, String expectedValue)
+            throws SQLException {
+        JDBC.assertSingleValueResultSet(
+                createStatement().executeQuery(sql), expectedValue);
+    }
 }