83 (
errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
84 errmsg(
"target lists can have at most %d entries",
146 pcbstate->
pstate = pstate;
197 result =
makeVar(vnum, attrno, vartypeid, type_mod, varcollid, sublevels_up);
215 Oid origArrayType = *arrayType;
244 elog(
ERROR,
"cache lookup failed for type %u", *arrayType);
249 elementType = type_struct_array->typelem;
252 (
errcode(ERRCODE_DATATYPE_MISMATCH),
253 errmsg(
"cannot subscript type %s because it is not an array",
299 bool isSlice =
false;
321 foreach(idx, indirection)
335 foreach(idx, indirection)
355 (
errcode(ERRCODE_DATATYPE_MISMATCH),
356 errmsg(
"array subscript must have type integer"),
375 lowerIndexpr =
lappend(lowerIndexpr, subexpr);
392 (
errcode(ERRCODE_DATATYPE_MISMATCH),
393 errmsg(
"array subscript must have type integer"),
402 upperIndexpr =
lappend(upperIndexpr, subexpr);
409 if (assignFrom !=
NULL)
412 Oid typeneeded = isSlice ? arrayType : elementType;
416 assignFrom, typesource,
417 typeneeded, arrayTypMod,
423 (
errcode(ERRCODE_DATATYPE_MISMATCH),
424 errmsg(
"array assignment requires type %s"
425 " but expression is of type %s",
428 errhint(
"You will need to rewrite or cast the expression."),
430 assignFrom = newFrom;
484 typelen =
sizeof(
int32);
498 if (val64 == (int64) val32)
503 typelen =
sizeof(
int32);
511 typelen =
sizeof(int64);
512 typebyval = FLOAT8PASSBYVAL;
Oid getBaseTypeAndTypmod(Oid typid, int32 *typmod)
#define IsA(nodeptr, _type_)
int errhint(const char *fmt,...)
int exprLocation(const Node *expr)
#define MaxTupleAttributeNumber
void get_rte_attribute_type(RangeTblEntry *rte, AttrNumber attnum, Oid *vartype, int32 *vartypmod, Oid *varcollid)
Node * transformExpr(ParseState *pstate, Node *expr, ParseExprKind exprKind)
CoerceParamHook p_coerce_param_hook
int errcode(int sqlerrcode)
Datum idx(PG_FUNCTION_ARGS)
ErrorContextCallback errcallback
FormData_pg_type * Form_pg_type
Const * make_const(ParseState *pstate, Value *value, int location)
Const * makeConst(Oid consttype, int32 consttypmod, Oid constcollid, int constlen, Datum constvalue, bool constisnull, bool constbyval)
struct ErrorContextCallback * previous
#define OidIsValid(objectId)
#define SearchSysCache1(cacheId, key1)
PostParseColumnRefHook p_post_columnref_hook
ParseState * make_parsestate(ParseState *parentParseState)
int pg_mbstrlen_with_len(const char *mbstr, int limit)
ErrorContextCallback * error_context_stack
void pfree(void *pointer)
void cancel_parser_errposition_callback(ParseCallbackState *pcbstate)
#define ObjectIdGetDatum(X)
Node * coerce_to_target_type(ParseState *pstate, Node *expr, Oid exprtype, Oid targettype, int32 targettypmod, CoercionContext ccontext, CoercionForm cformat, int location)
Datum bit_in(PG_FUNCTION_ARGS)
ParseParamRefHook p_paramref_hook
#define CStringGetDatum(X)
Datum numeric_in(PG_FUNCTION_ARGS)
const char * p_sourcetext
Datum Int64GetDatum(int64 X)
#define ereport(elevel, rest)
Var * makeVar(Index varno, AttrNumber varattno, Oid vartype, int32 vartypmod, Oid varcollid, Index varlevelsup)
void setup_parser_errposition_callback(ParseCallbackState *pcbstate, ParseState *pstate, int location)
#define DirectFunctionCall3(func, arg1, arg2, arg3)
List * lappend(List *list, void *datum)
struct ParseState * parentParseState
void * palloc0(Size size)
void ReleaseSysCache(HeapTuple tuple)
ParseExprKind p_expr_kind
Var * make_var(ParseState *pstate, RangeTblEntry *rte, int attrno, int location)
#define HeapTupleIsValid(tuple)
#define Assert(condition)
Oid exprType(const Node *expr)
int parser_errposition(ParseState *pstate, int location)
int RTERangeTablePosn(ParseState *pstate, RangeTblEntry *rte, int *sublevels_up)
void(* callback)(void *arg)
Oid transformArrayType(Oid *arrayType, int32 *arrayTypmod)
int errmsg(const char *fmt,...)
Relation p_target_relation
PreParseColumnRefHook p_pre_columnref_hook
void free_parsestate(ParseState *pstate)
static void pcb_error_callback(void *arg)
ArrayRef * transformArraySubscripts(ParseState *pstate, Node *arrayBase, Oid arrayType, Oid elementType, int32 arrayTypMod, List *indirection, Node *assignFrom)
int errposition(int cursorpos)
bool scanint8(const char *str, bool errorOK, int64 *result)