Commit a51df14a authored by Marc G. Fournier's avatar Marc G. Fournier

From: "Martin J. Laubach" <mjl@CSlab.tuwien.ac.at>

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.
parent 17b5bd33
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* *
* *
* IDENTIFICATION * 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 * HISTORY
* AUTHOR DATE MAJOR EVENT * AUTHOR DATE MAJOR EVENT
...@@ -108,11 +108,12 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr); ...@@ -108,11 +108,12 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
RevokeStmt, RuleStmt, TransactionStmt, ViewStmt, LoadStmt, RevokeStmt, RuleStmt, TransactionStmt, ViewStmt, LoadStmt,
CreatedbStmt, DestroydbStmt, VacuumStmt, RetrieveStmt, CursorStmt, CreatedbStmt, DestroydbStmt, VacuumStmt, RetrieveStmt, CursorStmt,
ReplaceStmt, AppendStmt, NotifyStmt, DeleteStmt, ClusterStmt, ReplaceStmt, AppendStmt, NotifyStmt, DeleteStmt, ClusterStmt,
ExplainStmt ExplainStmt, VariableSetStmt
%type <str> relation_name, copy_file_name, copy_delimiter, def_name, %type <str> relation_name, copy_file_name, copy_delimiter, def_name,
database_name, access_method_clause, access_method, attr_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, %type <str> opt_id, opt_portal_name,
before_clause, after_clause, all_Op, MathOp, opt_name, opt_unique, 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); ...@@ -168,7 +169,7 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
%type <ival> Iconst %type <ival> Iconst
%type <str> Sconst %type <str> Sconst
%type <str> Id, date %type <str> Id, date, var_value
/* /*
...@@ -273,6 +274,30 @@ stmt : AddAttrStmt ...@@ -273,6 +274,30 @@ stmt : AddAttrStmt
| CreatedbStmt | CreatedbStmt
| DestroydbStmt | DestroydbStmt
| VacuumStmt | 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; }
; ;
/***************************************************************************** /*****************************************************************************
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* *
* *
* IDENTIFICATION * 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 @@ ...@@ -44,6 +44,7 @@
#include "rewrite/rewriteDefine.h" #include "rewrite/rewriteDefine.h"
#include "tcop/tcopdebug.h" #include "tcop/tcopdebug.h"
#include "tcop/dest.h" #include "tcop/dest.h"
#include "tcop/variable.h"
#include "tcop/utility.h" #include "tcop/utility.h"
#include "fmgr.h" /* For load_file() */ #include "fmgr.h" /* For load_file() */
...@@ -635,6 +636,16 @@ ProcessUtility(Node *parsetree, ...@@ -635,6 +636,16 @@ ProcessUtility(Node *parsetree,
} }
break; break;
/* ********************************
* set variable statements
*********************************/
case T_VariableSetStmt:
{
VariableSetStmt *n = (VariableSetStmt *) parsetree;
SetPGVariable(n->name, n->value);
commandTag = "SET_VARIABLE";
}
break;
/* ******************************** /* ********************************
* default * default
......
#include "postgres.h" #include "postgres.h"
#include "tcop/variable.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; return TRUE;
} }
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * 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 { ...@@ -179,6 +179,7 @@ typedef enum NodeTag {
T_VacuumStmt, T_VacuumStmt,
T_ExplainStmt, T_ExplainStmt,
T_CreateSeqStmt, T_CreateSeqStmt,
T_VariableSetStmt,
T_A_Expr = 700, T_A_Expr = 700,
T_Attr, T_Attr,
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * 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 { ...@@ -423,6 +423,17 @@ typedef struct ExplainStmt {
bool verbose; /* print plan info */ bool verbose; /* print plan info */
} ExplainStmt; } ExplainStmt;
/* ----------------------
* Set Statement
* ----------------------
*/
typedef struct VariableSetStmt {
NodeTag type;
char *name;
char *value;
} VariableSetStmt;
/***************************************************************************** /*****************************************************************************
* Optimizable Statements * Optimizable Statements
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment