mirror of
https://github.com/postgres/postgres.git
synced 2025-07-03 20:02:46 +03:00
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.
This commit is contained in:
@ -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);
|
|||||||
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);
|
|||||||
|
|
||||||
%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
|
|||||||
| 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 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* 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 @@
|
|||||||
#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() */
|
||||||
|
|
||||||
@ -634,7 +635,17 @@ ProcessUtility(Node *parsetree,
|
|||||||
beginRecipe(stmt);
|
beginRecipe(stmt);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* ********************************
|
||||||
|
* set variable statements
|
||||||
|
*********************************/
|
||||||
|
case T_VariableSetStmt:
|
||||||
|
{
|
||||||
|
VariableSetStmt *n = (VariableSetStmt *) parsetree;
|
||||||
|
SetPGVariable(n->name, n->value);
|
||||||
|
commandTag = "SET_VARIABLE";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
/* ********************************
|
/* ********************************
|
||||||
* default
|
* default
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
#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 @@
|
|||||||
*
|
*
|
||||||
* 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 {
|
|||||||
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 @@
|
|||||||
*
|
*
|
||||||
* 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 {
|
|||||||
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
|
||||||
|
Reference in New Issue
Block a user