1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-07 00:36:50 +03:00

Implement OR REPLACE option for CREATE AGGREGATE.

Aggregates have acquired a dozen or so optional attributes in recent
years for things like parallel query and moving-aggregate mode; the
lack of an OR REPLACE option to add or change these for an existing
agg makes extension upgrades gratuitously hard. Rectify.
This commit is contained in:
Andrew Gierth
2019-03-19 01:16:50 +00:00
parent f2004f19ed
commit 01bde4fa4c
13 changed files with 235 additions and 24 deletions

View File

@ -5618,25 +5618,27 @@ CreateAssertionStmt:
*****************************************************************************/
DefineStmt:
CREATE AGGREGATE func_name aggr_args definition
CREATE opt_or_replace AGGREGATE func_name aggr_args definition
{
DefineStmt *n = makeNode(DefineStmt);
n->kind = OBJECT_AGGREGATE;
n->oldstyle = false;
n->defnames = $3;
n->args = $4;
n->definition = $5;
n->replace = $2;
n->defnames = $4;
n->args = $5;
n->definition = $6;
$$ = (Node *)n;
}
| CREATE AGGREGATE func_name old_aggr_definition
| CREATE opt_or_replace AGGREGATE func_name old_aggr_definition
{
/* old-style (pre-8.2) syntax for CREATE AGGREGATE */
DefineStmt *n = makeNode(DefineStmt);
n->kind = OBJECT_AGGREGATE;
n->oldstyle = true;
n->defnames = $3;
n->replace = $2;
n->defnames = $4;
n->args = NIL;
n->definition = $4;
n->definition = $5;
$$ = (Node *)n;
}
| CREATE OPERATOR any_operator definition