*** src/backend/parser/gram.y.orig Wed Mar 22 19:19:29 2006 --- src/backend/parser/gram.y Fri Apr 14 17:50:52 2006 *************** *** 224,231 **** %type stmtblock stmtmulti OptTableElementList TableElementList OptInherit definition opt_distinct opt_definition func_args func_args_list func_as createfunc_opt_list alterfunc_opt_list oper_argtypes RuleActionList RuleActionMulti opt_column_list columnList opt_name_list sort_clause opt_sort_clause sortby_list index_params --- 224,232 ---- %type stmtblock stmtmulti OptTableElementList TableElementList OptInherit definition opt_distinct opt_definition func_args func_args_list func_as createfunc_opt_list alterfunc_opt_list + aggr_args aggr_args_list old_aggr_definition old_aggr_list oper_argtypes RuleActionList RuleActionMulti opt_column_list columnList opt_name_list sort_clause opt_sort_clause sortby_list index_params *************** *** 246,252 **** %type createfunc_opt_item common_func_opt_item %type func_arg %type arg_class ! %type func_return func_type aggr_argtype %type TriggerForType OptTemp %type OnCommitOption --- 247,253 ---- %type createfunc_opt_item common_func_opt_item %type func_arg %type arg_class ! %type func_return func_type %type TriggerForType OptTemp %type OnCommitOption *************** *** 285,291 **** %type TableElement ConstraintElem TableFuncElement %type columnDef ! %type def_elem %type def_arg columnElem where_clause a_expr b_expr c_expr func_expr AexprConst indirection_el columnref in_expr having_clause func_table array_expr --- 286,292 ---- %type TableElement ConstraintElem TableFuncElement %type columnDef ! %type def_elem old_aggr_elem %type def_arg columnElem where_clause a_expr b_expr c_expr func_expr AexprConst indirection_el columnref in_expr having_clause func_table array_expr *************** *** 2671,2681 **** *****************************************************************************/ DefineStmt: ! CREATE AGGREGATE func_name definition { DefineStmt *n = makeNode(DefineStmt); n->kind = OBJECT_AGGREGATE; n->defnames = $3; n->definition = $4; $$ = (Node *)n; } --- 2672,2692 ---- *****************************************************************************/ DefineStmt: ! CREATE AGGREGATE func_name aggr_args definition { DefineStmt *n = makeNode(DefineStmt); n->kind = OBJECT_AGGREGATE; n->defnames = $3; + /* XXX put args somewhere */ + n->definition = $5; + $$ = (Node *)n; + } + | CREATE AGGREGATE func_name old_aggr_definition + { + /* old-style syntax for CREATE AGGREGATE */ + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_AGGREGATE; + n->defnames = $3; n->definition = $4; $$ = (Node *)n; } *************** *** 2764,2769 **** --- 2775,2802 ---- | Sconst { $$ = (Node *)makeString($1); } ; + aggr_args: '(' aggr_args_list ')' { $$ = $2; } + | '(' '*' ')' { $$ = NIL; } + ; + + aggr_args_list: + Typename { $$ = list_make1($1); } + | aggr_args_list ',' Typename { $$ = lappend($1, $3); } + ; + + old_aggr_definition: '(' old_aggr_list ')' { $$ = $2; } + ; + + old_aggr_list: old_aggr_elem { $$ = list_make1($1); } + | old_aggr_list ',' old_aggr_elem { $$ = lappend($1, $3); } + ; + + old_aggr_elem: IDENT '=' def_arg + { + $$ = makeDefElem($1, (Node *)$3); + } + ; + /***************************************************************************** * *************** *** 2960,2966 **** * COMMENT ON [ [ DATABASE | DOMAIN | INDEX | SEQUENCE | TABLE | TYPE | VIEW | * CONVERSION | LANGUAGE | OPERATOR CLASS | LARGE OBJECT | * CAST | COLUMN | SCHEMA | TABLESPACE | ROLE ] | ! * AGGREGATE () | * FUNCTION (arg1, arg2, ...) | * OPERATOR (leftoperand_typ, rightoperand_typ) | * TRIGGER ON | --- 2993,2999 ---- * COMMENT ON [ [ DATABASE | DOMAIN | INDEX | SEQUENCE | TABLE | TYPE | VIEW | * CONVERSION | LANGUAGE | OPERATOR CLASS | LARGE OBJECT | * CAST | COLUMN | SCHEMA | TABLESPACE | ROLE ] | ! * AGGREGATE (arg1, ...) | * FUNCTION (arg1, arg2, ...) | * OPERATOR (leftoperand_typ, rightoperand_typ) | * TRIGGER ON | *************** *** 2980,2993 **** n->comment = $6; $$ = (Node *) n; } ! | COMMENT ON AGGREGATE func_name '(' aggr_argtype ')' ! IS comment_text { CommentStmt *n = makeNode(CommentStmt); n->objtype = OBJECT_AGGREGATE; n->objname = $4; ! n->objargs = list_make1($6); ! n->comment = $9; $$ = (Node *) n; } | COMMENT ON FUNCTION func_name func_args IS comment_text --- 3013,3025 ---- n->comment = $6; $$ = (Node *) n; } ! | COMMENT ON AGGREGATE func_name aggr_args IS comment_text { CommentStmt *n = makeNode(CommentStmt); n->objtype = OBJECT_AGGREGATE; n->objname = $4; ! n->objargs = $5; ! n->comment = $7; $$ = (Node *) n; } | COMMENT ON FUNCTION func_name func_args IS comment_text *************** *** 3844,3850 **** * QUERY: * * DROP FUNCTION funcname (arg1, arg2, ...) [ RESTRICT | CASCADE ] ! * DROP AGGREGATE aggname (aggtype) [ RESTRICT | CASCADE ] * DROP OPERATOR opname (leftoperand_typ, rightoperand_typ) [ RESTRICT | CASCADE ] * *****************************************************************************/ --- 3876,3882 ---- * QUERY: * * DROP FUNCTION funcname (arg1, arg2, ...) [ RESTRICT | CASCADE ] ! * DROP AGGREGATE aggname (arg1, ...) [ RESTRICT | CASCADE ] * DROP OPERATOR opname (leftoperand_typ, rightoperand_typ) [ RESTRICT | CASCADE ] * *****************************************************************************/ *************** *** 3861,3881 **** ; RemoveAggrStmt: ! DROP AGGREGATE func_name '(' aggr_argtype ')' opt_drop_behavior { RemoveAggrStmt *n = makeNode(RemoveAggrStmt); n->aggname = $3; ! n->aggtype = $5; ! n->behavior = $7; $$ = (Node *)n; } ; - aggr_argtype: - Typename { $$ = $1; } - | '*' { $$ = NULL; } - ; - RemoveOperStmt: DROP OPERATOR any_operator '(' oper_argtypes ')' opt_drop_behavior { --- 3893,3908 ---- ; RemoveAggrStmt: ! DROP AGGREGATE func_name aggr_args opt_drop_behavior { RemoveAggrStmt *n = makeNode(RemoveAggrStmt); n->aggname = $3; ! n->aggtype = $4; ! n->behavior = $5; $$ = (Node *)n; } ; RemoveOperStmt: DROP OPERATOR any_operator '(' oper_argtypes ')' opt_drop_behavior { *************** *** 4013,4025 **** * *****************************************************************************/ ! RenameStmt: ALTER AGGREGATE func_name '(' aggr_argtype ')' RENAME TO name { RenameStmt *n = makeNode(RenameStmt); n->renameType = OBJECT_AGGREGATE; n->object = $3; ! n->objarg = list_make1($5); ! n->newname = $9; $$ = (Node *)n; } | ALTER CONVERSION_P any_name RENAME TO name --- 4040,4052 ---- * *****************************************************************************/ ! RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name { RenameStmt *n = makeNode(RenameStmt); n->renameType = OBJECT_AGGREGATE; n->object = $3; ! n->objarg = $4; ! n->newname = $7; $$ = (Node *)n; } | ALTER CONVERSION_P any_name RENAME TO name *************** *** 4153,4165 **** *****************************************************************************/ AlterObjectSchemaStmt: ! ALTER AGGREGATE func_name '(' aggr_argtype ')' SET SCHEMA name { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); n->objectType = OBJECT_AGGREGATE; n->object = $3; ! n->objarg = list_make1($5); ! n->newschema = $9; $$ = (Node *)n; } | ALTER DOMAIN_P any_name SET SCHEMA name --- 4180,4192 ---- *****************************************************************************/ AlterObjectSchemaStmt: ! ALTER AGGREGATE func_name aggr_args SET SCHEMA name { AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); n->objectType = OBJECT_AGGREGATE; n->object = $3; ! n->objarg = $4; ! n->newschema = $7; $$ = (Node *)n; } | ALTER DOMAIN_P any_name SET SCHEMA name *************** *** 4211,4223 **** * *****************************************************************************/ ! AlterOwnerStmt: ALTER AGGREGATE func_name '(' aggr_argtype ')' OWNER TO RoleId { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); n->objectType = OBJECT_AGGREGATE; n->object = $3; ! n->objarg = list_make1($5); ! n->newowner = $9; $$ = (Node *)n; } | ALTER CONVERSION_P any_name OWNER TO RoleId --- 4238,4250 ---- * *****************************************************************************/ ! AlterOwnerStmt: ALTER AGGREGATE func_name aggr_args OWNER TO RoleId { AlterOwnerStmt *n = makeNode(AlterOwnerStmt); n->objectType = OBJECT_AGGREGATE; n->object = $3; ! n->objarg = $4; ! n->newowner = $7; $$ = (Node *)n; } | ALTER CONVERSION_P any_name OWNER TO RoleId