diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2023-03-30 21:07:24 +0200 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2023-03-30 21:07:24 +0200 |
commit | 63cc20205c1a0022d808a783b3025029bb09101e (patch) | |
tree | 27acbd610206e2135a6c52e17b061986adb3dbd6 /src/backend/parser/parse_expr.c | |
parent | 60966f56c3e4db9f9bdff485371ef3a50d53431f (diff) | |
download | postgresql-63cc20205c1a0022d808a783b3025029bb09101e.tar.gz postgresql-63cc20205c1a0022d808a783b3025029bb09101e.zip |
Simplify transformJsonAggConstructor() API
There's no need for callers to pass aggregate names so that the function
can resolve them to OIDs, when callers can just pass aggregate OIDs
directly to begin with.
Diffstat (limited to 'src/backend/parser/parse_expr.c')
-rw-r--r-- | src/backend/parser/parse_expr.c | 36 |
1 files changed, 15 insertions, 21 deletions
diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c index d706b3dd9e5..737b479f541 100644 --- a/src/backend/parser/parse_expr.c +++ b/src/backend/parser/parse_expr.c @@ -3611,11 +3611,10 @@ transformJsonArrayQueryConstructor(ParseState *pstate, static Node * transformJsonAggConstructor(ParseState *pstate, JsonAggConstructor *agg_ctor, JsonReturning *returning, List *args, - const char *aggfn, Oid aggtype, + Oid aggfnoid, Oid aggtype, JsonConstructorType ctor_type, bool unique, bool absent_on_null) { - Oid aggfnoid; Node *node; Expr *aggfilter; @@ -3623,9 +3622,6 @@ transformJsonAggConstructor(ParseState *pstate, JsonAggConstructor *agg_ctor, transformWhereClause(pstate, agg_ctor->agg_filter, EXPR_KIND_FILTER, "FILTER") : NULL; - aggfnoid = DatumGetInt32(DirectFunctionCall1(regprocin, - CStringGetDatum(aggfn))); - if (agg_ctor->over) { /* window function */ @@ -3703,7 +3699,7 @@ transformJsonObjectAgg(ParseState *pstate, JsonObjectAgg *agg) Node *key; Node *val; List *args; - const char *aggfnname; + Oid aggfnoid; Oid aggtype; key = transformExprRecurse(pstate, (Node *) agg->arg->key); @@ -3717,13 +3713,13 @@ transformJsonObjectAgg(ParseState *pstate, JsonObjectAgg *agg) { if (agg->absent_on_null) if (agg->unique) - aggfnname = "pg_catalog.jsonb_object_agg_unique_strict"; + aggfnoid = F_JSONB_OBJECT_AGG_UNIQUE_STRICT; else - aggfnname = "pg_catalog.jsonb_object_agg_strict"; + aggfnoid = F_JSONB_OBJECT_AGG_STRICT; else if (agg->unique) - aggfnname = "pg_catalog.jsonb_object_agg_unique"; + aggfnoid = F_JSONB_OBJECT_AGG_UNIQUE; else - aggfnname = "pg_catalog.jsonb_object_agg"; + aggfnoid = F_JSONB_OBJECT_AGG; aggtype = JSONBOID; } @@ -3731,19 +3727,19 @@ transformJsonObjectAgg(ParseState *pstate, JsonObjectAgg *agg) { if (agg->absent_on_null) if (agg->unique) - aggfnname = "pg_catalog.json_object_agg_unique_strict"; + aggfnoid = F_JSON_OBJECT_AGG_UNIQUE_STRICT; else - aggfnname = "pg_catalog.json_object_agg_strict"; + aggfnoid = F_JSON_OBJECT_AGG_STRICT; else if (agg->unique) - aggfnname = "pg_catalog.json_object_agg_unique"; + aggfnoid = F_JSON_OBJECT_AGG_UNIQUE; else - aggfnname = "pg_catalog.json_object_agg"; + aggfnoid = F_JSON_OBJECT_AGG; aggtype = JSONOID; } return transformJsonAggConstructor(pstate, agg->constructor, returning, - args, aggfnname, aggtype, + args, aggfnoid, aggtype, JSCTOR_JSON_OBJECTAGG, agg->unique, agg->absent_on_null); } @@ -3760,7 +3756,7 @@ transformJsonArrayAgg(ParseState *pstate, JsonArrayAgg *agg) { JsonReturning *returning; Node *arg; - const char *aggfnname; + Oid aggfnoid; Oid aggtype; arg = transformJsonValueExpr(pstate, agg->arg, JS_FORMAT_DEFAULT); @@ -3770,19 +3766,17 @@ transformJsonArrayAgg(ParseState *pstate, JsonArrayAgg *agg) if (returning->format->format_type == JS_FORMAT_JSONB) { - aggfnname = agg->absent_on_null ? - "pg_catalog.jsonb_agg_strict" : "pg_catalog.jsonb_agg"; + aggfnoid = agg->absent_on_null ? F_JSONB_AGG_STRICT : F_JSONB_AGG; aggtype = JSONBOID; } else { - aggfnname = agg->absent_on_null ? - "pg_catalog.json_agg_strict" : "pg_catalog.json_agg"; + aggfnoid = agg->absent_on_null ? F_JSON_AGG_STRICT : F_JSON_AGG; aggtype = JSONOID; } return transformJsonAggConstructor(pstate, agg->constructor, returning, - list_make1(arg), aggfnname, aggtype, + list_make1(arg), aggfnoid, aggtype, JSCTOR_JSON_ARRAYAGG, false, agg->absent_on_null); } |