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/
Tue, 15 Jul 2003 21:25:19 +0800
"Wang Mike" <itlist@msn.com>
clock_timestamp() and transcation_timestamp() patch

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
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

Wed, 23 Jul 2003 22:26:43 -0400 (EDT)
Bruce Momjian <pgman@candle.pha.pa.us>
Re: [HACKERS] clock_timestamp() and transcation_timestamp() patch