57 Oid targetTypeId,
int32 targetTypeMod,
68 Oid *paramTypes,
int numParams)
84 Oid **paramTypes,
int *numParams)
102 int paramno = pref->
number;
106 if (paramno <= 0 || paramno > parstate->
numParams ||
109 (
errcode(ERRCODE_UNDEFINED_PARAMETER),
110 errmsg(
"there is no parameter $%d", paramno),
115 param->paramid = paramno;
116 param->paramtype = parstate->
paramTypes[paramno - 1];
117 param->paramtypmod = -1;
121 return (
Node *) param;
134 int paramno = pref->
number;
139 if (paramno <= 0 || paramno > INT_MAX /
sizeof(
Oid))
141 (
errcode(ERRCODE_UNDEFINED_PARAMETER),
142 errmsg(
"there is no parameter $%d", paramno),
149 paramno *
sizeof(
Oid));
160 pptype = &(*parstate->
paramTypes)[paramno - 1];
168 param->paramid = paramno;
169 param->paramtype = *pptype;
170 param->paramtypmod = -1;
174 return (
Node *) param;
182 Oid targetTypeId,
int32 targetTypeMod,
198 (
errcode(ERRCODE_UNDEFINED_PARAMETER),
199 errmsg(
"there is no parameter $%d", paramno),
205 paramTypes[paramno - 1] = targetTypeId;
207 else if (paramTypes[paramno - 1] == targetTypeId)
215 (
errcode(ERRCODE_AMBIGUOUS_PARAMETER),
216 errmsg(
"inconsistent types deduced for parameter $%d",
244 (param->
location < 0 || location < param->location))
247 return (
Node *) param;
297 (
errcode(ERRCODE_UNDEFINED_PARAMETER),
298 errmsg(
"there is no parameter $%d", paramno),
303 (
errcode(ERRCODE_AMBIGUOUS_PARAMETER),
304 errmsg(
"could not determine data type of parameter $%d",
bool query_tree_walker(Query *query, bool(*walker)(), void *context, int flags)
static Node * variable_coerce_param_hook(ParseState *pstate, Param *param, Oid targetTypeId, int32 targetTypeMod, int location)
#define IsA(nodeptr, _type_)
static bool query_contains_extern_params_walker(Node *node, void *context)
static Node * fixed_paramref_hook(ParseState *pstate, ParamRef *pref)
struct FixedParamState FixedParamState
struct VarParamState VarParamState
CoerceParamHook p_coerce_param_hook
void parse_variable_parameters(ParseState *pstate, Oid **paramTypes, int *numParams)
int errcode(int sqlerrcode)
#define MemSet(start, val, len)
#define OidIsValid(objectId)
ParseParamRefHook p_paramref_hook
int errdetail(const char *fmt,...)
#define ereport(elevel, rest)
static Node * variable_paramref_hook(ParseState *pstate, ParamRef *pref)
static bool check_parameter_resolution_walker(Node *node, ParseState *pstate)
Oid get_typcollation(Oid typid)
void parse_fixed_parameters(ParseState *pstate, Oid *paramTypes, int numParams)
bool expression_tree_walker(Node *node, bool(*walker)(), void *context)
int parser_errposition(ParseState *pstate, int location)
void * repalloc(void *pointer, Size size)
bool query_contains_extern_params(Query *query)
int errmsg(const char *fmt,...)
void check_variable_parameters(ParseState *pstate, Query *query)