mirror of
https://github.com/postgres/postgres.git
synced 2025-06-11 20:28:21 +03:00
Get rid of COERCE_DONTCARE.
We don't need this hack any more.
This commit is contained in:
@ -1572,7 +1572,7 @@ check_sql_fn_retval(Oid func_id, Oid rettype, List *queryTreeList,
|
|||||||
rettype,
|
rettype,
|
||||||
-1,
|
-1,
|
||||||
get_typcollation(rettype),
|
get_typcollation(rettype),
|
||||||
COERCE_DONTCARE);
|
COERCE_IMPLICIT_CAST);
|
||||||
/* Relabel is dangerous if TLE is a sort/group or setop column */
|
/* Relabel is dangerous if TLE is a sort/group or setop column */
|
||||||
if (tle->ressortgroupref != 0 || parse->setOperations)
|
if (tle->ressortgroupref != 0 || parse->setOperations)
|
||||||
*modifyTargetList = true;
|
*modifyTargetList = true;
|
||||||
@ -1618,7 +1618,7 @@ check_sql_fn_retval(Oid func_id, Oid rettype, List *queryTreeList,
|
|||||||
rettype,
|
rettype,
|
||||||
-1,
|
-1,
|
||||||
get_typcollation(rettype),
|
get_typcollation(rettype),
|
||||||
COERCE_DONTCARE);
|
COERCE_IMPLICIT_CAST);
|
||||||
/* Relabel is dangerous if sort/group or setop column */
|
/* Relabel is dangerous if sort/group or setop column */
|
||||||
if (tle->ressortgroupref != 0 || parse->setOperations)
|
if (tle->ressortgroupref != 0 || parse->setOperations)
|
||||||
*modifyTargetList = true;
|
*modifyTargetList = true;
|
||||||
@ -1722,7 +1722,7 @@ check_sql_fn_retval(Oid func_id, Oid rettype, List *queryTreeList,
|
|||||||
atttype,
|
atttype,
|
||||||
-1,
|
-1,
|
||||||
get_typcollation(atttype),
|
get_typcollation(atttype),
|
||||||
COERCE_DONTCARE);
|
COERCE_IMPLICIT_CAST);
|
||||||
/* Relabel is dangerous if sort/group or setop column */
|
/* Relabel is dangerous if sort/group or setop column */
|
||||||
if (tle->ressortgroupref != 0 || parse->setOperations)
|
if (tle->ressortgroupref != 0 || parse->setOperations)
|
||||||
*modifyTargetList = true;
|
*modifyTargetList = true;
|
||||||
|
@ -554,8 +554,7 @@ exprIsLengthCoercion(const Node *expr, int32 *coercedTypmod)
|
|||||||
*
|
*
|
||||||
* This is primarily intended to be used during planning. Therefore, it
|
* This is primarily intended to be used during planning. Therefore, it
|
||||||
* strips any existing RelabelType nodes to maintain the planner's invariant
|
* strips any existing RelabelType nodes to maintain the planner's invariant
|
||||||
* that there are not adjacent RelabelTypes, and it uses COERCE_DONTCARE
|
* that there are not adjacent RelabelTypes.
|
||||||
* which would typically be inappropriate earlier.
|
|
||||||
*/
|
*/
|
||||||
Node *
|
Node *
|
||||||
relabel_to_typmod(Node *expr, int32 typmod)
|
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 */
|
/* Apply new typmod, preserving the previous exposed type and collation */
|
||||||
return (Node *) makeRelabelType((Expr *) expr, type, typmod, coll,
|
return (Node *) makeRelabelType((Expr *) expr, type, typmod, coll,
|
||||||
COERCE_DONTCARE);
|
COERCE_EXPLICIT_CAST);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -431,13 +431,13 @@ canonicalize_ec_expression(Expr *expr, Oid req_type, Oid req_collation)
|
|||||||
req_type,
|
req_type,
|
||||||
-1,
|
-1,
|
||||||
req_collation,
|
req_collation,
|
||||||
COERCE_DONTCARE);
|
COERCE_IMPLICIT_CAST);
|
||||||
else if (exprCollation((Node *) expr) != req_collation)
|
else if (exprCollation((Node *) expr) != req_collation)
|
||||||
expr = (Expr *) makeRelabelType(expr,
|
expr = (Expr *) makeRelabelType(expr,
|
||||||
req_type,
|
req_type,
|
||||||
exprTypmod((Node *) expr),
|
exprTypmod((Node *) expr),
|
||||||
req_collation,
|
req_collation,
|
||||||
COERCE_DONTCARE);
|
COERCE_IMPLICIT_CAST);
|
||||||
}
|
}
|
||||||
|
|
||||||
return expr;
|
return expr;
|
||||||
|
@ -982,7 +982,7 @@ generate_setop_tlist(List *colTypes, List *colCollations,
|
|||||||
exprType(expr),
|
exprType(expr),
|
||||||
exprTypmod(expr),
|
exprTypmod(expr),
|
||||||
colColl,
|
colColl,
|
||||||
COERCE_DONTCARE);
|
COERCE_IMPLICIT_CAST);
|
||||||
}
|
}
|
||||||
|
|
||||||
tle = makeTargetEntry((Expr *) expr,
|
tle = makeTargetEntry((Expr *) expr,
|
||||||
|
@ -2789,7 +2789,7 @@ eval_const_expressions_mutator(Node *node,
|
|||||||
relabel->resulttype = exprType(arg);
|
relabel->resulttype = exprType(arg);
|
||||||
relabel->resulttypmod = exprTypmod(arg);
|
relabel->resulttypmod = exprTypmod(arg);
|
||||||
relabel->resultcollid = collate->collOid;
|
relabel->resultcollid = collate->collOid;
|
||||||
relabel->relabelformat = COERCE_DONTCARE;
|
relabel->relabelformat = COERCE_IMPLICIT_CAST;
|
||||||
relabel->location = collate->location;
|
relabel->location = collate->location;
|
||||||
|
|
||||||
/* Don't create stacked RelabelTypes */
|
/* Don't create stacked RelabelTypes */
|
||||||
@ -3625,7 +3625,7 @@ simplify_function(Oid funcid, Oid result_type, int32 result_typmod,
|
|||||||
fexpr.funcid = funcid;
|
fexpr.funcid = funcid;
|
||||||
fexpr.funcresulttype = result_type;
|
fexpr.funcresulttype = result_type;
|
||||||
fexpr.funcretset = func_form->proretset;
|
fexpr.funcretset = func_form->proretset;
|
||||||
fexpr.funcformat = COERCE_DONTCARE;
|
fexpr.funcformat = COERCE_EXPLICIT_CALL;
|
||||||
fexpr.funccollid = result_collid;
|
fexpr.funccollid = result_collid;
|
||||||
fexpr.inputcollid = input_collid;
|
fexpr.inputcollid = input_collid;
|
||||||
fexpr.args = args;
|
fexpr.args = args;
|
||||||
@ -3959,7 +3959,7 @@ evaluate_function(Oid funcid, Oid result_type, int32 result_typmod,
|
|||||||
newexpr->funcid = funcid;
|
newexpr->funcid = funcid;
|
||||||
newexpr->funcresulttype = result_type;
|
newexpr->funcresulttype = result_type;
|
||||||
newexpr->funcretset = false;
|
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->funccollid = result_collid; /* doesn't matter */
|
||||||
newexpr->inputcollid = input_collid;
|
newexpr->inputcollid = input_collid;
|
||||||
newexpr->args = args;
|
newexpr->args = args;
|
||||||
@ -4089,7 +4089,7 @@ inline_function(Oid funcid, Oid result_type, Oid result_collid,
|
|||||||
fexpr->funcid = funcid;
|
fexpr->funcid = funcid;
|
||||||
fexpr->funcresulttype = result_type;
|
fexpr->funcresulttype = result_type;
|
||||||
fexpr->funcretset = false;
|
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->funccollid = result_collid; /* doesn't matter */
|
||||||
fexpr->inputcollid = input_collid;
|
fexpr->inputcollid = input_collid;
|
||||||
fexpr->args = args;
|
fexpr->args = args;
|
||||||
|
@ -1001,7 +1001,7 @@ build_aggregate_fnexprs(Oid *agg_input_types,
|
|||||||
args,
|
args,
|
||||||
InvalidOid,
|
InvalidOid,
|
||||||
agg_input_collation,
|
agg_input_collation,
|
||||||
COERCE_DONTCARE);
|
COERCE_EXPLICIT_CALL);
|
||||||
|
|
||||||
/* see if we have a final function */
|
/* see if we have a final function */
|
||||||
if (!OidIsValid(finalfn_oid))
|
if (!OidIsValid(finalfn_oid))
|
||||||
@ -1027,5 +1027,5 @@ build_aggregate_fnexprs(Oid *agg_input_types,
|
|||||||
args,
|
args,
|
||||||
InvalidOid,
|
InvalidOid,
|
||||||
agg_input_collation,
|
agg_input_collation,
|
||||||
COERCE_DONTCARE);
|
COERCE_EXPLICIT_CALL);
|
||||||
}
|
}
|
||||||
|
@ -316,7 +316,7 @@ typedef enum CoercionContext
|
|||||||
} 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
|
* NB: equal() ignores CoercionForm fields, therefore this *must* not carry
|
||||||
* any semantically significant information. We need that behavior so that
|
* 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_CALL, /* display as a function call */
|
||||||
COERCE_EXPLICIT_CAST, /* display as an explicit cast */
|
COERCE_EXPLICIT_CAST, /* display as an explicit cast */
|
||||||
COERCE_IMPLICIT_CAST, /* implicit cast, so hide it */
|
COERCE_IMPLICIT_CAST /* implicit cast, so hide it */
|
||||||
COERCE_DONTCARE /* special case for planner */
|
|
||||||
} CoercionForm;
|
} CoercionForm;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user