Someone (probably me) forgot about handling of typecasts applied to
parameters.
This commit is contained in:
parent
91124a2f66
commit
9606f36210
|
@ -8,7 +8,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.71 2000/02/26 21:11:10 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.72 2000/03/07 23:30:53 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -78,19 +78,21 @@ transformExpr(ParseState *pstate, Node *expr, int precedence)
|
||||||
ParamNo *pno = (ParamNo *) expr;
|
ParamNo *pno = (ParamNo *) expr;
|
||||||
int paramno = pno->number;
|
int paramno = pno->number;
|
||||||
Oid toid = param_type(paramno);
|
Oid toid = param_type(paramno);
|
||||||
Param *param;
|
Param *param = makeNode(Param);
|
||||||
|
|
||||||
if (!OidIsValid(toid))
|
if (!OidIsValid(toid))
|
||||||
elog(ERROR, "Parameter '$%d' is out of range", paramno);
|
elog(ERROR, "Parameter '$%d' is out of range", paramno);
|
||||||
param = makeNode(Param);
|
|
||||||
param->paramkind = PARAM_NUM;
|
param->paramkind = PARAM_NUM;
|
||||||
param->paramid = (AttrNumber) paramno;
|
param->paramid = (AttrNumber) paramno;
|
||||||
param->paramname = "<unnamed>";
|
param->paramname = "<unnamed>";
|
||||||
param->paramtype = (Oid) toid;
|
param->paramtype = toid;
|
||||||
param->param_tlist = (List *) NULL;
|
param->param_tlist = NIL;
|
||||||
result = transformIndirection(pstate, (Node *) param,
|
result = transformIndirection(pstate, (Node *) param,
|
||||||
pno->indirection);
|
pno->indirection);
|
||||||
/* XXX what about cast (typename) applied to Param ??? */
|
/* cope with typecast applied to param */
|
||||||
|
if (pno->typename != NULL)
|
||||||
|
result = parser_typecast_expression(pstate, result,
|
||||||
|
pno->typename);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case T_TypeCast:
|
case T_TypeCast:
|
||||||
|
@ -732,6 +734,7 @@ exprTypmod(Node *expr)
|
||||||
* We assume that a two-argument function named for a datatype, whose
|
* We assume that a two-argument function named for a datatype, whose
|
||||||
* output and first argument types are that datatype, and whose second
|
* output and first argument types are that datatype, and whose second
|
||||||
* input is an int32 constant, represents a forced length coercion.
|
* input is an int32 constant, represents a forced length coercion.
|
||||||
|
*
|
||||||
* XXX It'd be better if the parsetree retained some explicit indication
|
* XXX It'd be better if the parsetree retained some explicit indication
|
||||||
* of the coercion, so we didn't need these heuristics.
|
* of the coercion, so we didn't need these heuristics.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue