This looks really good, but we are in feature freeze right now.

This has been saved for the 7.5 release:

        http:/momjian.postgresql.org/cgi-bin/pgpatches2

---------------------------------------------------------------------------

Wang Mike wrote:
> diff -u -r ../postgresql-snapshot/src/backend/utils/adt/nabstime.c 
> ../pgsql/src/backend/utils/adt/nabstime.c
> --- ../postgresql-snapshot/src/backend/utils/adt/nabstime.c   2003-05-13 
> 07:08:50.000000000 +0800
> +++ ../pgsql/src/backend/utils/adt/nabstime.c 2003-07-15 11:08:06.000000000 
> +0800
> @@ -76,7 +76,6 @@
>   * Function prototypes -- internal to this file only
>   */
>  
> -static AbsoluteTime tm2abstime(struct tm * tm, int tz);
>  static void reltime2tm(RelativeTime time, struct tm * tm);
>  static int istinterval(char *i_string,
>                       AbsoluteTime *i_start,
> @@ -311,7 +310,7 @@
>   * Convert a tm structure to abstime.
>   * Note that tm has full year (not 1900-based) and 1-based month.
>   */
> -static AbsoluteTime
> +AbsoluteTime
>  tm2abstime(struct tm * tm, int tz)
>  {
>       int                     day;
> diff -u -r ../postgresql-snapshot/src/backend/utils/adt/timestamp.c 
> ../pgsql/src/backend/utils/adt/timestamp.c
> --- ../postgresql-snapshot/src/backend/utils/adt/timestamp.c  2003-05-13 
> 07:08:50.000000000 +0800
> +++ ../pgsql/src/backend/utils/adt/timestamp.c        2003-07-15 
> 20:42:39.000000000 +0800
> @@ -847,7 +847,65 @@
>       result = AbsoluteTimeUsecToTimestampTz(sec, usec);
>  
>       PG_RETURN_TIMESTAMPTZ(result);
> -}
> +}    /* now() */
> +
> +/*
> + * Function transaction_timestamp() return current transaction timestamp.
> + * Added by Xiongjian Wang (MikeWang)
> +*/
> +Datum
> +transaction_timestamp(PG_FUNCTION_ARGS)
> +{
> +     TimestampTz result;
> +     AbsoluteTime sec;
> +     int                     usec;
> +
> +     sec = GetCurrentTransactionStartTimeUsec(&usec);
> +
> +     result = AbsoluteTimeUsecToTimestampTz(sec, usec);
> +
> +     PG_RETURN_TIMESTAMPTZ(result);
> +}    /* transaction_timestamp() */
> +
> +/*
> + * Function clock_timestamp() return current clock timestamp.
> + * Added by Xiongjian Wang (MikeWang)
> +*/
> +Datum
> +clock_timestamp(PG_FUNCTION_ARGS)
> +{
> +     TimestampTz result;
> +     AbsoluteTime sec;
> +     int                     usec;
> +
> +     sec = GetCurrentAbsoluteTimeUsec(&usec);
> +
> +     result = AbsoluteTimeUsecToTimestampTz(sec, usec);
> +
> +     PG_RETURN_TIMESTAMPTZ(result);
> +}    /* clock_timestamp() */
> +
> +Datum
> +transaction_interval(PG_FUNCTION_ARGS)
> +{
> +     Timestamp trans_tz;
> +     Timestamp clock_tz;
> +     
> +     AbsoluteTime trans_sec;
> +     AbsoluteTime clock_sec;
> +     int trans_usec;
> +     int clock_usec;
> +
> +     clock_sec = GetCurrentAbsoluteTimeUsec(&clock_usec);
> +     trans_sec = GetCurrentTransactionStartTimeUsec(&trans_usec);
> +
> +     trans_tz = AbsoluteTimeUsecToTimestampTz(trans_sec, trans_usec);
> +     clock_tz = AbsoluteTimeUsecToTimestampTz(clock_sec, clock_usec);
> +
> +     return DirectFunctionCall2(timestamp_mi,
> +                                                        TimestampGetDatum(clock_tz),
> +                                                        
> TimestampGetDatum(trans_tz));
> +}    /* transaction_interval() */
>  
>  void
>  dt2time(Timestamp jd, int *hour, int *min, int *sec, fsec_t *fsec)
> diff -u -r ../postgresql-snapshot/src/include/catalog/pg_proc.h 
> ../pgsql/src/include/catalog/pg_proc.h
> --- ../postgresql-snapshot/src/include/catalog/pg_proc.h      2003-06-23 
> 06:04:55.000000000 +0800
> +++ ../pgsql/src/include/catalog/pg_proc.h    2003-07-15 20:54:06.000000000 
> +0800
> @@ -3394,6 +3394,15 @@
>  DATA(insert OID = 2503 (  anyarray_send                 PGNSP PGUID 12 f f t f s 1 
> 17 
> "2277"  anyarray_send - _null_ ));
>  DESCR("I/O");
>  
> +/* Added by Xiongjian Wang (MikeWang) */
> +DATA(insert OID = 5001 (  transaction_timestamp      PGNSP PGUID 12 f f t f s 0 
> 1184 ""  transaction_timestamp - _null_ ));
> +DESCR("current transaction timestamp like as function now()");
> +
> +DATA(insert OID = 5002 (  clock_timestamp PGNSP PGUID 12 f f t f v 0 1184 
> ""  clock_timestamp - _null_ ));
> +DESCR("current clock timestamp");
> +
> +DATA(insert OID = 5003 (  transaction_interval PGNSP PGUID 12 f f t f v 0 
> 1186 ""  transaction_interval - _null_ ));
> +DESCR("current transaction runs into present interval");
>  
>  /*
>   * Symbolic values for provolatile column: these indicate whether the 
> result
> diff -u -r ../postgresql-snapshot/src/include/utils/nabstime.h 
> ../pgsql/src/include/utils/nabstime.h
> --- ../postgresql-snapshot/src/include/utils/nabstime.h       2003-05-13 
> 07:08:52.000000000 +0800
> +++ ../pgsql/src/include/utils/nabstime.h     2003-07-15 11:06:41.000000000 
> +0800
> @@ -165,5 +165,5 @@
>  extern AbsoluteTime GetCurrentAbsoluteTimeUsec(int *usec);
>  extern TimestampTz AbsoluteTimeUsecToTimestampTz(AbsoluteTime sec, int 
> usec);
>  extern void abstime2tm(AbsoluteTime time, int *tzp, struct tm * tm, char 
> **tzn);
> -
> +extern AbsoluteTime tm2abstime(struct tm * tm, int tz);
>  #endif   /* NABSTIME_H */
> diff -u -r ../postgresql-snapshot/src/include/utils/timestamp.h 
> ../pgsql/src/include/utils/timestamp.h
> --- ../postgresql-snapshot/src/include/utils/timestamp.h      2003-05-13 
> 07:08:52.000000000 +0800
> +++ ../pgsql/src/include/utils/timestamp.h    2003-07-15 20:44:35.000000000 
> +0800
> @@ -233,20 +233,24 @@
>  
>  extern Datum now(PG_FUNCTION_ARGS);
>  
> -/* Internal routines (not fmgr-callable) */
> +/* Add by Xiongjian Wang (Mike Wang) */
> +extern Datum transaction_timestamp(PG_FUNCTION_ARGS);
> +extern Datum clock_timestamp(PG_FUNCTION_ARGS);
> +extern Datum transaction_interval(PG_FUNCTION_ARGS);
>  
> -extern int   tm2timestamp(struct tm * tm, fsec_t fsec, int *tzp, Timestamp 
> *dt);
> +/* Internal routines (not fmgr-callable) */
> +extern int tm2timestamp(struct tm * tm, fsec_t fsec, int *tzp, Timestamp 
> *dt);
>  extern int timestamp2tm(Timestamp dt, int *tzp, struct tm * tm,
>                        fsec_t *fsec, char **tzn);
>  extern void dt2time(Timestamp dt, int *hour, int *min, int *sec, fsec_t 
> *fsec);
>  
> -extern int   interval2tm(Interval span, struct tm * tm, fsec_t *fsec);
> -extern int   tm2interval(struct tm * tm, fsec_t fsec, Interval *span);
> +extern int interval2tm(Interval span, struct tm * tm, fsec_t *fsec);
> +extern int tm2interval(struct tm * tm, fsec_t fsec, Interval *span);
>  
>  extern Timestamp SetEpochTimestamp(void);
>  extern void GetEpochTime(struct tm * tm);
>  
>  extern void isoweek2date(int woy, int *year, int *mon, int *mday);
> -extern int   date2isoweek(int year, int mon, int mday);
> +extern int date2isoweek(int year, int mon, int mday);
>  
>  #endif   /* TIMESTAMP_H */
> 
> -------------------------------------------------------------------
> 
> or see my attachment . 
> 
> and I have a problem, what is stetement_timestamp() ??
> 
> _________________________________________________________________
>  MSN Explorer:   http://explorer.msn.com/lccn/  

[ Attachment, skipping... ]

> 
> ---------------------------(end of broadcast)---------------------------
> TIP 7: don't forget to increase your free space map settings

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  [EMAIL PROTECTED]               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
      subscribe-nomail command to [EMAIL PROTECTED] so that your
      message can get through to the mailing list cleanly

Reply via email to