]> granicus.if.org Git - postgresql/commitdiff
Fix timestamptz_in so that parsing of 'now'::timestamptz gives right
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 20 Feb 2003 05:24:55 +0000 (05:24 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 20 Feb 2003 05:24:55 +0000 (05:24 +0000)
answer when SET TIMEZONE has been done since the start of the current
transaction.  Per bug report from Robert Haas.
I plan some futher cleanup in HEAD, but this is a low-risk patch for
the immediate issue in 7.3.

src/backend/utils/adt/datetime.c
src/backend/utils/adt/nabstime.c
src/include/utils/datetime.h

index 994ab9fae084151a34d3253fc9aee9dca09c9d5e..625ac11bccbc69149fc30f2a1fe7317076deffcb 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.100 2003/02/19 03:48:10 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.101 2003/02/20 05:24:55 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1253,9 +1253,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
                                                        case DTK_NOW:
                                                                tmask = (DTK_DATE_M | DTK_TIME_M | DTK_M(TZ));
                                                                *dtype = DTK_DATE;
-                                                               GetCurrentTimeUsec(tm, fsec);
-                                                               if (tzp != NULL)
-                                                                       *tzp = CTimeZone;
+                                                               GetCurrentTimeUsec(tm, fsec, tzp);
                                                                break;
 
                                                        case DTK_YESTERDAY:
@@ -1969,7 +1967,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
                                                        case DTK_NOW:
                                                                tmask = DTK_TIME_M;
                                                                *dtype = DTK_TIME;
-                                                               GetCurrentTimeUsec(tm, fsec);
+                                                               GetCurrentTimeUsec(tm, fsec, NULL);
                                                                break;
 
                                                        case DTK_ZULU:
index 853cd014852d3692076360cc7ba56a8a25128d47..e6fa5a21fc053f998eb9fbcca92d49c59cd417cc 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/adt/nabstime.c,v 1.102 2002/12/12 19:16:55 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/adt/nabstime.c,v 1.103 2003/02/20 05:24:55 tgl Exp $
  *
  * NOTES
  *
@@ -243,25 +243,24 @@ GetCurrentDateTime(struct tm * tm)
        int                     tz;
 
        abstime2tm(GetCurrentTransactionStartTime(), &tz, tm, NULL);
-
-       return;
 }      /* GetCurrentDateTime() */
 
 
 void
-GetCurrentTimeUsec(struct tm * tm, fsec_t *fsec)
+GetCurrentTimeUsec(struct tm * tm, fsec_t *fsec, int *tzp)
 {
        int                     tz;
        int                     usec;
 
        abstime2tm(GetCurrentTransactionStartTimeUsec(&usec), &tz, tm, NULL);
+       /* Note: don't pass NULL tzp directly to abstime2tm */
+       if (tzp != NULL)
+               *tzp = tz;
 #ifdef HAVE_INT64_TIMESTAMP
        *fsec = usec;
 #else
        *fsec = usec * 1.0e-6;
 #endif
-
-       return;
 }      /* GetCurrentTimeUsec() */
 
 
index 251691325a571a52793c4dfb559a354e1eba5bdf..39905ebb15ec9cf3f37d0a694bfe72f846cccc88 100644 (file)
@@ -9,7 +9,7 @@
  * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: datetime.h,v 1.35 2003/02/19 03:48:10 momjian Exp $
+ * $Id: datetime.h,v 1.36 2003/02/20 05:24:55 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -261,7 +261,7 @@ extern int  day_tab[2][13];
 
 
 extern void GetCurrentDateTime(struct tm * tm);
-extern void GetCurrentTimeUsec(struct tm * tm, fsec_t *fsec);
+extern void GetCurrentTimeUsec(struct tm * tm, fsec_t *fsec, int *tzp);
 extern void j2date(int jd, int *year, int *month, int *day);
 extern int     date2j(int year, int month, int day);