diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 15fc14e9b13df189fd548b163e4893410e915eac..402f3343ae4adb1414ed8749de06fde679b0c4db 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.28 1997/04/02 04:01:03 vadim Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.29 1997/04/02 18:23:07 scrappy Exp $
  *
  * HISTORY
  *    AUTHOR		DATE		MAJOR EVENT
@@ -108,11 +108,12 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
         RevokeStmt, RuleStmt, TransactionStmt, ViewStmt, LoadStmt,
 	CreatedbStmt, DestroydbStmt, VacuumStmt, RetrieveStmt, CursorStmt,
 	ReplaceStmt, AppendStmt, NotifyStmt, DeleteStmt, ClusterStmt,
-	ExplainStmt
+	ExplainStmt, VariableSetStmt
 
 %type <str>	relation_name, copy_file_name, copy_delimiter, def_name,
 	database_name, access_method_clause, access_method, attr_name,
-	class, index_name, var_name, name, file_name, recipe_name
+	class, index_name, var_name, name, file_name, recipe_name,
+	var_name
 
 %type <str>	opt_id, opt_portal_name,
 	before_clause, after_clause, all_Op, MathOp, opt_name, opt_unique,
@@ -168,7 +169,7 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
 
 %type <ival>	Iconst
 %type <str>	Sconst
-%type <str>	Id, date
+%type <str>	Id, date, var_value
 
 
 /*
@@ -273,6 +274,30 @@ stmt :	  AddAttrStmt
 	| CreatedbStmt
 	| DestroydbStmt
 	| VacuumStmt
+	| VariableSetStmt
+	;
+
+/*****************************************************************************
+ * 
+ * Set PG internal variable
+ *    SET var_name TO 'var_value'
+ * 
+ *****************************************************************************/
+
+VariableSetStmt: SET var_name TO var_value
+		{
+		VariableSetStmt *n = makeNode(VariableSetStmt);
+		n->name  = $2;
+		n->value = $4;
+		
+		$$ = (Node *) n;
+		}
+	;
+
+var_name:	Id				{ $$ = $1; }
+	;
+
+var_value:	Sconst		{ $$ = $1; }
 	;
 
 /*****************************************************************************
diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index 7511b154a617e043f7a2b8633b6d917f16acb2da..ec4c7c68aef5a5aa61d1c8f2fb0f84894f5e0f17 100644
--- a/src/backend/tcop/utility.c
+++ b/src/backend/tcop/utility.c
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.13 1997/04/02 04:06:32 vadim Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.14 1997/04/02 18:23:34 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -44,6 +44,7 @@
 #include "rewrite/rewriteDefine.h"
 #include "tcop/tcopdebug.h"
 #include "tcop/dest.h"
+#include "tcop/variable.h"
 #include "tcop/utility.h"
 #include "fmgr.h"       /* For load_file() */
 
@@ -634,7 +635,17 @@ ProcessUtility(Node *parsetree,
 	    beginRecipe(stmt);
 	}
 	break;
-      
+
+	/* ********************************
+	 * set variable statements
+	 *********************************/
+    case T_VariableSetStmt:
+	{
+	    VariableSetStmt *n = (VariableSetStmt *) parsetree;
+	    SetPGVariable(n->name, n->value);
+	    commandTag = "SET_VARIABLE";
+	}
+	break;
       
 	/* ********************************
 	 *	default
diff --git a/src/backend/tcop/variable.c b/src/backend/tcop/variable.c
index 6f279897556142a0d6c89947065a01362024ac04..e3041361394d87614a16aa04d568b04c0063e9fb 100644
--- a/src/backend/tcop/variable.c
+++ b/src/backend/tcop/variable.c
@@ -1,8 +1,10 @@
 #include "postgres.h"
 #include "tcop/variable.h"
 
-bool SetPGVariable(const char *varName, const char *value)
+bool SetPGVariable(const char *name, const char *value)
 	{
+	elog(NOTICE, "Variable %s set to \"%s\"", name, value);
+
 	return TRUE;
 	}
 
diff --git a/src/include/nodes/nodes.h b/src/include/nodes/nodes.h
index 560fd1a38d0153a50b80029322ec12c26cfcaba6..a7c7ae95f1c97df9195f03fe73149b543074395d 100644
--- a/src/include/nodes/nodes.h
+++ b/src/include/nodes/nodes.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: nodes.h,v 1.6 1997/04/02 03:34:44 vadim Exp $
+ * $Id: nodes.h,v 1.7 1997/04/02 18:24:38 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -179,6 +179,7 @@ typedef enum NodeTag {
     T_VacuumStmt,
     T_ExplainStmt,
     T_CreateSeqStmt,
+    T_VariableSetStmt,
 
     T_A_Expr = 700,
     T_Attr,
diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h
index dee1c1eac57bcf3b8a6365404a782a967c513b70..b806326e9ed5bb898faeb46e50b0120ba21ba267 100644
--- a/src/include/nodes/parsenodes.h
+++ b/src/include/nodes/parsenodes.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: parsenodes.h,v 1.11 1997/04/02 03:34:46 vadim Exp $
+ * $Id: parsenodes.h,v 1.12 1997/04/02 18:24:52 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -423,6 +423,17 @@ typedef struct ExplainStmt {
     bool		verbose;	/* print plan info */
 } ExplainStmt;
 
+/* ----------------------
+ * Set Statement
+ * ----------------------
+ */
+
+typedef struct VariableSetStmt {
+	NodeTag	type;
+	char	*name;
+	char	*value;
+	} VariableSetStmt;
+
 
 /*****************************************************************************
  *	Optimizable Statements