<refsynopsisdiv>
<synopsis>
-DROP OPERATOR [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> ( { <replaceable class="PARAMETER">left_type</replaceable> | NONE } , { <replaceable class="PARAMETER">right_type</replaceable> | NONE } ) [ CASCADE | RESTRICT ]
+DROP OPERATOR [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> ( { <replaceable class="PARAMETER">left_type</replaceable> | NONE } , { <replaceable class="PARAMETER">right_type</replaceable> | NONE } ) [, ...] [ CASCADE | RESTRICT ]
</synopsis>
</refsynopsisdiv>
for type <type>bigint</type>:
<programlisting>
DROP OPERATOR ! (bigint, none);
+</programlisting></para>
+
+ <para>
+ Remove multiple operators in one command:
+<programlisting>
+DROP OPERATOR ~ (none, bit), ! (bigint, none);
</programlisting></para>
</refsect1>
%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
}
;
+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); }
*****************************************************************************/
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;
;
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;
;
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;
{ $$ = 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
{
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()
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;