diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2023-03-30 21:05:35 +0200 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2023-03-30 21:06:31 +0200 |
commit | 60966f56c3e4db9f9bdff485371ef3a50d53431f (patch) | |
tree | b676c4529a0b4cf882974d3f726b6c9f6c0a359b /src/backend/parser/parse_expr.c | |
parent | 589bb816499e98b60aa5c406c409fb27b42b0e39 (diff) | |
download | postgresql-60966f56c3e4db9f9bdff485371ef3a50d53431f.tar.gz postgresql-60966f56c3e4db9f9bdff485371ef3a50d53431f.zip |
Fix inconsistencies and style issues in new SQL/JSON code
Reported by Alexander Lakhin.
Discussion: https://postgr.es/m/60483139-5c34-851d-baee-6c0d014e1710@gmail.com
Diffstat (limited to 'src/backend/parser/parse_expr.c')
-rw-r--r-- | src/backend/parser/parse_expr.c | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c index a134878b1e9..d706b3dd9e5 100644 --- a/src/backend/parser/parse_expr.c +++ b/src/backend/parser/parse_expr.c @@ -3138,7 +3138,7 @@ makeJsonByteaToTextConversion(Node *expr, JsonFormat *format, int location) } /* - * Make CaseTestExpr node. + * Make a CaseTestExpr node. */ static Node * makeCaseTestExpr(Node *expr) @@ -3456,6 +3456,9 @@ coerceJsonFuncExpr(ParseState *pstate, Node *expr, return res; } +/* + * Make a JsonConstructorExpr node. + */ static Node * makeJsonConstructorExpr(ParseState *pstate, JsonConstructorType type, List *args, Expr *fexpr, JsonReturning *returning, @@ -3464,8 +3467,6 @@ makeJsonConstructorExpr(ParseState *pstate, JsonConstructorType type, JsonConstructorExpr *jsctor = makeNode(JsonConstructorExpr); Node *placeholder; Node *coercion; - Oid intermediate_typid = - returning->format->format_type == JS_FORMAT_JSONB ? JSONBOID : JSONOID; jsctor->args = args; jsctor->func = fexpr; @@ -3481,7 +3482,8 @@ makeJsonConstructorExpr(ParseState *pstate, JsonConstructorType type, { CaseTestExpr *cte = makeNode(CaseTestExpr); - cte->typeId = intermediate_typid; + cte->typeId = returning->format->format_type == JS_FORMAT_JSONB ? + JSONBOID : JSONOID; cte->typeMod = -1; cte->collation = InvalidOid; @@ -3501,7 +3503,7 @@ makeJsonConstructorExpr(ParseState *pstate, JsonConstructorType type, * * JSON_OBJECT() is transformed into json[b]_build_object[_ext]() call * depending on the output JSON format. The first two arguments of - * json[b]_build_object_ext() are absent_on_null and check_key_uniqueness. + * json[b]_build_object_ext() are absent_on_null and check_unique. * * Then function call result is coerced to the target type. */ @@ -3615,9 +3617,11 @@ transformJsonAggConstructor(ParseState *pstate, JsonAggConstructor *agg_ctor, { Oid aggfnoid; Node *node; - Expr *aggfilter = agg_ctor->agg_filter ? (Expr *) - transformWhereClause(pstate, agg_ctor->agg_filter, - EXPR_KIND_FILTER, "FILTER") : NULL; + Expr *aggfilter; + + aggfilter = agg_ctor->agg_filter ? (Expr *) + transformWhereClause(pstate, agg_ctor->agg_filter, + EXPR_KIND_FILTER, "FILTER") : NULL; aggfnoid = DatumGetInt32(DirectFunctionCall1(regprocin, CStringGetDatum(aggfn))); @@ -3631,10 +3635,10 @@ transformJsonAggConstructor(ParseState *pstate, JsonAggConstructor *agg_ctor, wfunc->wintype = aggtype; /* wincollid and inputcollid will be set by parse_collate.c */ wfunc->args = args; + wfunc->aggfilter = aggfilter; /* winref will be set by transformWindowFuncCall */ wfunc->winstar = false; wfunc->winagg = true; - wfunc->aggfilter = aggfilter; wfunc->location = agg_ctor->location; /* @@ -3659,7 +3663,7 @@ transformJsonAggConstructor(ParseState *pstate, JsonAggConstructor *agg_ctor, aggref->aggtype = aggtype; /* aggcollid and inputcollid will be set by parse_collate.c */ - aggref->aggtranstype = InvalidOid; /* will be set by planner */ + /* aggtranstype will be set by planner */ /* aggargtypes will be set by transformAggregateCall */ /* aggdirectargs and args will be set by transformAggregateCall */ /* aggorder and aggdistinct will be set by transformAggregateCall */ @@ -3667,8 +3671,11 @@ transformJsonAggConstructor(ParseState *pstate, JsonAggConstructor *agg_ctor, aggref->aggstar = false; aggref->aggvariadic = false; aggref->aggkind = AGGKIND_NORMAL; + aggref->aggpresorted = false; /* agglevelsup will be set by transformAggregateCall */ aggref->aggsplit = AGGSPLIT_SIMPLE; /* planner might change this */ + aggref->aggno = -1; /* planner will set aggno and aggtransno */ + aggref->aggtransno = -1; aggref->location = agg_ctor->location; transformAggregateCall(pstate, aggref, args, agg_ctor->agg_order, false); @@ -3685,7 +3692,7 @@ transformJsonAggConstructor(ParseState *pstate, JsonAggConstructor *agg_ctor, * Transform JSON_OBJECTAGG() aggregate function. * * JSON_OBJECTAGG() is transformed into - * json[b]_objectagg(key, value, absent_on_null, check_unique) call depending on + * json[b]_objectagg[_unique][_strict](key, value) call depending on * the output JSON format. Then the function call result is coerced to the * target output type. */ |