postgresql-jdbc.git / summary / log / commit / refs
commit a960a65ab0d0959c02007fbbc4b8801f3b9385ae
Author: Oliver Jowett <oliver@opencloud.com>
Date: Tue Jan 18 21:33:18 2005 +0000
Bugfixes and tests for two date-related bugs:
The jdbc escaped scalar function dayofweek should return values between
1 and 7 (1 for sunday) unlike the backend "extract dow" function which is
zero-based.
The literal escaped values for date/time/timestamp were not explicitly casted
which causes some problems. For example:
extract( dow from '2005-01-17 12:00:00')
generates an error, but the following is accepted:
extract( dow from TIMESTAMP '2005-01-17 12:00:00')
Bug report and patch from Xavier Poinsard.
org/postgresql/jdbc2/AbstractJdbc2Statement.java | 13 +++++++++++--
org/postgresql/jdbc2/EscapedFunctions.java | 7 ++++---
org/postgresql/test/jdbc2/StatementTest.java | 6 ++++--
3 files changed, 19 insertions(+), 7 deletions(-)
diff --git a/org/postgresql/jdbc2/AbstractJdbc2Statement.java b/org/postgresql/jdbc2/AbstractJdbc2Statement.java
index ab603743..4779cebf 100644
--- a/org/postgresql/jdbc2/AbstractJdbc2Statement.java
+++ b/org/postgresql/jdbc2/AbstractJdbc2Statement.java
@@ -3,7 +3,7 @@
* Copyright (c) 2004-2005, PostgreSQL Global Development Group
*
* IDENTIFICATION
-* $PostgreSQL: pgjdbc/org/postgresql/jdbc2/AbstractJdbc2Statement.java,v 1.62 2005/01/14 01:20:19 oliver Exp $
+* $PostgreSQL: pgjdbc/org/postgresql/jdbc2/AbstractJdbc2Statement.java,v 1.63 2005/01/15 07:53:02 oliver Exp $
*
*-------------------------------------------------------------------------
*/
@@ -756,12 +756,21 @@ public abstract class AbstractJdbc2Statement implements BaseStatement
{
state = ESC_TIMEDATE;
i++;
+ newsql.append("DATE ");
break;
}
else if (next == 't' || next == 'T')
{
state = ESC_TIMEDATE;
- i += (nextnext == 's' || nextnext == 'S') ? 2 : 1;
+ if (nextnext == 's' || nextnext == 'S'){
+ // timestamp constant
+ i+=2;
+ newsql.append("TIMESTAMP ");
+ }else{
+ // time constant
+ i++;
+ newsql.append("TIME ");
+ }
break;
}
else if ( next == 'f' || next == 'F' )
diff --git a/org/postgresql/jdbc2/EscapedFunctions.java b/org/postgresql/jdbc2/EscapedFunctions.java
index c32ae8d9..c412ac2f 100644
--- a/org/postgresql/jdbc2/EscapedFunctions.java
+++ b/org/postgresql/jdbc2/EscapedFunctions.java
@@ -3,7 +3,7 @@
* Copyright (c) 2004-2005, PostgreSQL Global Development Group
*
* IDENTIFICATION
-* $PostgreSQL: pgjdbc/org/postgresql/jdbc2/EscapedFunctions.java,v 1.2 2005/01/11 08:25:46 jurka Exp $
+* $PostgreSQL: pgjdbc/org/postgresql/jdbc2/EscapedFunctions.java,v 1.3 2005/01/14 01:20:20 oliver Exp $
*
*-------------------------------------------------------------------------
*/
@@ -399,13 +399,14 @@ public class EscapedFunctions {
return "extract(day from "+parsedArgs.get(0)+")";
}
- /** dayofweek translation */
+ /** dayofweek translation
+ * adding 1 to postgresql function since we expect values from 1 to 7 */
public static String sqldayofweek(List parsedArgs) throws SQLException{
if (parsedArgs.size()!=1){
throw new PSQLException(GT.tr("{0} function takes one and only one argument.","dayofweek"),
PSQLState.SYNTAX_ERROR);
}
- return "extract(dow from "+parsedArgs.get(0)+")";
+ return "extract(dow from "+parsedArgs.get(0)+")+1";
}
/** dayofyear translation */
diff --git a/org/postgresql/test/jdbc2/StatementTest.java b/org/postgresql/test/jdbc2/StatementTest.java
index 792ba27d..92560f3a 100644
--- a/org/postgresql/test/jdbc2/StatementTest.java
+++ b/org/postgresql/test/jdbc2/StatementTest.java
@@ -3,7 +3,7 @@
* Copyright (c) 2004-2005, PostgreSQL Global Development Group
*
* IDENTIFICATION
-* $PostgreSQL: pgjdbc/org/postgresql/test/jdbc2/StatementTest.java,v 1.12 2004/12/22 22:59:05 jurka Exp $
+* $PostgreSQL: pgjdbc/org/postgresql/test/jdbc2/StatementTest.java,v 1.13 2005/01/11 08:25:48 jurka Exp $
*
*-------------------------------------------------------------------------
*/
@@ -267,13 +267,15 @@ public class StatementTest extends TestCase
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select {fn curdate()},{fn curtime()}" +
",{fn dayname({fn now()})}, {fn dayofmonth({fn now()})}" +
- ",{fn dayofweek({fn now()})},{fn dayofyear({fn now()})}" +
+ ",{fn dayofweek({ts '2005-01-17 12:00:00'})},{fn dayofyear({fn now()})}" +
",{fn hour({fn now()})},{fn minute({fn now()})}" +
",{fn month({fn now()})}" +
",{fn monthname({fn now()})},{fn quarter({fn now()})}" +
",{fn second({fn now()})},{fn week({fn now()})}" +
",{fn year({fn now()})} ");
assertTrue(rs.next());
+ // ensure sunday =>1 and monday =>2
+ assertEquals(2,rs.getInt(5));
}
public void testSystemFunctions() throws SQLException
[parent: 8da0216ed54a]