Commit 73a4b994 authored by Robert Haas's avatar Robert Haas

Make CREATE/ALTER FUNCTION support NOT LEAKPROOF.

Because it isn't good to be able to turn things on, and not off again.
parent d845fd68
...@@ -33,7 +33,7 @@ ALTER FUNCTION <replaceable>name</replaceable> ( [ [ <replaceable class="paramet ...@@ -33,7 +33,7 @@ ALTER FUNCTION <replaceable>name</replaceable> ( [ [ <replaceable class="paramet
<phrase>where <replaceable class="PARAMETER">action</replaceable> is one of:</phrase> <phrase>where <replaceable class="PARAMETER">action</replaceable> is one of:</phrase>
CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
IMMUTABLE | STABLE | VOLATILE | LEAKPROOF IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF
[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
COST <replaceable class="parameter">execution_cost</replaceable> COST <replaceable class="parameter">execution_cost</replaceable>
ROWS <replaceable class="parameter">result_rows</replaceable> ROWS <replaceable class="parameter">result_rows</replaceable>
......
...@@ -26,7 +26,7 @@ CREATE [ OR REPLACE ] FUNCTION ...@@ -26,7 +26,7 @@ CREATE [ OR REPLACE ] FUNCTION
| RETURNS TABLE ( <replaceable class="parameter">column_name</replaceable> <replaceable class="parameter">column_type</replaceable> [, ...] ) ] | RETURNS TABLE ( <replaceable class="parameter">column_name</replaceable> <replaceable class="parameter">column_type</replaceable> [, ...] ) ]
{ LANGUAGE <replaceable class="parameter">lang_name</replaceable> { LANGUAGE <replaceable class="parameter">lang_name</replaceable>
| WINDOW | WINDOW
| IMMUTABLE | STABLE | VOLATILE | LEAKPROOF | IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF
| CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
| [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
| COST <replaceable class="parameter">execution_cost</replaceable> | COST <replaceable class="parameter">execution_cost</replaceable>
......
...@@ -370,7 +370,7 @@ static void processCASbits(int cas_bits, int location, const char *constrType, ...@@ -370,7 +370,7 @@ static void processCASbits(int cas_bits, int location, const char *constrType,
%type <istmt> insert_rest %type <istmt> insert_rest
%type <vsetstmt> set_rest SetResetClause %type <vsetstmt> set_rest set_rest_more SetResetClause FunctionSetResetClause
%type <node> TableElement TypedTableElement ConstraintElem TableFuncElement %type <node> TableElement TypedTableElement ConstraintElem TableFuncElement
ForeignTableElement ForeignTableElement
...@@ -1227,7 +1227,27 @@ VariableSetStmt: ...@@ -1227,7 +1227,27 @@ VariableSetStmt:
} }
; ;
set_rest: /* Generic SET syntaxes: */ set_rest:
TRANSACTION transaction_mode_list
{
VariableSetStmt *n = makeNode(VariableSetStmt);
n->kind = VAR_SET_MULTI;
n->name = "TRANSACTION";
n->args = $2;
$$ = n;
}
| SESSION CHARACTERISTICS AS TRANSACTION transaction_mode_list
{
VariableSetStmt *n = makeNode(VariableSetStmt);
n->kind = VAR_SET_MULTI;
n->name = "SESSION CHARACTERISTICS";
n->args = $5;
$$ = n;
}
| set_rest_more
;
set_rest_more: /* Generic SET syntaxes: */
var_name TO var_list var_name TO var_list
{ {
VariableSetStmt *n = makeNode(VariableSetStmt); VariableSetStmt *n = makeNode(VariableSetStmt);
...@@ -1277,22 +1297,6 @@ set_rest: /* Generic SET syntaxes: */ ...@@ -1277,22 +1297,6 @@ set_rest: /* Generic SET syntaxes: */
n->kind = VAR_SET_DEFAULT; n->kind = VAR_SET_DEFAULT;
$$ = n; $$ = n;
} }
| TRANSACTION transaction_mode_list
{
VariableSetStmt *n = makeNode(VariableSetStmt);
n->kind = VAR_SET_MULTI;
n->name = "TRANSACTION";
n->args = $2;
$$ = n;
}
| SESSION CHARACTERISTICS AS TRANSACTION transaction_mode_list
{
VariableSetStmt *n = makeNode(VariableSetStmt);
n->kind = VAR_SET_MULTI;
n->name = "SESSION CHARACTERISTICS";
n->args = $5;
$$ = n;
}
| CATALOG_P Sconst | CATALOG_P Sconst
{ {
ereport(ERROR, ereport(ERROR,
...@@ -1512,6 +1516,12 @@ SetResetClause: ...@@ -1512,6 +1516,12 @@ SetResetClause:
| VariableResetStmt { $$ = (VariableSetStmt *) $1; } | VariableResetStmt { $$ = (VariableSetStmt *) $1; }
; ;
/* SetResetClause allows SET or RESET without LOCAL */
FunctionSetResetClause:
SET set_rest_more { $$ = $2; }
| VariableResetStmt { $$ = (VariableSetStmt *) $1; }
;
VariableShowStmt: VariableShowStmt:
SHOW var_name SHOW var_name
...@@ -6119,6 +6129,10 @@ common_func_opt_item: ...@@ -6119,6 +6129,10 @@ common_func_opt_item:
{ {
$$ = makeDefElem("leakproof", (Node *)makeInteger(TRUE)); $$ = makeDefElem("leakproof", (Node *)makeInteger(TRUE));
} }
| NOT LEAKPROOF
{
$$ = makeDefElem("leakproof", (Node *)makeInteger(FALSE));
}
| COST NumericOnly | COST NumericOnly
{ {
$$ = makeDefElem("cost", (Node *)$2); $$ = makeDefElem("cost", (Node *)$2);
...@@ -6127,7 +6141,7 @@ common_func_opt_item: ...@@ -6127,7 +6141,7 @@ common_func_opt_item:
{ {
$$ = makeDefElem("rows", (Node *)$2); $$ = makeDefElem("rows", (Node *)$2);
} }
| SetResetClause | FunctionSetResetClause
{ {
/* we abuse the normal content of a DefElem here */ /* we abuse the normal content of a DefElem here */
$$ = makeDefElem("set", (Node *)$1); $$ = makeDefElem("set", (Node *)$1);
......
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