57 Oid targetTypeId,
int32 targetTypeMod,
68 const 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),
156 pptype = &(*parstate->
paramTypes)[paramno - 1];
160 *pptype = UNKNOWNOID;
169 *pptype = UNKNOWNOID;
173 param->paramid = paramno;
174 param->paramtype = *pptype;
175 param->paramtypmod = -1;
179 return (
Node *) param;
187 Oid targetTypeId,
int32 targetTypeMod,
203 (
errcode(ERRCODE_UNDEFINED_PARAMETER),
204 errmsg(
"there is no parameter $%d", paramno),
207 if (paramTypes[paramno - 1] == UNKNOWNOID)
210 paramTypes[paramno - 1] = targetTypeId;
212 else if (paramTypes[paramno - 1] == targetTypeId)
220 (
errcode(ERRCODE_AMBIGUOUS_PARAMETER),
221 errmsg(
"inconsistent types deduced for parameter $%d",
238 param->paramtypmod = -1;
249 (param->
location < 0 || location < param->location))
252 return (
Node *) param;
302 (
errcode(ERRCODE_UNDEFINED_PARAMETER),
303 errmsg(
"there is no parameter $%d", paramno),
308 (
errcode(ERRCODE_AMBIGUOUS_PARAMETER),
309 errmsg(
"could not determine data type of parameter $%d",
#define OidIsValid(objectId)
int errdetail(const char *fmt,...)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
#define palloc0_array(type, count)
if(TABLE==NULL||TABLE_index==NULL)
Oid get_typcollation(Oid typid)
#define query_tree_walker(q, w, c, f)
#define expression_tree_walker(n, w, c)
#define IsA(nodeptr, _type_)
#define repalloc0_array(pointer, type, oldcount, count)
int parser_errposition(ParseState *pstate, int location)
@ EXPR_KIND_CALL_ARGUMENT
void check_variable_parameters(ParseState *pstate, Query *query)
struct FixedParamState FixedParamState
bool query_contains_extern_params(Query *query)
void setup_parse_variable_parameters(ParseState *pstate, Oid **paramTypes, int *numParams)
static Node * variable_coerce_param_hook(ParseState *pstate, Param *param, Oid targetTypeId, int32 targetTypeMod, int location)
static Node * variable_paramref_hook(ParseState *pstate, ParamRef *pref)
void setup_parse_fixed_parameters(ParseState *pstate, const Oid *paramTypes, int numParams)
struct VarParamState VarParamState
static Node * fixed_paramref_hook(ParseState *pstate, ParamRef *pref)
static bool check_parameter_resolution_walker(Node *node, ParseState *pstate)
static bool query_contains_extern_params_walker(Node *node, void *context)
ParseExprKind p_expr_kind
ParseParamRefHook p_paramref_hook
CoerceParamHook p_coerce_param_hook