Index: doc/src/sgml/func.sgml
===================================================================
RCS file: /projects/cvsroot/pgsql-server/doc/src/sgml/func.sgml,v
retrieving revision 1.189
diff -u -r1.189 func.sgml
--- doc/src/sgml/func.sgml	29 Feb 2004 15:45:53 -0000	1.189
+++ doc/src/sgml/func.sgml	29 Feb 2004 23:44:32 -0000
@@ -5306,6 +5306,7 @@
      <member><literal>minute</literal></member>
      <member><literal>hour</literal></member>
      <member><literal>day</literal></member>
+     <member><literal>week</literal></member>
      <member><literal>month</literal></member>
      <member><literal>year</literal></member>
      <member><literal>decade</literal></member>
Index: src/backend/utils/adt/timestamp.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/utils/adt/timestamp.c,v
retrieving revision 1.99
diff -u -r1.99 timestamp.c
--- src/backend/utils/adt/timestamp.c	14 Feb 2004 20:16:17 -0000	1.99
+++ src/backend/utils/adt/timestamp.c	29 Feb 2004 23:44:34 -0000
@@ -2564,6 +2564,13 @@
 
 		switch (val)
 		{
+			case DTK_WEEK:
+				isoweek2date( date2isoweek( tm->tm_year, tm->tm_mon, tm->tm_mday ), &(tm->tm_year), &(tm->tm_mon), &(tm->tm_mday) );
+				tm->tm_hour = 0;
+				tm->tm_min = 0;
+				tm->tm_sec = 0;
+				fsec = 0;
+				break;
 			case DTK_MILLENNIUM:
 				tm->tm_year = (tm->tm_year / 1000) * 1000;
 			case DTK_CENTURY:
@@ -2672,6 +2679,13 @@
 
 		switch (val)
 		{
+			case DTK_WEEK:
+				isoweek2date( date2isoweek( tm->tm_year, tm->tm_mon, tm->tm_mday ), &(tm->tm_year), &(tm->tm_mon), &(tm->tm_mday) );
+				tm->tm_hour = 0;
+				tm->tm_min = 0;
+				tm->tm_sec = 0;
+				fsec = 0;
+				break;
 			case DTK_MILLENNIUM:
 				tm->tm_year = (tm->tm_year / 1000) * 1000;
 			case DTK_CENTURY:
Index: src/test/regress/expected/timestamp.out
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/test/regress/expected/timestamp.out,v
retrieving revision 1.25
diff -u -r1.25 timestamp.out
--- src/test/regress/expected/timestamp.out	25 Sep 2003 06:58:06 -0000	1.25
+++ src/test/regress/expected/timestamp.out	29 Feb 2004 23:44:36 -0000
@@ -499,6 +499,12 @@
     | @ 1460 days 17 hours 32 mins 1 sec
 (54 rows)
 
+SELECT '' AS date_trunc_week, date_trunc( 'week', timestamp '2004-02-29 15:44:17.71393' ) AS week_trunc;
+ date_trunc_week |        week_trunc        
+-----------------+--------------------------
+                 | Mon Feb 23 00:00:00 2004
+(1 row)
+
 -- Test casting within a BETWEEN qualifier
 SELECT '' AS "54", d1 - timestamp without time zone '1997-01-02' AS diff
   FROM TIMESTAMP_TBL
Index: src/test/regress/expected/timestamptz.out
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/test/regress/expected/timestamptz.out,v
retrieving revision 1.14
diff -u -r1.14 timestamptz.out
--- src/test/regress/expected/timestamptz.out	25 Dec 2003 03:36:24 -0000	1.14
+++ src/test/regress/expected/timestamptz.out	29 Feb 2004 23:44:36 -0000
@@ -494,6 +494,12 @@
     | @ 1460 days 17 hours 32 mins 1 sec
 (54 rows)
 
+SELECT '' AS date_trunc_week, date_trunc( 'week', timestamp with time zone '2004-02-29 15:44:17.71393' ) AS week_trunc;
+ date_trunc_week |          week_trunc          
+-----------------+------------------------------
+                 | Mon Feb 23 00:00:00 2004 PST
+(1 row)
+
 -- Test casting within a BETWEEN qualifier
 SELECT '' AS "54", d1 - timestamp with time zone '1997-01-02' AS diff
   FROM TIMESTAMPTZ_TBL
@@ -1317,9 +1323,9 @@
            | 2001 A.D. 2001 a.d. 2001 ad 05:32:01 P.M. 05:32:01 p.m. 05:32:01 pm
 (64 rows)
 
-SELECT '' AS to_char_10, to_char(d1, 'YYYY WW IYYY IYY IY I IW')
+SELECT '' AS to_char_10, to_char(d1, 'YYYY WW IYYY IYY IY I IW') 
    FROM TIMESTAMPTZ_TBL;
- to_char_10 |     to_char
+ to_char_10 |         to_char          
 ------------+--------------------------
             | 
             | 
Index: src/test/regress/sql/timestamp.sql
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/test/regress/sql/timestamp.sql,v
retrieving revision 1.12
diff -u -r1.12 timestamp.sql
--- src/test/regress/sql/timestamp.sql	29 Jul 2003 00:03:19 -0000	1.12
+++ src/test/regress/sql/timestamp.sql	29 Feb 2004 23:44:36 -0000
@@ -151,6 +151,8 @@
 SELECT '' AS "54", d1 - timestamp without time zone '1997-01-02' AS diff
    FROM TIMESTAMP_TBL WHERE d1 BETWEEN '1902-01-01' AND '2038-01-01';
 
+SELECT '' AS date_trunc_week, date_trunc( 'week', timestamp '2004-02-29 15:44:17.71393' ) AS week_trunc;
+
 -- Test casting within a BETWEEN qualifier
 SELECT '' AS "54", d1 - timestamp without time zone '1997-01-02' AS diff
   FROM TIMESTAMP_TBL
Index: src/test/regress/sql/timestamptz.sql
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/test/regress/sql/timestamptz.sql,v
retrieving revision 1.5
diff -u -r1.5 timestamptz.sql
--- src/test/regress/sql/timestamptz.sql	25 Dec 2003 03:36:24 -0000	1.5
+++ src/test/regress/sql/timestamptz.sql	29 Feb 2004 23:44:36 -0000
@@ -145,6 +145,8 @@
 SELECT '' AS "54", d1 - timestamp with time zone '1997-01-02' AS diff
    FROM TIMESTAMPTZ_TBL WHERE d1 BETWEEN '1902-01-01' AND '2038-01-01';
 
+SELECT '' AS date_trunc_week, date_trunc( 'week', timestamp with time zone '2004-02-29 15:44:17.71393' ) AS week_trunc;
+
 -- Test casting within a BETWEEN qualifier
 SELECT '' AS "54", d1 - timestamp with time zone '1997-01-02' AS diff
   FROM TIMESTAMPTZ_TBL
