143 plan_valid = (*ExecutorStart_hook) (queryDesc, eflags);
157 Assert(queryDesc != NULL);
186 queryDesc->
estate = estate;
247 elog(
ERROR,
"unrecognized operation code: %d",
300 elog(
ERROR,
"ExecutorStartCachedPlan(): missing CachedPlan");
302 elog(
ERROR,
"ExecutorStartCachedPlan(): missing CachedPlanSource");
369 (*ExecutorRun_hook) (queryDesc, direction, count);
385 Assert(queryDesc != NULL);
387 estate = queryDesc->
estate;
478 (*ExecutorFinish_hook) (queryDesc);
490 Assert(queryDesc != NULL);
492 estate = queryDesc->
estate;
541 (*ExecutorEnd_hook) (queryDesc);
553 Assert(queryDesc != NULL);
555 estate = queryDesc->
estate;
621 Assert(queryDesc != NULL);
623 estate = queryDesc->
estate;
662 bool ereport_on_violation)
667#ifdef USE_ASSERT_CHECKING
671 foreach(l, rangeTable)
675 if (rte->perminfoindex != 0)
685 rte->relkind == RELKIND_VIEW));
713 foreach(l, rteperminfos)
721 if (ereport_on_violation)
730 result = (*ExecutorCheckPerms_hook) (rangeTable, rteperminfos,
731 ereport_on_violation);
749 Assert(requiredPerms != 0);
768 remainingPerms = requiredPerms & ~relPerms;
769 if (remainingPerms != 0)
874 elog(
ERROR,
"whole-row update is not implemented");
1079 subplanstate =
ExecInitNode(subplan, estate, sp_eflags);
1105 bool junk_filter_needed =
false;
1108 foreach(tlist,
plan->targetlist)
1114 junk_filter_needed =
true;
1119 if (junk_filter_needed)
1130 tupType =
j->jf_cleanTupType;
1162 switch (resultRel->
rd_rel->relkind)
1164 case RELKIND_RELATION:
1165 case RELKIND_PARTITIONED_TABLE:
1168 case RELKIND_SEQUENCE:
1170 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
1171 errmsg(
"cannot change sequence \"%s\"",
1174 case RELKIND_TOASTVALUE:
1176 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
1177 errmsg(
"cannot change TOAST relation \"%s\"",
1192 case RELKIND_MATVIEW:
1195 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
1196 errmsg(
"cannot change materialized view \"%s\"",
1199 case RELKIND_FOREIGN_TABLE:
1207 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
1208 errmsg(
"cannot insert into foreign table \"%s\"",
1213 (
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
1214 errmsg(
"foreign table \"%s\" does not allow inserts",
1220 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
1221 errmsg(
"cannot update foreign table \"%s\"",
1226 (
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
1227 errmsg(
"foreign table \"%s\" does not allow updates",
1233 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
1234 errmsg(
"cannot delete from foreign table \"%s\"",
1239 (
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
1240 errmsg(
"foreign table \"%s\" does not allow deletes",
1244 elog(
ERROR,
"unrecognized CmdType: %d", (
int) operation);
1250 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
1251 errmsg(
"cannot change relation \"%s\"",
1268 switch (rel->
rd_rel->relkind)
1270 case RELKIND_RELATION:
1271 case RELKIND_PARTITIONED_TABLE:
1274 case RELKIND_SEQUENCE:
1277 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
1278 errmsg(
"cannot lock rows in sequence \"%s\"",
1281 case RELKIND_TOASTVALUE:
1284 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
1285 errmsg(
"cannot lock rows in TOAST relation \"%s\"",
1291 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
1292 errmsg(
"cannot lock rows in view \"%s\"",
1295 case RELKIND_MATVIEW:
1299 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
1300 errmsg(
"cannot lock rows in materialized view \"%s\"",
1303 case RELKIND_FOREIGN_TABLE:
1308 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
1309 errmsg(
"cannot lock rows in foreign table \"%s\"",
1314 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
1315 errmsg(
"cannot lock rows in relation \"%s\"",
1331 Index resultRelationIndex,
1333 int instrument_options)
1336 resultRelInfo->
type = T_ResultRelInfo;
1354 if (instrument_options)
1363 if (resultRelationDesc->
rd_rel->relkind == RELKIND_FOREIGN_TABLE)
1512 if (!partRel->
rd_rel->relispartition)
1513 elog(
ERROR,
"cannot find ancestors of a non-partition result relation");
1514 Assert(rootRelInfo != NULL);
1534 if (ancOid == rootRelOid)
1547 ancResultRels =
lappend(ancResultRels, rInfo);
1549 ancResultRels =
lappend(ancResultRels, rootRelInfo);
1741 bool use_parallel_mode;
1743 uint64 current_tuple_count;
1748 current_tuple_count = 0;
1763 use_parallel_mode =
false;
1769 if (use_parallel_mode)
1814 if (!
dest->receiveSlot(slot,
dest))
1831 current_tuple_count++;
1832 if (numberTuples && numberTuples == current_tuple_count)
1843 if (use_parallel_mode)
1868 if (ncheck != rel->
rd_rel->relchecks)
1869 elog(
ERROR,
"%d pg_constraint record(s) missing for relation \"%s\"",
1881 for (
int i = 0;
i < ncheck;
i++)
1886 if (!check[
i].ccenforced)
1907 for (
int i = 0;
i < ncheck;
i++)
1916 if (checkconstr && !
ExecCheck(checkconstr, econtext))
1933 EState *estate,
bool emitError)
2037 (
errcode(ERRCODE_CHECK_VIOLATION),
2038 errmsg(
"new row for relation \"%s\" violates partition constraint",
2040 val_desc ?
errdetail(
"Failing row contains %s.", val_desc) : 0,
2063 List *notnull_virtual_attrs =
NIL;
2079 if (att->attnotnull && att->attgenerated == ATTRIBUTE_GENERATED_VIRTUAL)
2089 if (notnull_virtual_attrs)
2094 notnull_virtual_attrs);
2102 if (rel->
rd_rel->relchecks > 0)
2106 if ((failed =
ExecRelCheck(resultRelInfo, slot, estate)) != NULL)
2149 (
errcode(ERRCODE_CHECK_VIOLATION),
2150 errmsg(
"new row for relation \"%s\" violates check constraint \"%s\"",
2152 val_desc ?
errdetail(
"Failing row contains %s.", val_desc) : 0,
2197 nnulltest->argisrow =
false;
2222 Assert(exprstate != NULL);
2286 errcode(ERRCODE_NOT_NULL_VIOLATION),
2287 errmsg(
"null value in column \"%s\" of relation \"%s\" violates not-null constraint",
2290 val_desc ?
errdetail(
"Failing row contains %s.", val_desc) : 0,
2333 if (wco->
kind != kind)
2395 (
errcode(ERRCODE_WITH_CHECK_OPTION_VIOLATION),
2396 errmsg(
"new row violates check option for view \"%s\"",
2398 val_desc ?
errdetail(
"Failing row contains %s.",
2405 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
2406 errmsg(
"new row violates row-level security policy \"%s\" for table \"%s\"",
2410 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
2411 errmsg(
"new row violates row-level security policy for table \"%s\"",
2418 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
2419 errmsg(
"target row violates row-level security policy \"%s\" (USING expression) for table \"%s\"",
2423 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
2424 errmsg(
"target row violates row-level security policy (USING expression) for table \"%s\"",
2430 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
2431 errmsg(
"new row violates row-level security policy \"%s\" (USING expression) for table \"%s\"",
2435 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
2436 errmsg(
"new row violates row-level security policy (USING expression) for table \"%s\"",
2475 bool write_comma =
false;
2476 bool write_comma_collist =
false;
2479 bool table_perm =
false;
2480 bool any_perm =
false;
2509 table_perm = any_perm =
true;
2514 for (
i = 0;
i < tupdesc->
natts;
i++)
2516 bool column_perm =
false;
2522 if (att->attisdropped)
2538 column_perm = any_perm =
true;
2540 if (write_comma_collist)
2543 write_comma_collist =
true;
2549 if (table_perm || column_perm)
2551 if (att->attgenerated == ATTRIBUTE_GENERATED_VIRTUAL)
2561 &foutoid, &typisvarlena);
2571 vallen = strlen(
val);
2572 if (vallen <= maxfieldlen)
2594 return collist.
data;
2634 if (rti > 0 && rti <= estate->es_range_table_size &&
2643 elog(
ERROR,
"failed to find ExecRowMark for rangetable index %u", rti);
2670 elog(
ERROR,
"could not find junk %s column", resname);
2679 elog(
ERROR,
"could not find junk %s column", resname);
2689 elog(
ERROR,
"could not find junk %s column", resname);
2743 if (testslot != inputslot)
2796 int epqParam,
List *resultRelations)
2817 epqstate->
plan = subplan;
2841 epqstate->
plan = subplan;
2859 Assert(rti > 0 && rti <= epqstate->parentestate->es_range_table_size);
2894 elog(
ERROR,
"EvalPlanQual doesn't support locking rowmarks");
2911 if (tableoid != erm->
relid)
2934 bool updated =
false;
2940 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
2941 errmsg(
"cannot lock rows in foreign table \"%s\"",
2950 elog(
ERROR,
"failed to fetch tuple for EvalPlanQual recheck");
2965 elog(
ERROR,
"failed to fetch tuple for EvalPlanQual recheck");
3013 if (recheckestate == NULL)
3032 rtsize *
sizeof(
bool));
3220 Assert(rtindex > 0 && rtindex <= rtsize);
3225 rtsize *
sizeof(
bool));
AclResult pg_attribute_aclcheck_all(Oid table_oid, Oid roleid, AclMode mode, AclMaskHow how)
void aclcheck_error(AclResult aclerr, ObjectType objtype, const char *objectname)
AclResult pg_attribute_aclcheck(Oid table_oid, AttrNumber attnum, Oid roleid, AclMode mode)
AclMode pg_class_aclmask(Oid table_oid, Oid roleid, AclMode mask, AclMaskHow how)
AclResult pg_class_aclcheck(Oid table_oid, Oid roleid, AclMode mode)
AttrMap * build_attrmap_by_name_if_req(TupleDesc indesc, TupleDesc outdesc, bool missing_ok)
#define AttributeNumberIsValid(attributeNumber)
#define InvalidAttrNumber
void pgstat_report_query_id(uint64 query_id, bool force)
int bms_next_member(const Bitmapset *a, int prevbit)
int bms_num_members(const Bitmapset *a)
bool bms_is_member(int x, const Bitmapset *a)
Bitmapset * bms_add_member(Bitmapset *a, int x)
Bitmapset * bms_union(const Bitmapset *a, const Bitmapset *b)
bool bms_overlap(const Bitmapset *a, const Bitmapset *b)
Bitmapset * bms_copy(const Bitmapset *a)
#define MemSet(start, val, len)
#define OidIsValid(objectId)
bool IsInplaceUpdateRelation(Relation relation)
int errdetail(const char *fmt,...)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
void ExecReScan(PlanState *node)
ExprState * ExecPrepareExpr(Expr *node, EState *estate)
bool ExecCheck(ExprState *state, ExprContext *econtext)
ExprState * ExecPrepareCheck(List *qual, EState *estate)
void ExecCloseIndices(ResultRelInfo *resultRelInfo)
TupleTableSlot * ExecFilterJunk(JunkFilter *junkfilter, TupleTableSlot *slot)
AttrNumber ExecFindJunkAttributeInTlist(List *targetlist, const char *attrName)
JunkFilter * ExecInitJunkFilter(List *targetList, TupleTableSlot *slot)
static void EvalPlanQualStart(EPQState *epqstate, Plan *planTree)
static void ReportNotNullViolationError(ResultRelInfo *resultRelInfo, TupleTableSlot *slot, EState *estate, int attnum)
LockTupleMode ExecUpdateLockMode(EState *estate, ResultRelInfo *relinfo)
ExecRowMark * ExecFindRowMark(EState *estate, Index rti, bool missing_ok)
ExecAuxRowMark * ExecBuildAuxRowMark(ExecRowMark *erm, List *targetlist)
ExecutorEnd_hook_type ExecutorEnd_hook
ResultRelInfo * ExecGetTriggerResultRel(EState *estate, Oid relid, ResultRelInfo *rootRelInfo)
void CheckValidResultRel(ResultRelInfo *resultRelInfo, CmdType operation, List *mergeActions)
TupleTableSlot * EvalPlanQualSlot(EPQState *epqstate, Relation relation, Index rti)
void EvalPlanQualBegin(EPQState *epqstate)
ExecutorFinish_hook_type ExecutorFinish_hook
char * ExecBuildSlotValueDescription(Oid reloid, TupleTableSlot *slot, TupleDesc tupdesc, Bitmapset *modifiedCols, int maxfieldlen)
static bool ExecCheckOneRelPerms(RTEPermissionInfo *perminfo)
bool ExecutorStart(QueryDesc *queryDesc, int eflags)
bool ExecPartitionCheck(ResultRelInfo *resultRelInfo, TupleTableSlot *slot, EState *estate, bool emitError)
static void ExecEndPlan(PlanState *planstate, EState *estate)
ExecutorStart_hook_type ExecutorStart_hook
void ExecutorStartCachedPlan(QueryDesc *queryDesc, int eflags, CachedPlanSource *plansource, int query_index)
void ExecutorEnd(QueryDesc *queryDesc)
void EvalPlanQualInit(EPQState *epqstate, EState *parentestate, Plan *subplan, List *auxrowmarks, int epqParam, List *resultRelations)
void ExecWithCheckOptions(WCOKind kind, ResultRelInfo *resultRelInfo, TupleTableSlot *slot, EState *estate)
ExecutorCheckPerms_hook_type ExecutorCheckPerms_hook
void InitResultRelInfo(ResultRelInfo *resultRelInfo, Relation resultRelationDesc, Index resultRelationIndex, ResultRelInfo *partition_root_rri, int instrument_options)
void ExecutorFinish(QueryDesc *queryDesc)
static void CheckValidRowMarkRel(Relation rel, RowMarkType markType)
void EvalPlanQualEnd(EPQState *epqstate)
static void ExecCheckXactReadOnly(PlannedStmt *plannedstmt)
void EvalPlanQualSetPlan(EPQState *epqstate, Plan *subplan, List *auxrowmarks)
void ExecutorRewind(QueryDesc *queryDesc)
AttrNumber ExecRelGenVirtualNotNull(ResultRelInfo *resultRelInfo, TupleTableSlot *slot, EState *estate, List *notnull_virtual_attrs)
TupleTableSlot * EvalPlanQual(EPQState *epqstate, Relation relation, Index rti, TupleTableSlot *inputslot)
bool EvalPlanQualFetchRowMark(EPQState *epqstate, Index rti, TupleTableSlot *slot)
bool standard_ExecutorStart(QueryDesc *queryDesc, int eflags)
static bool ExecCheckPermissionsModified(Oid relOid, Oid userid, Bitmapset *modifiedCols, AclMode requiredPerms)
ExecutorRun_hook_type ExecutorRun_hook
static void ExecPostprocessPlan(EState *estate)
static const char * ExecRelCheck(ResultRelInfo *resultRelInfo, TupleTableSlot *slot, EState *estate)
static void ExecutePlan(QueryDesc *queryDesc, CmdType operation, bool sendTuples, uint64 numberTuples, ScanDirection direction, DestReceiver *dest)
void ExecCloseResultRelations(EState *estate)
void standard_ExecutorRun(QueryDesc *queryDesc, ScanDirection direction, uint64 count)
void standard_ExecutorEnd(QueryDesc *queryDesc)
void ExecCloseRangeTableRelations(EState *estate)
void ExecPartitionCheckEmitError(ResultRelInfo *resultRelInfo, TupleTableSlot *slot, EState *estate)
void ExecConstraints(ResultRelInfo *resultRelInfo, TupleTableSlot *slot, EState *estate)
static void InitPlan(QueryDesc *queryDesc, int eflags)
bool ExecCheckPermissions(List *rangeTable, List *rteperminfos, bool ereport_on_violation)
void ExecutorRun(QueryDesc *queryDesc, ScanDirection direction, uint64 count)
List * ExecGetAncestorResultRels(EState *estate, ResultRelInfo *resultRelInfo)
TupleTableSlot * EvalPlanQualNext(EPQState *epqstate)
void standard_ExecutorFinish(QueryDesc *queryDesc)
void ExecDoInitialPruning(EState *estate)
void ExecEndNode(PlanState *node)
PlanState * ExecInitNode(Plan *node, EState *estate, int eflags)
void ExecShutdownNode(PlanState *node)
void CheckCmdReplicaIdentity(Relation rel, CmdType cmd)
void ExecResetTupleTable(List *tupleTable, bool shouldFree)
const TupleTableSlotOps TTSOpsVirtual
TupleTableSlot * ExecInitExtraTupleSlot(EState *estate, TupleDesc tupledesc, const TupleTableSlotOps *tts_ops)
void ExecStoreHeapTupleDatum(Datum data, TupleTableSlot *slot)
TupleTableSlot * MakeTupleTableSlot(TupleDesc tupleDesc, const TupleTableSlotOps *tts_ops)
TupleDesc ExecGetResultType(PlanState *planstate)
Relation ExecGetRangeTableRelation(EState *estate, Index rti, bool isResultRel)
Bitmapset * ExecGetInsertedCols(ResultRelInfo *relinfo, EState *estate)
void ExecInitRangeTable(EState *estate, List *rangeTable, List *permInfos, Bitmapset *unpruned_relids)
Bitmapset * ExecGetUpdatedCols(ResultRelInfo *relinfo, EState *estate)
void FreeExecutorState(EState *estate)
Bitmapset * ExecGetAllUpdatedCols(ResultRelInfo *relinfo, EState *estate)
EState * CreateExecutorState(void)
#define EXEC_FLAG_BACKWARD
#define ResetPerTupleExprContext(estate)
#define GetPerTupleExprContext(estate)
void(* ExecutorFinish_hook_type)(QueryDesc *queryDesc)
static RangeTblEntry * exec_rt_fetch(Index rti, EState *estate)
void(* ExecutorRun_hook_type)(QueryDesc *queryDesc, ScanDirection direction, uint64 count)
static bool ExecQual(ExprState *state, ExprContext *econtext)
bool(* ExecutorCheckPerms_hook_type)(List *rangeTable, List *rtePermInfos, bool ereport_on_violation)
bool(* ExecutorStart_hook_type)(QueryDesc *queryDesc, int eflags)
void(* ExecutorEnd_hook_type)(QueryDesc *queryDesc)
static TupleTableSlot * ExecProcNode(PlanState *node)
static bool ExecPlanStillValid(EState *estate)
#define EXEC_FLAG_SKIP_TRIGGERS
#define EXEC_FLAG_EXPLAIN_ONLY
static Datum ExecGetJunkAttribute(TupleTableSlot *slot, AttrNumber attno, bool *isNull)
#define palloc_array(type, count)
#define palloc0_array(type, count)
char * OidOutputFunctionCall(Oid functionId, Datum val)
FdwRoutine * GetFdwRoutineForRelation(Relation relation, bool makecopy)
Assert(PointerIsAligned(start, uint64))
#define IsParallelWorker()
Instrumentation * InstrAlloc(int n, int instrument_options, bool async_mode)
void InstrStartNode(Instrumentation *instr)
void InstrStopNode(Instrumentation *instr, double nTuples)
static void ItemPointerSetInvalid(ItemPointerData *pointer)
List * lappend(List *list, void *datum)
List * lappend_int(List *list, int datum)
bool CheckRelationOidLockedByMe(Oid relid, LOCKMODE lockmode, bool orstronger)
@ LockTupleNoKeyExclusive
char * get_rel_name(Oid relid)
void getTypeOutputInfo(Oid type, Oid *typOutput, bool *typIsVarlena)
char get_rel_relkind(Oid relid)
Oid get_rel_namespace(Oid relid)
bool MatViewIncrementalMaintenanceIsEnabled(void)
int pg_mbcliplen(const char *mbstr, int len, int limit)
void * palloc0(Size size)
bool isTempNamespace(Oid namespaceId)
void ExecSetParamPlanMulti(const Bitmapset *params, ExprContext *econtext)
ObjectType get_relkind_objtype(char relkind)
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
RTEPermissionInfo * getRTEPermissionInfo(List *rteperminfos, RangeTblEntry *rte)
@ WCO_RLS_MERGE_UPDATE_CHECK
@ WCO_RLS_MERGE_DELETE_CHECK
List * RelationGetPartitionQual(Relation rel)
List * get_partition_ancestors(Oid relid)
FormData_pg_attribute * Form_pg_attribute
#define lfirst_node(type, lc)
static int list_length(const List *l)
#define forboth(cell1, list1, cell2, list2)
#define foreach_current_index(var_or_cell)
#define foreach_int(var, lst)
void pgstat_update_parallel_workers_stats(PgStat_Counter workers_to_launch, PgStat_Counter workers_launched)
PlannedStmt * UpdateCachedPlan(CachedPlanSource *plansource, int query_index, QueryEnvironment *queryEnv)
#define RowMarkRequiresRowShareLock(marktype)
@ ROW_MARK_NOKEYEXCLUSIVE
static Oid DatumGetObjectId(Datum X)
static Pointer DatumGetPointer(Datum X)
@ MERGE_WHEN_NOT_MATCHED_BY_TARGET
@ MERGE_WHEN_NOT_MATCHED_BY_SOURCE
void * stringToNode(const char *str)
#define RelationGetRelid(relation)
#define RelationGetDescr(relation)
#define RelationGetRelationName(relation)
int errtableconstraint(Relation rel, const char *conname)
int errtablecol(Relation rel, int attnum)
Bitmapset * RelationGetIndexAttrBitmap(Relation relation, IndexAttrBitmapKind attrKind)
int errtable(Relation rel)
bool view_has_instead_trigger(Relation view, CmdType event, List *mergeActionList)
Node * build_generation_expression(Relation rel, int attrno)
void error_view_not_updatable(Relation view, CmdType command, List *mergeActionList, const char *detail)
Node * expand_generated_columns_in_expr(Node *node, Relation rel, int rt_index)
int check_enable_rls(Oid relid, Oid checkAsUser, bool noError)
#define ScanDirectionIsNoMovement(direction)
void UnregisterSnapshot(Snapshot snapshot)
Snapshot RegisterSnapshot(Snapshot snapshot)
Snapshot GetActiveSnapshot(void)
void appendBinaryStringInfo(StringInfo str, const void *data, int datalen)
void appendStringInfoString(StringInfo str, const char *s)
void appendStringInfoChar(StringInfo str, char ch)
void initStringInfo(StringInfo str)
ExecAuxRowMark ** relsubs_rowmark
TupleTableSlot * origslot
TupleTableSlot ** relsubs_slot
PlanState * recheckplanstate
List * es_part_prune_infos
struct ExecRowMark ** es_rowmarks
int es_parallel_workers_to_launch
List * es_tuple_routing_result_relations
PlannedStmt * es_plannedstmt
QueryEnvironment * es_queryEnv
ResultRelInfo ** es_result_relations
ParamExecData * es_param_exec_vals
CachedPlan * es_cachedplan
uint64 es_total_processed
Bitmapset * es_unpruned_relids
ParamListInfo es_param_list_info
MemoryContext es_query_cxt
ScanDirection es_direction
struct EPQState * es_epq_active
List * es_trig_target_relations
List * es_opened_result_relations
bool es_use_parallel_mode
int es_parallel_workers_launched
Index es_range_table_size
const char * es_sourceText
List * es_auxmodifytables
JunkFilter * es_junkFilter
Snapshot es_crosscheck_snapshot
LockClauseStrength strength
LockWaitPolicy waitPolicy
TupleTableSlot * ecxt_scantuple
ExecForeignInsert_function ExecForeignInsert
ExecForeignUpdate_function ExecForeignUpdate
RefetchForeignRow_function RefetchForeignRow
ExecForeignDelete_function ExecForeignDelete
IsForeignRelUpdatable_function IsForeignRelUpdatable
NullTestType nulltesttype
LockClauseStrength strength
LockWaitPolicy waitPolicy
Bitmapset * rewindPlanIDs
Bitmapset * unprunableRelids
PlannedStmt * plannedstmt
struct Instrumentation * totaltime
QueryEnvironment * queryEnv
Snapshot crosscheck_snapshot
TupleConversionMap * ri_RootToChildMap
ExprState ** ri_CheckConstraintExprs
TupleTableSlot * ri_PartitionTupleSlot
bool ri_projectNewInfoValid
OnConflictSetState * ri_onConflict
List * ri_onConflictArbiterIndexes
struct ResultRelInfo * ri_RootResultRelInfo
ExprState * ri_PartitionCheckExpr
Instrumentation * ri_TrigInstrument
ExprState * ri_MergeJoinCondition
RelationPtr ri_IndexRelationDescs
TupleTableSlot * ri_ReturningSlot
List * ri_WithCheckOptions
TupleTableSlot * ri_oldTupleSlot
bool ri_RootToChildMapValid
struct CopyMultiInsertBuffer * ri_CopyMultiInsertBuffer
TriggerDesc * ri_TrigDesc
TupleTableSlot * ri_AllNullSlot
ExprState ** ri_GenVirtualNotNullConstraintExprs
Bitmapset * ri_extraUpdatedCols
ExprState ** ri_GeneratedExprsI
TupleConversionMap * ri_ChildToRootMap
bool ri_ChildToRootMapValid
List * ri_MergeActions[NUM_MERGE_MATCH_KINDS]
List * ri_ancestorResultRels
TupleTableSlot * ri_newTupleSlot
List * ri_WithCheckOptionExprs
ProjectionInfo * ri_projectNew
ProjectionInfo * ri_projectReturning
ExprState ** ri_GeneratedExprsU
struct FdwRoutine * ri_FdwRoutine
ExprState ** ri_TrigWhenExprs
FmgrInfo * ri_TrigFunctions
bool ri_usesFdwDirectModify
IndexInfo ** ri_IndexRelationInfo
TupleTableSlot * ri_TrigNewSlot
TupleTableSlot * ri_TrigOldSlot
#define FirstLowInvalidHeapAttributeNumber
void table_close(Relation relation, LOCKMODE lockmode)
Relation table_open(Oid relationId, LOCKMODE lockmode)
TupleTableSlot * table_slot_create(Relation relation, List **reglist)
static bool table_tuple_fetch_row_version(Relation rel, ItemPointer tid, Snapshot snapshot, TupleTableSlot *slot)
TriggerDesc * CopyTriggerDesc(TriggerDesc *trigdesc)
void AfterTriggerEndQuery(EState *estate)
void AfterTriggerAbortQuery(void)
void AfterTriggerBeginQuery(void)
TupleTableSlot * execute_attr_map_slot(AttrMap *attrMap, TupleTableSlot *in_slot, TupleTableSlot *out_slot)
static FormData_pg_attribute * TupleDescAttr(TupleDesc tupdesc, int i)
static TupleTableSlot * ExecClearTuple(TupleTableSlot *slot)
static void slot_getallattrs(TupleTableSlot *slot)
static TupleTableSlot * ExecCopySlot(TupleTableSlot *dstslot, TupleTableSlot *srcslot)
static void ExecMaterializeSlot(TupleTableSlot *slot)
static bool slot_attisnull(TupleTableSlot *slot, int attnum)
void PreventCommandIfReadOnly(const char *cmdname)
void PreventCommandIfParallelMode(const char *cmdname)
static const char * CreateCommandName(Node *parsetree)
void ExitParallelMode(void)
void EnterParallelMode(void)
bool IsInParallelMode(void)
CommandId GetCurrentCommandId(bool used)