]> granicus.if.org Git - postgresql/commitdiff
From: "Martin J. Laubach" <mjl@CSlab.tuwien.ac.at>
authorMarc G. Fournier <scrappy@hub.org>
Wed, 2 Apr 1997 18:24:52 +0000 (18:24 +0000)
committerMarc G. Fournier <scrappy@hub.org>
Wed, 2 Apr 1997 18:24:52 +0000 (18:24 +0000)
Subject: [HACKERS] Patch: SET var TO 'val'

  Here is a patch that adds a "SET variable TO 'somevalue'" capability
to the parser, and then calls the SetPGVariable() function (which does
just issue a elog(NOTICE) to see whether it works).

  That's the framework for adding timezone/date format/language/...
stuff.

src/backend/parser/gram.y
src/backend/tcop/utility.c
src/backend/tcop/variable.c
src/include/nodes/nodes.h
src/include/nodes/parsenodes.h

index 15fc14e9b13df189fd548b163e4893410e915eac..402f3343ae4adb1414ed8749de06fde679b0c4db 100644 (file)
@@ -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; }
        ;
 
 /*****************************************************************************
index 7511b154a617e043f7a2b8633b6d917f16acb2da..ec4c7c68aef5a5aa61d1c8f2fb0f84894f5e0f17 100644 (file)
@@ -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
index 6f279897556142a0d6c89947065a01362024ac04..e3041361394d87614a16aa04d568b04c0063e9fb 100644 (file)
@@ -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;
        }
 
index 560fd1a38d0153a50b80029322ec12c26cfcaba6..a7c7ae95f1c97df9195f03fe73149b543074395d 100644 (file)
@@ -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,
index dee1c1eac57bcf3b8a6365404a782a967c513b70..b806326e9ed5bb898faeb46e50b0120ba21ba267 100644 (file)
@@ -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