summaryrefslogtreecommitdiff
path: root/src/backend/parser
diff options
context:
space:
mode:
authorTom Lane2007-09-03 00:39:26 +0000
committerTom Lane2007-09-03 00:39:26 +0000
commit2abae34a2e8fde42be731b4e18d44cd08901464d (patch)
treef555c8fc5d653c24ccc407a06f46e5f1bbbf40f7 /src/backend/parser
parentfcfe801ab84c124d4103f9afb1140c9c2558cb54 (diff)
Implement function-local GUC parameter settings, as per recent discussion.
There are still some loose ends: I didn't do anything about the SET FROM CURRENT idea yet, and it's not real clear whether we are happy with the interaction of SET LOCAL with function-local settings. The documentation is a bit spartan, too.
Diffstat (limited to 'src/backend/parser')
-rw-r--r--src/backend/parser/gram.y36
1 files changed, 23 insertions, 13 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 38ddf4bd486..9f9f644168f 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -11,7 +11,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.600 2007/08/22 05:13:50 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.601 2007/09/03 00:39:16 tgl Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
@@ -4270,6 +4270,16 @@ common_func_opt_item:
{
$$ = makeDefElem("rows", (Node *)$2);
}
+ | SET set_rest
+ {
+ /* we abuse the normal content of a DefElem here */
+ $$ = makeDefElem("set", (Node *)$2);
+ }
+ | VariableResetStmt
+ {
+ /* we abuse the normal content of a DefElem here */
+ $$ = makeDefElem("set", $1);
+ }
;
createfunc_opt_item:
@@ -4564,13 +4574,13 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name
n->newname = $6;
$$ = (Node *)n;
}
- | ALTER FUNCTION func_name func_args RENAME TO name
+ | ALTER FUNCTION function_with_argtypes RENAME TO name
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_FUNCTION;
- n->object = $3;
- n->objarg = extractArgTypes($4);
- n->newname = $7;
+ n->object = $3->funcname;
+ n->objarg = $3->funcargs;
+ n->newname = $6;
$$ = (Node *)n;
}
| ALTER GROUP_P RoleId RENAME TO RoleId
@@ -4755,13 +4765,13 @@ AlterObjectSchemaStmt:
n->newschema = $6;
$$ = (Node *)n;
}
- | ALTER FUNCTION func_name func_args SET SCHEMA name
+ | ALTER FUNCTION function_with_argtypes SET SCHEMA name
{
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_FUNCTION;
- n->object = $3;
- n->objarg = extractArgTypes($4);
- n->newschema = $7;
+ n->object = $3->funcname;
+ n->objarg = $3->funcargs;
+ n->newschema = $6;
$$ = (Node *)n;
}
| ALTER SEQUENCE relation_expr SET SCHEMA name
@@ -4829,13 +4839,13 @@ AlterOwnerStmt: ALTER AGGREGATE func_name aggr_args OWNER TO RoleId
n->newowner = $6;
$$ = (Node *)n;
}
- | ALTER FUNCTION func_name func_args OWNER TO RoleId
+ | ALTER FUNCTION function_with_argtypes OWNER TO RoleId
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_FUNCTION;
- n->object = $3;
- n->objarg = extractArgTypes($4);
- n->newowner = $7;
+ n->object = $3->funcname;
+ n->objarg = $3->funcargs;
+ n->newowner = $6;
$$ = (Node *)n;
}
| ALTER opt_procedural LANGUAGE name OWNER TO RoleId