aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/parser/gram.y38
-rw-r--r--src/test/regress/expected/create_function_3.out6
-rw-r--r--src/test/regress/sql/create_function_3.sql2
3 files changed, 29 insertions, 17 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 1b06d358b50..542b09b4b0f 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -358,7 +358,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
%type <list> privileges privilege_list
%type <privtarget> privilege_target
%type <objwithargs> function_with_argtypes aggregate_with_argtypes operator_with_argtypes
-%type <list> function_with_argtypes_list
+%type <list> function_with_argtypes_list aggregate_with_argtypes_list operator_with_argtypes_list
%type <ival> defacl_privilege_target
%type <defelt> DefACLOption
%type <list> DefACLOptionList
@@ -7495,6 +7495,12 @@ aggregate_with_argtypes:
}
;
+aggregate_with_argtypes_list:
+ aggregate_with_argtypes { $$ = list_make1($1); }
+ | aggregate_with_argtypes_list ',' aggregate_with_argtypes
+ { $$ = lappend($1, $3); }
+ ;
+
createfunc_opt_list:
/* Must be at least one to prevent conflict */
createfunc_opt_item { $$ = list_make1($1); }
@@ -7676,21 +7682,21 @@ opt_restrict:
*****************************************************************************/
RemoveFuncStmt:
- DROP FUNCTION function_with_argtypes opt_drop_behavior
+ DROP FUNCTION function_with_argtypes_list opt_drop_behavior
{
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_FUNCTION;
- n->objects = list_make1($3);
+ n->objects = $3;
n->behavior = $4;
n->missing_ok = false;
n->concurrent = false;
$$ = (Node *)n;
}
- | DROP FUNCTION IF_P EXISTS function_with_argtypes opt_drop_behavior
+ | DROP FUNCTION IF_P EXISTS function_with_argtypes_list opt_drop_behavior
{
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_FUNCTION;
- n->objects = list_make1($5);
+ n->objects = $5;
n->behavior = $6;
n->missing_ok = true;
n->concurrent = false;
@@ -7699,21 +7705,21 @@ RemoveFuncStmt:
;
RemoveAggrStmt:
- DROP AGGREGATE aggregate_with_argtypes opt_drop_behavior
+ DROP AGGREGATE aggregate_with_argtypes_list opt_drop_behavior
{
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_AGGREGATE;
- n->objects = list_make1($3);
+ n->objects = $3;
n->behavior = $4;
n->missing_ok = false;
n->concurrent = false;
$$ = (Node *)n;
}
- | DROP AGGREGATE IF_P EXISTS aggregate_with_argtypes opt_drop_behavior
+ | DROP AGGREGATE IF_P EXISTS aggregate_with_argtypes_list opt_drop_behavior
{
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_AGGREGATE;
- n->objects = list_make1($5);
+ n->objects = $5;
n->behavior = $6;
n->missing_ok = true;
n->concurrent = false;
@@ -7722,21 +7728,21 @@ RemoveAggrStmt:
;
RemoveOperStmt:
- DROP OPERATOR operator_with_argtypes opt_drop_behavior
+ DROP OPERATOR operator_with_argtypes_list opt_drop_behavior
{
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_OPERATOR;
- n->objects = list_make1($3);
+ n->objects = $3;
n->behavior = $4;
n->missing_ok = false;
n->concurrent = false;
$$ = (Node *)n;
}
- | DROP OPERATOR IF_P EXISTS operator_with_argtypes opt_drop_behavior
+ | DROP OPERATOR IF_P EXISTS operator_with_argtypes_list opt_drop_behavior
{
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_OPERATOR;
- n->objects = list_make1($5);
+ n->objects = $5;
n->behavior = $6;
n->missing_ok = true;
n->concurrent = false;
@@ -7768,6 +7774,12 @@ any_operator:
{ $$ = lcons(makeString($1), $3); }
;
+operator_with_argtypes_list:
+ operator_with_argtypes { $$ = list_make1($1); }
+ | operator_with_argtypes_list ',' operator_with_argtypes
+ { $$ = lappend($1, $3); }
+ ;
+
operator_with_argtypes:
any_operator oper_argtypes
{
diff --git a/src/test/regress/expected/create_function_3.out b/src/test/regress/expected/create_function_3.out
index 7bb957b51b4..cc4e98a1d4b 100644
--- a/src/test/regress/expected/create_function_3.out
+++ b/src/test/regress/expected/create_function_3.out
@@ -217,9 +217,10 @@ SELECT routine_name, ordinal_position, parameter_name, parameter_default
functest_is_3 | 2 | b |
(7 rows)
+DROP FUNCTION functest_IS_1(int, int, text), functest_IS_2(int), functest_IS_3(int);
-- Cleanups
DROP SCHEMA temp_func_test CASCADE;
-NOTICE: drop cascades to 19 other objects
+NOTICE: drop cascades to 16 other objects
DETAIL: drop cascades to function functest_a_1(text,date)
drop cascades to function functest_a_2(text[])
drop cascades to function functest_a_3()
@@ -236,8 +237,5 @@ drop cascades to function functext_f_1(integer)
drop cascades to function functext_f_2(integer)
drop cascades to function functext_f_3(integer)
drop cascades to function functext_f_4(integer)
-drop cascades to function functest_is_1(integer,integer,text)
-drop cascades to function functest_is_2(integer)
-drop cascades to function functest_is_3(integer)
DROP USER regress_unpriv_user;
RESET search_path;
diff --git a/src/test/regress/sql/create_function_3.sql b/src/test/regress/sql/create_function_3.sql
index 43454ef2f7b..66a463b0895 100644
--- a/src/test/regress/sql/create_function_3.sql
+++ b/src/test/regress/sql/create_function_3.sql
@@ -156,6 +156,8 @@ SELECT routine_name, ordinal_position, parameter_name, parameter_default
WHERE routine_schema = 'temp_func_test' AND routine_name ~ '^functest_is_'
ORDER BY 1, 2;
+DROP FUNCTION functest_IS_1(int, int, text), functest_IS_2(int), functest_IS_3(int);
+
-- Cleanups
DROP SCHEMA temp_func_test CASCADE;