diff --git a/src/backend/executor/functions.c b/src/backend/executor/functions.c index c90521246a5..e28fd89538d 100644 --- a/src/backend/executor/functions.c +++ b/src/backend/executor/functions.c @@ -1572,7 +1572,7 @@ check_sql_fn_retval(Oid func_id, Oid rettype, List *queryTreeList, rettype, -1, get_typcollation(rettype), - COERCE_DONTCARE); + COERCE_IMPLICIT_CAST); /* Relabel is dangerous if TLE is a sort/group or setop column */ if (tle->ressortgroupref != 0 || parse->setOperations) *modifyTargetList = true; @@ -1618,7 +1618,7 @@ check_sql_fn_retval(Oid func_id, Oid rettype, List *queryTreeList, rettype, -1, get_typcollation(rettype), - COERCE_DONTCARE); + COERCE_IMPLICIT_CAST); /* Relabel is dangerous if sort/group or setop column */ if (tle->ressortgroupref != 0 || parse->setOperations) *modifyTargetList = true; @@ -1722,7 +1722,7 @@ check_sql_fn_retval(Oid func_id, Oid rettype, List *queryTreeList, atttype, -1, get_typcollation(atttype), - COERCE_DONTCARE); + COERCE_IMPLICIT_CAST); /* Relabel is dangerous if sort/group or setop column */ if (tle->ressortgroupref != 0 || parse->setOperations) *modifyTargetList = true; diff --git a/src/backend/nodes/nodeFuncs.c b/src/backend/nodes/nodeFuncs.c index b130902dcf2..c52f4ed6ca8 100644 --- a/src/backend/nodes/nodeFuncs.c +++ b/src/backend/nodes/nodeFuncs.c @@ -554,8 +554,7 @@ exprIsLengthCoercion(const Node *expr, int32 *coercedTypmod) * * This is primarily intended to be used during planning. Therefore, it * strips any existing RelabelType nodes to maintain the planner's invariant - * that there are not adjacent RelabelTypes, and it uses COERCE_DONTCARE - * which would typically be inappropriate earlier. + * that there are not adjacent RelabelTypes. */ Node * relabel_to_typmod(Node *expr, int32 typmod) @@ -569,7 +568,7 @@ relabel_to_typmod(Node *expr, int32 typmod) /* Apply new typmod, preserving the previous exposed type and collation */ return (Node *) makeRelabelType((Expr *) expr, type, typmod, coll, - COERCE_DONTCARE); + COERCE_EXPLICIT_CAST); } /* diff --git a/src/backend/optimizer/path/equivclass.c b/src/backend/optimizer/path/equivclass.c index 562177296ca..42286a17e81 100644 --- a/src/backend/optimizer/path/equivclass.c +++ b/src/backend/optimizer/path/equivclass.c @@ -431,13 +431,13 @@ canonicalize_ec_expression(Expr *expr, Oid req_type, Oid req_collation) req_type, -1, req_collation, - COERCE_DONTCARE); + COERCE_IMPLICIT_CAST); else if (exprCollation((Node *) expr) != req_collation) expr = (Expr *) makeRelabelType(expr, req_type, exprTypmod((Node *) expr), req_collation, - COERCE_DONTCARE); + COERCE_IMPLICIT_CAST); } return expr; diff --git a/src/backend/optimizer/prep/prepunion.c b/src/backend/optimizer/prep/prepunion.c index 9e154e1120b..b91e9f417fc 100644 --- a/src/backend/optimizer/prep/prepunion.c +++ b/src/backend/optimizer/prep/prepunion.c @@ -982,7 +982,7 @@ generate_setop_tlist(List *colTypes, List *colCollations, exprType(expr), exprTypmod(expr), colColl, - COERCE_DONTCARE); + COERCE_IMPLICIT_CAST); } tle = makeTargetEntry((Expr *) expr, diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index 5894dd39c17..d5d3afe6000 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -2789,7 +2789,7 @@ eval_const_expressions_mutator(Node *node, relabel->resulttype = exprType(arg); relabel->resulttypmod = exprTypmod(arg); relabel->resultcollid = collate->collOid; - relabel->relabelformat = COERCE_DONTCARE; + relabel->relabelformat = COERCE_IMPLICIT_CAST; relabel->location = collate->location; /* Don't create stacked RelabelTypes */ @@ -3625,7 +3625,7 @@ simplify_function(Oid funcid, Oid result_type, int32 result_typmod, fexpr.funcid = funcid; fexpr.funcresulttype = result_type; fexpr.funcretset = func_form->proretset; - fexpr.funcformat = COERCE_DONTCARE; + fexpr.funcformat = COERCE_EXPLICIT_CALL; fexpr.funccollid = result_collid; fexpr.inputcollid = input_collid; fexpr.args = args; @@ -3959,7 +3959,7 @@ evaluate_function(Oid funcid, Oid result_type, int32 result_typmod, newexpr->funcid = funcid; newexpr->funcresulttype = result_type; newexpr->funcretset = false; - newexpr->funcformat = COERCE_DONTCARE; /* doesn't matter */ + newexpr->funcformat = COERCE_EXPLICIT_CALL; /* doesn't matter */ newexpr->funccollid = result_collid; /* doesn't matter */ newexpr->inputcollid = input_collid; newexpr->args = args; @@ -4089,7 +4089,7 @@ inline_function(Oid funcid, Oid result_type, Oid result_collid, fexpr->funcid = funcid; fexpr->funcresulttype = result_type; fexpr->funcretset = false; - fexpr->funcformat = COERCE_DONTCARE; /* doesn't matter */ + fexpr->funcformat = COERCE_EXPLICIT_CALL; /* doesn't matter */ fexpr->funccollid = result_collid; /* doesn't matter */ fexpr->inputcollid = input_collid; fexpr->args = args; diff --git a/src/backend/parser/parse_agg.c b/src/backend/parser/parse_agg.c index d1d835b8007..b75b2d930d0 100644 --- a/src/backend/parser/parse_agg.c +++ b/src/backend/parser/parse_agg.c @@ -1001,7 +1001,7 @@ build_aggregate_fnexprs(Oid *agg_input_types, args, InvalidOid, agg_input_collation, - COERCE_DONTCARE); + COERCE_EXPLICIT_CALL); /* see if we have a final function */ if (!OidIsValid(finalfn_oid)) @@ -1027,5 +1027,5 @@ build_aggregate_fnexprs(Oid *agg_input_types, args, InvalidOid, agg_input_collation, - COERCE_DONTCARE); + COERCE_EXPLICIT_CALL); } diff --git a/src/include/nodes/primnodes.h b/src/include/nodes/primnodes.h index daabcb6cf9a..a233fce003e 100644 --- a/src/include/nodes/primnodes.h +++ b/src/include/nodes/primnodes.h @@ -316,7 +316,7 @@ typedef enum CoercionContext } CoercionContext; /* - * CoercionForm - information showing how to display a function-call node + * CoercionForm - how to display a node that could have come from a cast * * NB: equal() ignores CoercionForm fields, therefore this *must* not carry * any semantically significant information. We need that behavior so that @@ -328,8 +328,7 @@ typedef enum CoercionForm { COERCE_EXPLICIT_CALL, /* display as a function call */ COERCE_EXPLICIT_CAST, /* display as an explicit cast */ - COERCE_IMPLICIT_CAST, /* implicit cast, so hide it */ - COERCE_DONTCARE /* special case for planner */ + COERCE_IMPLICIT_CAST /* implicit cast, so hide it */ } CoercionForm; /*