aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser/parse_expr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/parser/parse_expr.c')
-rw-r--r--src/backend/parser/parse_expr.c36
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);
}