diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog
index a2b413bb8a7999b6a97678171086fcc87cdde903..07d6c2548f0ebdd7125e8af52fe611b2ad3eab35 100644
--- a/src/interfaces/ecpg/ChangeLog
+++ b/src/interfaces/ecpg/ChangeLog
@@ -1138,5 +1138,9 @@ Thu Oct 18 12:57:04 CEST 2001
 Fri Oct 19 16:32:06 CEST 2001
 
 	- Removed "not yet fully implemented" warnig for nullif.
+
+Sun Oct 21 14:19:42 CEST 2001
+
+	- Synced preproc.y with gram.y.
 	- Set ecpg version to 2.9.0.
         - Set library version to 3.3.0.
diff --git a/src/interfaces/ecpg/preproc/preproc.y b/src/interfaces/ecpg/preproc/preproc.y
index afd92b85c1cfb8ccec031299a3016c77098e0b4d..4451ee8ca855e2566a71bda80d6ca1191f0077ab 100644
--- a/src/interfaces/ecpg/preproc/preproc.y
+++ b/src/interfaces/ecpg/preproc/preproc.y
@@ -833,7 +833,21 @@ opt_boolean:  TRUE_P 		{ $$ = make_str("true"); }
 		| OFF		{ $$ = make_str("off"); }
 		;
 
-zone_value:  StringConst			{ $$ = $1; }
+/* Timezone values can be:
+* - a string such as 'pst8pdt'
+* - an integer or floating point number
+* - a time interval per SQL99
+*/
+zone_value:  StringConst		{ $$ = $1; }
+		| ConstInterval StringConst opt_interval
+					{
+					  $$ = cat_str(3, $1, $2, $3); 
+					}
+		| ConstInterval '(' PosIntConst ')' StringConst opt_interval
+					{
+					  $$ = cat_str(6, $1, make_str("("), $3, make_str(")"), $5, $6);
+					}
+		| NumConst		{ $$ = $1; }
 		| DEFAULT		{ $$ = make_str("default"); }
 		| LOCAL			{ $$ = make_str("local"); }
 		;
@@ -844,7 +858,7 @@ opt_encoding:	StringConst	 	{ $$ = $1; }
 		;
 
 ColId_or_Sconst: ColId		{ $$ = $1; }
-		| SCONST	{ $$ = $1; }
+		| StringConst	{ $$ = $1; }
 		;
 
 VariableShowStmt:  SHOW ColId
@@ -2950,8 +2964,9 @@ Iresult:	PosIntConst		{ $$ = atol($1); }
 	|	Iresult '%' Iresult	{ $$ = $1 % $3; }
 	;
 
-SimpleTypename:  ConstTypename	{ $$ = $1; }
-               | ConstInterval	{ $$ = $1; }
+SimpleTypename:  ConstTypename					{ $$ = $1; }
+               | ConstInterval opt_interval			{ $$ = cat2_str($1, $2); }
+	       | ConstInterval '(' PosIntConst ')' opt_interval	{ $$ = cat_str(5, $1, make_str("("), $3, make_str(")"), $5); }
                ;  
 
 ConstTypename:  Generic	{ $$ = $1; }
@@ -3120,9 +3135,9 @@ ConstDatetime:  datetime
 				}
 		;
 
-ConstInterval:	INTERVAL opt_interval
+ConstInterval:	INTERVAL
 				{
-					$$ = cat2_str(make_str("interval"), $2);
+					$$ = make_str("interval");
 				}
 		;
 
@@ -3139,15 +3154,20 @@ opt_timezone:  WITH TIME ZONE				{ $$ = make_str("with time zone"); }
 		| /*EMPTY*/					{ $$ = EMPTY; }
 		;
 
-opt_interval:  datetime					{ $$ = $1; }
-		| YEAR_P TO MONTH_P			{ $$ = make_str("year to #month"); }
-		| DAY_P TO HOUR_P			{ $$ = make_str("day to hour"); }
-		| DAY_P TO MINUTE_P			{ $$ = make_str("day to minute"); }
-		| DAY_P TO SECOND_P			{ $$ = make_str("day to second"); }
-		| HOUR_P TO MINUTE_P			{ $$ = make_str("hour to minute"); }
-		| MINUTE_P TO SECOND_P			{ $$ = make_str("minute to second"); }
-		| HOUR_P TO SECOND_P			{ $$ = make_str("hour to second"); }
-		| /*EMPTY*/					{ $$ = EMPTY; }
+opt_interval:  YEAR_P				{ $$ = make_str("year"); }
+		| MONTH_P			{ $$ = make_str("month"); }
+		| DAY_P				{ $$ = make_str("day"); }
+		| HOUR_P			{ $$ = make_str("hour"); }
+		| MINUTE_P			{ $$ = make_str("minute"); }
+		| SECOND_P			{ $$ = make_str("second"); }
+		| YEAR_P TO MONTH_P		{ $$ = make_str("year to month"); }
+		| DAY_P TO HOUR_P		{ $$ = make_str("day to hour"); }
+		| DAY_P TO MINUTE_P		{ $$ = make_str("day to minute"); }
+		| DAY_P TO SECOND_P		{ $$ = make_str("day to second"); }
+		| HOUR_P TO MINUTE_P		{ $$ = make_str("hour to minute"); }
+		| MINUTE_P TO SECOND_P		{ $$ = make_str("minute to second"); }
+		| HOUR_P TO SECOND_P		{ $$ = make_str("hour to second"); }
+		| /*EMPTY*/			{ $$ = EMPTY; }
 		;
 
 
@@ -3523,7 +3543,7 @@ extract_list:  extract_arg FROM a_expr
  */
 
 extract_arg:  datetime		{ $$ = $1; }
-	| SCONST				{ $$ = $1; }
+	| StringConst				{ $$ = $1; }
 	| IDENT					{ $$ = $1; }
 		;
 
@@ -3761,6 +3781,10 @@ AexprConst:  PosAllConst
 				{
 					$$ = cat_str(3, $1, $2, $3);
 				}
+		| ConstInterval  '(' PosIntConst ')' StringConst opt_interval
+				{
+					$$ = cat_str(6, $1, make_str("("), $3, make_str(")"), $5, $6);
+				}
 		| ParamNo
 				{	$$ = $1;  }
 		| TRUE_P
@@ -5081,7 +5105,6 @@ ECPGColId: ident			{ $$ = $1; }
 	| TYPE_P			{ $$ = make_str("type"); }
 	| datetime			{ $$ = $1; }
 	| TokenId			{ $$ = $1; }
-	| INTERVAL			{ $$ = make_str("interval"); }
 	| NATIONAL			{ $$ = make_str("national"); }
 	| NONE				{ $$ = make_str("none"); }
 	| PATH_P			{ $$ = make_str("path_p"); }
@@ -5140,11 +5163,13 @@ ECPGColLabel:  ECPGColId	{ $$ = $1; }
 		| GROUP		{ $$ = make_str("group"); }
 		| HAVING	{ $$ = make_str("having"); }
 		| ILIKE		{ $$ = make_str("ilike"); }
+		| IN		{ $$ = make_str("in"); }
 		| INITIALLY	{ $$ = make_str("initially"); }
 		| INNER_P	{ $$ = make_str("inner"); }
+		| INOUT         { $$ = make_str("inout"); }
 		| INTERSECT	{ $$ = make_str("intersect"); }
+		| INTERVAL	{ $$ = make_str("interval"); }
 		| INTO		{ $$ = make_str("into"); }
-		| INOUT		{ $$ = make_str("inout"); }
 		| JOIN		{ $$ = make_str("join"); }
 		| LEADING	{ $$ = make_str("leading"); }
 		| LEFT		{ $$ = make_str("left"); }