Commit b999c247 authored by Peter Eisentraut's avatar Peter Eisentraut

Add aggregate_with_argtypes and use it consistently

This works like function_with_argtypes, but aggregates allow slightly
different arguments.
Reviewed-by: default avatarAlvaro Herrera <alvherre@2ndquadrant.com>
Reviewed-by: default avatarTom Lane <tgl@sss.pgh.pa.us>
parent e696dcce
...@@ -341,7 +341,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); ...@@ -341,7 +341,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
%type <accesspriv> privilege %type <accesspriv> privilege
%type <list> privileges privilege_list %type <list> privileges privilege_list
%type <privtarget> privilege_target %type <privtarget> privilege_target
%type <funwithargs> function_with_argtypes %type <funwithargs> function_with_argtypes aggregate_with_argtypes
%type <list> function_with_argtypes_list %type <list> function_with_argtypes_list
%type <ival> defacl_privilege_target %type <ival> defacl_privilege_target
%type <defelt> DefACLOption %type <defelt> DefACLOption
...@@ -3943,14 +3943,14 @@ AlterExtensionContentsStmt: ...@@ -3943,14 +3943,14 @@ AlterExtensionContentsStmt:
n->objname = list_make1(makeString($7)); n->objname = list_make1(makeString($7));
$$ = (Node *)n; $$ = (Node *)n;
} }
| ALTER EXTENSION name add_drop AGGREGATE func_name aggr_args | ALTER EXTENSION name add_drop AGGREGATE aggregate_with_argtypes
{ {
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3; n->extname = $3;
n->action = $4; n->action = $4;
n->objtype = OBJECT_AGGREGATE; n->objtype = OBJECT_AGGREGATE;
n->objname = $6; n->objname = $6->funcname;
n->objargs = extractAggrArgTypes($7); n->objargs = $6->funcargs;
$$ = (Node *)n; $$ = (Node *)n;
} }
| ALTER EXTENSION name add_drop CAST '(' Typename AS Typename ')' | ALTER EXTENSION name add_drop CAST '(' Typename AS Typename ')'
...@@ -5819,13 +5819,13 @@ CommentStmt: ...@@ -5819,13 +5819,13 @@ CommentStmt:
n->comment = $6; n->comment = $6;
$$ = (Node *) n; $$ = (Node *) n;
} }
| COMMENT ON AGGREGATE func_name aggr_args IS comment_text | COMMENT ON AGGREGATE aggregate_with_argtypes IS comment_text
{ {
CommentStmt *n = makeNode(CommentStmt); CommentStmt *n = makeNode(CommentStmt);
n->objtype = OBJECT_AGGREGATE; n->objtype = OBJECT_AGGREGATE;
n->objname = $4; n->objname = $4->funcname;
n->objargs = extractAggrArgTypes($5); n->objargs = $4->funcargs;
n->comment = $7; n->comment = $6;
$$ = (Node *) n; $$ = (Node *) n;
} }
| COMMENT ON FUNCTION function_with_argtypes IS comment_text | COMMENT ON FUNCTION function_with_argtypes IS comment_text
...@@ -6035,15 +6035,15 @@ SecLabelStmt: ...@@ -6035,15 +6035,15 @@ SecLabelStmt:
n->label = $8; n->label = $8;
$$ = (Node *) n; $$ = (Node *) n;
} }
| SECURITY LABEL opt_provider ON AGGREGATE func_name aggr_args | SECURITY LABEL opt_provider ON AGGREGATE aggregate_with_argtypes
IS security_label IS security_label
{ {
SecLabelStmt *n = makeNode(SecLabelStmt); SecLabelStmt *n = makeNode(SecLabelStmt);
n->provider = $3; n->provider = $3;
n->objtype = OBJECT_AGGREGATE; n->objtype = OBJECT_AGGREGATE;
n->objname = $6; n->objname = $6->funcname;
n->objargs = extractAggrArgTypes($7); n->objargs = $6->funcargs;
n->label = $9; n->label = $8;
$$ = (Node *) n; $$ = (Node *) n;
} }
| SECURITY LABEL opt_provider ON FUNCTION function_with_argtypes | SECURITY LABEL opt_provider ON FUNCTION function_with_argtypes
...@@ -7103,6 +7103,16 @@ aggr_args_list: ...@@ -7103,6 +7103,16 @@ aggr_args_list:
| aggr_args_list ',' aggr_arg { $$ = lappend($1, $3); } | aggr_args_list ',' aggr_arg { $$ = lappend($1, $3); }
; ;
aggregate_with_argtypes:
func_name aggr_args
{
FuncWithArgs *n = makeNode(FuncWithArgs);
n->funcname = $1;
n->funcargs = extractAggrArgTypes($2);
$$ = n;
}
;
createfunc_opt_list: createfunc_opt_list:
/* Must be at least one to prevent conflict */ /* Must be at least one to prevent conflict */
createfunc_opt_item { $$ = list_make1($1); } createfunc_opt_item { $$ = list_make1($1); }
...@@ -7309,24 +7319,24 @@ RemoveFuncStmt: ...@@ -7309,24 +7319,24 @@ RemoveFuncStmt:
; ;
RemoveAggrStmt: RemoveAggrStmt:
DROP AGGREGATE func_name aggr_args opt_drop_behavior DROP AGGREGATE aggregate_with_argtypes opt_drop_behavior
{ {
DropStmt *n = makeNode(DropStmt); DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_AGGREGATE; n->removeType = OBJECT_AGGREGATE;
n->objects = list_make1($3); n->objects = list_make1($3->funcname);
n->arguments = list_make1(extractAggrArgTypes($4)); n->arguments = list_make1($3->funcargs);
n->behavior = $5; n->behavior = $4;
n->missing_ok = false; n->missing_ok = false;
n->concurrent = false; n->concurrent = false;
$$ = (Node *)n; $$ = (Node *)n;
} }
| DROP AGGREGATE IF_P EXISTS func_name aggr_args opt_drop_behavior | DROP AGGREGATE IF_P EXISTS aggregate_with_argtypes opt_drop_behavior
{ {
DropStmt *n = makeNode(DropStmt); DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_AGGREGATE; n->removeType = OBJECT_AGGREGATE;
n->objects = list_make1($5); n->objects = list_make1($5->funcname);
n->arguments = list_make1(extractAggrArgTypes($6)); n->arguments = list_make1($5->funcargs);
n->behavior = $7; n->behavior = $6;
n->missing_ok = true; n->missing_ok = true;
n->concurrent = false; n->concurrent = false;
$$ = (Node *)n; $$ = (Node *)n;
...@@ -7625,13 +7635,13 @@ AlterTblSpcStmt: ...@@ -7625,13 +7635,13 @@ AlterTblSpcStmt:
* *
*****************************************************************************/ *****************************************************************************/
RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name
{ {
RenameStmt *n = makeNode(RenameStmt); RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_AGGREGATE; n->renameType = OBJECT_AGGREGATE;
n->object = $3; n->object = $3->funcname;
n->objarg = extractAggrArgTypes($4); n->objarg = $3->funcargs;
n->newname = $7; n->newname = $6;
n->missing_ok = false; n->missing_ok = false;
$$ = (Node *)n; $$ = (Node *)n;
} }
...@@ -8157,13 +8167,13 @@ AlterObjectDependsStmt: ...@@ -8157,13 +8167,13 @@ AlterObjectDependsStmt:
*****************************************************************************/ *****************************************************************************/
AlterObjectSchemaStmt: AlterObjectSchemaStmt:
ALTER AGGREGATE func_name aggr_args SET SCHEMA name ALTER AGGREGATE aggregate_with_argtypes SET SCHEMA name
{ {
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_AGGREGATE; n->objectType = OBJECT_AGGREGATE;
n->object = $3; n->object = $3->funcname;
n->objarg = extractAggrArgTypes($4); n->objarg = $3->funcargs;
n->newschema = $7; n->newschema = $6;
n->missing_ok = false; n->missing_ok = false;
$$ = (Node *)n; $$ = (Node *)n;
} }
...@@ -8411,13 +8421,13 @@ operator_def_elem: ColLabel '=' NONE ...@@ -8411,13 +8421,13 @@ operator_def_elem: ColLabel '=' NONE
* *
*****************************************************************************/ *****************************************************************************/
AlterOwnerStmt: ALTER AGGREGATE func_name aggr_args OWNER TO RoleSpec AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
{ {
AlterOwnerStmt *n = makeNode(AlterOwnerStmt); AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_AGGREGATE; n->objectType = OBJECT_AGGREGATE;
n->object = $3; n->object = $3->funcname;
n->objarg = extractAggrArgTypes($4); n->objarg = $3->funcargs;
n->newowner = $7; n->newowner = $6;
$$ = (Node *)n; $$ = (Node *)n;
} }
| ALTER COLLATION any_name OWNER TO RoleSpec | ALTER COLLATION any_name OWNER TO RoleSpec
......
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