@@ -341,7 +341,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
341341%type <accesspriv> privilege
342342%type <list> privileges privilege_list
343343%type <privtarget> privilege_target
344- %type <funwithargs> function_with_argtypes
344+ %type <funwithargs> function_with_argtypes aggregate_with_argtypes
345345%type <list> function_with_argtypes_list
346346%type <ival> defacl_privilege_target
347347%type <defelt> DefACLOption
@@ -3943,14 +3943,14 @@ AlterExtensionContentsStmt:
39433943n->objname = list_make1(makeString($7 ));
39443944$$ = (Node *)n;
39453945}
3946- | ALTER EXTENSION name add_drop AGGREGATE func_name aggr_args
3946+ | ALTER EXTENSION name add_drop AGGREGATE aggregate_with_argtypes
39473947{
39483948AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
39493949n->extname =$3 ;
39503950n->action =$4 ;
39513951n->objtype = OBJECT_AGGREGATE;
3952- n->objname =$6 ;
3953- n->objargs =extractAggrArgTypes( $7 ) ;
3952+ n->objname =$6 ->funcname ;
3953+ n->objargs =$6 ->funcargs ;
39543954$$ = (Node *)n;
39553955}
39563956| ALTER EXTENSION name add_drop CAST ' (' Typename AS Typename ' )'
@@ -5819,13 +5819,13 @@ CommentStmt:
58195819n->comment =$6 ;
58205820$$ = (Node *) n;
58215821}
5822- | COMMENT ON AGGREGATE func_name aggr_args IS comment_text
5822+ | COMMENT ON AGGREGATE aggregate_with_argtypes IS comment_text
58235823{
58245824CommentStmt *n = makeNode(CommentStmt);
58255825n->objtype = OBJECT_AGGREGATE;
5826- n->objname =$4 ;
5827- n->objargs =extractAggrArgTypes( $5 ) ;
5828- n->comment =$7 ;
5826+ n->objname =$4 ->funcname ;
5827+ n->objargs =$4 ->funcargs ;
5828+ n->comment =$6 ;
58295829$$ = (Node *) n;
58305830}
58315831| COMMENT ON FUNCTION function_with_argtypes IS comment_text
@@ -6035,15 +6035,15 @@ SecLabelStmt:
60356035n->label =$8 ;
60366036$$ = (Node *) n;
60376037}
6038- | SECURITY LABEL opt_provider ON AGGREGATE func_name aggr_args
6038+ | SECURITY LABEL opt_provider ON AGGREGATE aggregate_with_argtypes
60396039IS security_label
60406040{
60416041SecLabelStmt *n = makeNode(SecLabelStmt);
60426042n->provider =$3 ;
60436043n->objtype = OBJECT_AGGREGATE;
6044- n->objname =$6 ;
6045- n->objargs =extractAggrArgTypes( $7 ) ;
6046- n->label =$9 ;
6044+ n->objname =$6 ->funcname ;
6045+ n->objargs =$6 ->funcargs ;
6046+ n->label =$8 ;
60476047$$ = (Node *) n;
60486048}
60496049| SECURITY LABEL opt_provider ON FUNCTION function_with_argtypes
@@ -7103,6 +7103,16 @@ aggr_args_list:
71037103| aggr_args_list ' ,' aggr_arg {$$ = lappend($1 ,$3 ); }
71047104;
71057105
7106+ aggregate_with_argtypes :
7107+ func_name aggr_args
7108+ {
7109+ FuncWithArgs *n = makeNode(FuncWithArgs);
7110+ n->funcname =$1 ;
7111+ n->funcargs = extractAggrArgTypes($2 );
7112+ $$ = n;
7113+ }
7114+ ;
7115+
71067116createfunc_opt_list :
71077117/* Must be at least one to prevent conflict*/
71087118createfunc_opt_item {$$ = list_make1($1 ); }
@@ -7309,24 +7319,24 @@ RemoveFuncStmt:
73097319;
73107320
73117321RemoveAggrStmt :
7312- DROP AGGREGATE func_name aggr_args opt_drop_behavior
7322+ DROP AGGREGATE aggregate_with_argtypes opt_drop_behavior
73137323{
73147324DropStmt *n = makeNode(DropStmt);
73157325n->removeType = OBJECT_AGGREGATE;
7316- n->objects = list_make1($3 );
7317- n->arguments = list_make1(extractAggrArgTypes( $4 ) );
7318- n->behavior =$5 ;
7326+ n->objects = list_make1($3 ->funcname );
7327+ n->arguments = list_make1($3 ->funcargs );
7328+ n->behavior =$4 ;
73197329n->missing_ok =false ;
73207330n->concurrent =false ;
73217331$$ = (Node *)n;
73227332}
7323- | DROP AGGREGATE IF_P EXISTS func_name aggr_args opt_drop_behavior
7333+ | DROP AGGREGATE IF_P EXISTS aggregate_with_argtypes opt_drop_behavior
73247334{
73257335DropStmt *n = makeNode(DropStmt);
73267336n->removeType = OBJECT_AGGREGATE;
7327- n->objects = list_make1($5 );
7328- n->arguments = list_make1(extractAggrArgTypes( $6 ) );
7329- n->behavior =$7 ;
7337+ n->objects = list_make1($5 ->funcname );
7338+ n->arguments = list_make1($5 ->funcargs );
7339+ n->behavior =$6 ;
73307340n->missing_ok =true ;
73317341n->concurrent =false ;
73327342$$ = (Node *)n;
@@ -7625,13 +7635,13 @@ AlterTblSpcStmt:
76257635 *
76267636 *****************************************************************************/
76277637
7628- RenameStmt :ALTER AGGREGATE func_name aggr_args RENAME TO name
7638+ RenameStmt :ALTER AGGREGATE aggregate_with_argtypes RENAME TO name
76297639{
76307640RenameStmt *n = makeNode(RenameStmt);
76317641n->renameType = OBJECT_AGGREGATE;
7632- n->object =$3 ;
7633- n->objarg =extractAggrArgTypes( $4 ) ;
7634- n->newname =$7 ;
7642+ n->object =$3 ->funcname ;
7643+ n->objarg =$3 ->funcargs ;
7644+ n->newname =$6 ;
76357645n->missing_ok =false ;
76367646$$ = (Node *)n;
76377647}
@@ -8157,13 +8167,13 @@ AlterObjectDependsStmt:
81578167 *****************************************************************************/
81588168
81598169AlterObjectSchemaStmt :
8160- ALTER AGGREGATE func_name aggr_args SET SCHEMA name
8170+ ALTER AGGREGATE aggregate_with_argtypes SET SCHEMA name
81618171{
81628172AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
81638173n->objectType = OBJECT_AGGREGATE;
8164- n->object =$3 ;
8165- n->objarg =extractAggrArgTypes( $4 ) ;
8166- n->newschema =$7 ;
8174+ n->object =$3 ->funcname ;
8175+ n->objarg =$3 ->funcargs ;
8176+ n->newschema =$6 ;
81678177n->missing_ok =false ;
81688178$$ = (Node *)n;
81698179}
@@ -8411,13 +8421,13 @@ operator_def_elem: ColLabel '=' NONE
84118421 *
84128422 *****************************************************************************/
84138423
8414- AlterOwnerStmt :ALTER AGGREGATE func_name aggr_args OWNER TO RoleSpec
8424+ AlterOwnerStmt :ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
84158425{
84168426AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
84178427n->objectType = OBJECT_AGGREGATE;
8418- n->object =$3 ;
8419- n->objarg =extractAggrArgTypes( $4 ) ;
8420- n->newowner =$7 ;
8428+ n->object =$3 ->funcname ;
8429+ n->objarg =$3 ->funcargs ;
8430+ n->newowner =$6 ;
84218431$$ = (Node *)n;
84228432}
84238433| ALTER COLLATION any_name OWNER TO RoleSpec