diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog
index 806c6e56e7549b0ba136b52b39b064fe81e935ca..42d14534f898b3f8f953963ac19288eaa3ddb8cf 100644
--- a/src/interfaces/ecpg/ChangeLog
+++ b/src/interfaces/ecpg/ChangeLog
@@ -871,5 +871,9 @@ Wed Mar 15 17:36:02 CET 2000
 Sun Mar 19 11:03:13 CET 2000
 
 	- Fixed quoting bug in disconnect statement.
+
+Thu Mar 23 08:13:39 CET 2000
+
+	- Synced preproc.y and keyword.c.
 	- Set library version to 3.1.0.
 	- Set ecpg version to 2.7.0.
diff --git a/src/interfaces/ecpg/preproc/keywords.c b/src/interfaces/ecpg/preproc/keywords.c
index ebfeab61f1f1d7b37cbcf5d4a9316b603dad2f98..891bc5129cb8f6a4582b4d1f28c20cc72fa15b09 100644
--- a/src/interfaces/ecpg/preproc/keywords.c
+++ b/src/interfaces/ecpg/preproc/keywords.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.24 2000/03/15 19:09:10 meskes Exp $
+ *	  $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.25 2000/03/23 07:53:48 meskes Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -48,6 +48,7 @@ static ScanKeyword ScanKeywords[] = {
 	{"begin", BEGIN_TRANS},
 	{"between", BETWEEN},
 	{"binary", BINARY},
+	{"bit", BIT},
 	{"both", BOTH},
 	{"by", BY},
 	{"cache", CACHE},
diff --git a/src/interfaces/ecpg/preproc/preproc.y b/src/interfaces/ecpg/preproc/preproc.y
index 386097a48d4a5f03be5b09a3759caa7e40587498..f921fe4081f2382c6db786a4d62b117802e23b50 100644
--- a/src/interfaces/ecpg/preproc/preproc.y
+++ b/src/interfaces/ecpg/preproc/preproc.y
@@ -223,7 +223,7 @@ make_name(void)
  * - Todd A. Brandys 1998-01-01?
  */
 %token  ABORT_TRANS, ACCESS, AFTER, AGGREGATE, ANALYZE,
-		BACKWARD, BEFORE, BINARY,
+		BACKWARD, BEFORE, BINARY, BIT
 		CACHE, CLUSTER, COMMENT, COPY, CREATEDB, CREATEUSER, CYCLE,
                 DATABASE, DELIMITERS, DO,
 		EACH, ENCODING, EXCLUSIVE, EXPLAIN, EXTEND,
@@ -326,7 +326,7 @@ make_name(void)
 %type  <str>    CreatePLangStmt IntegerOnly TriggerFuncArgs TriggerFuncArg
 %type  <str>    ViewStmt LoadStmt CreatedbStmt createdb_opt_encoding
 %type  <str>	createdb_opt_location opt_encoding AlterTableStmt
-%type  <str>    DropdbStmt ClusterStmt grantee RevokeStmt table_expr
+%type  <str>    DropdbStmt ClusterStmt grantee RevokeStmt table_expr Bit bit
 %type  <str>	GrantStmt privileges operation_commalist operation
 %type  <str>	opt_cursor opt_lmode ConstraintsSetStmt comment_tg
 %type  <str>	case_expr when_clause_list case_default case_arg when_clause
@@ -2899,6 +2899,7 @@ Typename:  SimpleTypename opt_array_bounds
 SimpleTypename:  Generic	{ $$ = $1; }
 		| Datetime	{ $$ = $1; }
 		| Numeric	{ $$ = $1; }
+		| Bit		{ $$ = $1; }
 		| Character	{ $$ = $1; }
 		;
 
@@ -3059,6 +3060,35 @@ opt_decimal:  '(' Iconst ',' Iconst ')'
 				}
 		;
 
+/*
+ * SQL92 bit-field data types
+ * The following implements BIT() and BIT VARYING().
+ */
+Bit:  bit '(' Iconst ')'
+                                {
+                                        $$ = cat_str(4, $1, make_str("("), $3, make_str(")"));
+                                        if (atol($3) < 1)
+					{
+                                                sprintf(errortext,"length for type '%s' must be at least 1",$1);  
+						mmerror(ET_ERROR, errortext);
+					}
+                                        else if (atol($3) > (MaxAttrSize *sizeof(char)))
+					{
+                                                sprintf(errortext, "length for type '%s' cannot exceed %ld", $1,    
+                                                         (MaxAttrSize * sizeof(char)));
+					}
+                                }
+                | bit
+                                {
+                                        $$ = $1;
+				}
+		;
+
+bit:  BIT opt_varying
+				{
+					$$ = cat2_str(make_str("bit"), $2);
+				}
+
 /* 
  * SQL92 character data types
  * The following implements CHAR() and VARCHAR().
@@ -3250,6 +3280,8 @@ a_expr:  c_expr
                  * If you add more explicitly-known operators, be sure to add them
                  * also to b_expr and to the MathOp list above.
                  */
+		| '+' a_expr %prec UMINUS
+				{	$$ = cat2_str(make_str("+"), $2); }
 		| '-' a_expr %prec UMINUS
 				{	$$ = cat2_str(make_str("-"), $2); }
 		| '%' a_expr
@@ -3262,7 +3294,10 @@ a_expr:  c_expr
 				{       $$ = cat2_str(make_str(":"), $2); }
 */
 		| ';' a_expr
-				{       $$ = cat2_str(make_str(";"), $2); }
+				{       $$ = cat2_str(make_str(";"), $2);
+					mmerror(ET_WARN, "The ';' operator is deprecated.  Use ln(x) instead."
+					"\n\tThis operator will be removed in a future release.");
+				}
 		| a_expr '%'
 				{       $$ = cat2_str($1, make_str("%")); }
 		| a_expr '^'
@@ -3380,7 +3415,10 @@ b_expr:  c_expr
 				{       $$ = cat2_str(make_str(":"), $2); }
 */
 		| ';' b_expr
-				{       $$ = cat2_str(make_str(";"), $2); }
+				{       $$ = cat2_str(make_str(";"), $2);
+					mmerror(ET_WARN, "The ';' operator is deprecated.  Use ln(x) instead."
+					"\n\tThis operator will be removed in a future release.");
+				}
 		| b_expr '%'
 				{       $$ = cat2_str($1, make_str("%")); }
 		| b_expr '^'
@@ -3810,6 +3848,8 @@ TypeId:  ColId
 			{	$$ = $1; }
 		| numeric
 			{	$$ = $1; }
+		| bit
+			{	$$ = $1; }
 		| character
 			{	$$ = $1; }
 		;
@@ -4884,6 +4924,7 @@ ECPGColId:  /* to be used instead of ColId */
 	| EACH				{ $$ = make_str("each"); }
 	| ENCODING			{ $$ = make_str("encoding"); }
 	| EXCLUSIVE			{ $$ = make_str("exclusive"); }
+	| FORCE				{ $$ = make_str("force"); }
 	| FORWARD			{ $$ = make_str("forward"); }
 	| FUNCTION			{ $$ = make_str("function"); }
 	| HANDLER			{ $$ = make_str("handler"); }
@@ -4957,7 +4998,9 @@ ECPGColLabel:  ECPGColId		{ $$ = $1; }
 		| ABORT_TRANS           { $$ = make_str("abort"); }
 		| ANALYZE               { $$ = make_str("analyze"); }
 		| BINARY                { $$ = make_str("binary"); }
+		| BIT	                { $$ = make_str("bit"); }
 		| CASE                  { $$ = make_str("case"); }
+		| CHARACTER             { $$ = make_str("character"); }
 		| CLUSTER		{ $$ = make_str("cluster"); }
 		| COALESCE              { $$ = make_str("coalesce"); }
 		| CONSTRAINT		{ $$ = make_str("constraint"); }