84 bool use_parallel_mode,
109 #define GetInsertedColumns(relinfo, estate) \ 110 (exec_rt_fetch((relinfo)->ri_RangeTableIndex, estate)->insertedCols) 111 #define GetUpdatedColumns(relinfo, estate) \ 112 (exec_rt_fetch((relinfo)->ri_RangeTableIndex, estate)->updatedCols) 113 #define GetAllUpdatedColumns(relinfo, estate) \ 114 (bms_union(exec_rt_fetch((relinfo)->ri_RangeTableIndex, estate)->updatedCols, \ 115 exec_rt_fetch((relinfo)->ri_RangeTableIndex, estate)->extraUpdatedCols)) 146 (*ExecutorStart_hook) (queryDesc, eflags);
158 Assert(queryDesc != NULL);
184 queryDesc->
estate = estate;
242 elog(
ERROR,
"unrecognized operation code: %d",
306 (*ExecutorRun_hook) (queryDesc, direction, count, execute_once);
322 Assert(queryDesc != NULL);
324 estate = queryDesc->
estate;
342 dest = queryDesc->
dest;
361 elog(
ERROR,
"can't re-execute query flagged for single execution");
405 (*ExecutorFinish_hook) (queryDesc);
417 Assert(queryDesc != NULL);
419 estate = queryDesc->
estate;
465 (*ExecutorEnd_hook) (queryDesc);
477 Assert(queryDesc != NULL);
479 estate = queryDesc->
estate;
534 Assert(queryDesc != NULL);
536 estate = queryDesc->
estate;
576 foreach(l, rangeTable)
584 if (ereport_on_violation)
592 result = (*ExecutorCheckPerms_hook) (rangeTable,
593 ereport_on_violation);
622 if (requiredPerms == 0)
643 remainingPerms = requiredPerms & ~relPerms;
644 if (remainingPerms != 0)
747 elog(
ERROR,
"whole-row update is not implemented");
777 foreach(l, plannedstmt->
rtable)
926 subplanstate =
ExecInitNode(subplan, estate, sp_eflags);
952 bool junk_filter_needed =
false;
961 junk_filter_needed =
true;
966 if (junk_filter_needed)
1001 switch (resultRel->
rd_rel->relkind)
1003 case RELKIND_RELATION:
1004 case RELKIND_PARTITIONED_TABLE:
1007 case RELKIND_SEQUENCE:
1009 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
1010 errmsg(
"cannot change sequence \"%s\"",
1013 case RELKIND_TOASTVALUE:
1015 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
1016 errmsg(
"cannot change TOAST relation \"%s\"",
1033 (
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
1034 errmsg(
"cannot insert into view \"%s\"",
1036 errhint(
"To enable inserting into the view, provide an INSTEAD OF INSERT trigger or an unconditional ON INSERT DO INSTEAD rule.")));
1041 (
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
1042 errmsg(
"cannot update view \"%s\"",
1044 errhint(
"To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule.")));
1049 (
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
1050 errmsg(
"cannot delete from view \"%s\"",
1052 errhint(
"To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule.")));
1055 elog(
ERROR,
"unrecognized CmdType: %d", (
int) operation);
1059 case RELKIND_MATVIEW:
1062 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
1063 errmsg(
"cannot change materialized view \"%s\"",
1066 case RELKIND_FOREIGN_TABLE:
1074 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
1075 errmsg(
"cannot insert into foreign table \"%s\"",
1080 (
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
1081 errmsg(
"foreign table \"%s\" does not allow inserts",
1087 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
1088 errmsg(
"cannot update foreign table \"%s\"",
1093 (
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
1094 errmsg(
"foreign table \"%s\" does not allow updates",
1100 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
1101 errmsg(
"cannot delete from foreign table \"%s\"",
1106 (
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
1107 errmsg(
"foreign table \"%s\" does not allow deletes",
1111 elog(
ERROR,
"unrecognized CmdType: %d", (
int) operation);
1117 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
1118 errmsg(
"cannot change relation \"%s\"",
1135 switch (rel->
rd_rel->relkind)
1137 case RELKIND_RELATION:
1138 case RELKIND_PARTITIONED_TABLE:
1141 case RELKIND_SEQUENCE:
1144 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
1145 errmsg(
"cannot lock rows in sequence \"%s\"",
1148 case RELKIND_TOASTVALUE:
1151 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
1152 errmsg(
"cannot lock rows in TOAST relation \"%s\"",
1158 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
1159 errmsg(
"cannot lock rows in view \"%s\"",
1162 case RELKIND_MATVIEW:
1166 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
1167 errmsg(
"cannot lock rows in materialized view \"%s\"",
1170 case RELKIND_FOREIGN_TABLE:
1175 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
1176 errmsg(
"cannot lock rows in foreign table \"%s\"",
1181 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
1182 errmsg(
"cannot lock rows in relation \"%s\"",
1198 Index resultRelationIndex,
1200 int instrument_options)
1219 if (instrument_options)
1228 if (resultRelationDesc->
rd_rel->relkind == RELKIND_FOREIGN_TABLE)
1499 bool use_parallel_mode,
1502 uint64 numberTuples,
1508 uint64 current_tuple_count;
1513 current_tuple_count = 0;
1525 use_parallel_mode =
false;
1528 if (use_parallel_mode)
1590 current_tuple_count++;
1591 if (numberTuples && numberTuples == current_tuple_count)
1602 if (use_parallel_mode)
1633 for (i = 0; i < ncheck; i++)
1654 for (i = 0; i < ncheck; i++)
1680 EState *estate,
bool emitError)
1721 if (!success && emitError)
1782 (
errcode(ERRCODE_CHECK_VIOLATION),
1783 errmsg(
"new row for relation \"%s\" violates partition constraint",
1785 val_desc ?
errdetail(
"Failing row contains %s.", val_desc) : 0,
1815 int natts = tupdesc->
natts;
1818 for (attrChk = 1; attrChk <= natts; attrChk++)
1856 modifiedCols =
bms_union(insertedCols, updatedCols);
1864 (
errcode(ERRCODE_NOT_NULL_VIOLATION),
1865 errmsg(
"null value in column \"%s\" of relation \"%s\" violates not-null constraint",
1868 val_desc ?
errdetail(
"Failing row contains %s.", val_desc) : 0,
1878 if ((failed =
ExecRelCheck(resultRelInfo, slot, estate)) != NULL)
1906 modifiedCols =
bms_union(insertedCols, updatedCols);
1913 (
errcode(ERRCODE_CHECK_VIOLATION),
1914 errmsg(
"new row for relation \"%s\" violates check constraint \"%s\"",
1916 val_desc ?
errdetail(
"Failing row contains %s.", val_desc) : 0,
1961 if (wco->
kind != kind)
2013 modifiedCols =
bms_union(insertedCols, updatedCols);
2021 (
errcode(ERRCODE_WITH_CHECK_OPTION_VIOLATION),
2022 errmsg(
"new row violates check option for view \"%s\"",
2024 val_desc ?
errdetail(
"Failing row contains %s.",
2031 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
2032 errmsg(
"new row violates row-level security policy \"%s\" for table \"%s\"",
2036 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
2037 errmsg(
"new row violates row-level security policy for table \"%s\"",
2043 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
2044 errmsg(
"new row violates row-level security policy \"%s\" (USING expression) for table \"%s\"",
2048 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
2049 errmsg(
"new row violates row-level security policy (USING expression) for table \"%s\"",
2088 bool write_comma =
false;
2089 bool write_comma_collist =
false;
2092 bool table_perm =
false;
2093 bool any_perm =
false;
2122 table_perm = any_perm =
true;
2127 for (i = 0; i < tupdesc->
natts; i++)
2129 bool column_perm =
false;
2135 if (att->attisdropped)
2151 column_perm = any_perm =
true;
2153 if (write_comma_collist)
2156 write_comma_collist =
true;
2162 if (table_perm || column_perm)
2172 &foutoid, &typisvarlena);
2182 vallen = strlen(val);
2183 if (vallen <= maxfieldlen)
2205 return collist.
data;
2245 if (rti > 0 && rti <= estate->es_range_table_size &&
2254 elog(
ERROR,
"failed to find ExecRowMark for rangetable index %u", rti);
2281 elog(
ERROR,
"could not find junk %s column", resname);
2290 elog(
ERROR,
"could not find junk %s column", resname);
2300 elog(
ERROR,
"could not find junk %s column", resname);
2354 if (testslot != inputslot)
2391 Plan *subplan,
List *auxrowmarks,
int epqParam)
2411 epqstate->
plan = subplan;
2433 epqstate->
plan = subplan;
2451 Assert(rti > 0 && rti <= epqstate->parentestate->es_range_table_size);
2484 elog(
ERROR,
"EvalPlanQual doesn't support locking rowmarks");
2501 if (tableoid != erm->
relid)
2524 bool updated =
false;
2530 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
2531 errmsg(
"cannot lock rows in foreign table \"%s\"",
2540 elog(
ERROR,
"failed to fetch tuple for EvalPlanQual recheck");
2555 elog(
ERROR,
"failed to fetch tuple for EvalPlanQual recheck");
2603 if (recheckestate == NULL)
2786 palloc0(rtsize *
sizeof(
bool));
TupleTableSlot * table_slot_create(Relation relation, List **reglist)
#define GetUpdatedColumns(relinfo, estate)
bool(* receiveSlot)(TupleTableSlot *slot, DestReceiver *self)
TupleTableSlot ** relsubs_slot
ExecForeignDelete_function ExecForeignDelete
static TupleTableSlot * ExecCopySlot(TupleTableSlot *dstslot, TupleTableSlot *srcslot)
void ExecInitRangeTable(EState *estate, List *rangeTable)
void InstrStopNode(Instrumentation *instr, double nTuples)
void(* ExecutorRun_hook_type)(QueryDesc *queryDesc, ScanDirection direction, uint64 count, bool execute_once)
JunkFilter * ri_junkFilter
JunkFilter * es_junkFilter
void standard_ExecutorRun(QueryDesc *queryDesc, ScanDirection direction, uint64 count, bool execute_once)
void InitResultRelInfo(ResultRelInfo *resultRelInfo, Relation resultRelationDesc, Index resultRelationIndex, Relation partition_root, int instrument_options)
void ExecSetParamPlanMulti(const Bitmapset *params, ExprContext *econtext)
void table_close(Relation relation, LOCKMODE lockmode)
int errhint(const char *fmt,...)
void ExecWithCheckOptions(WCOKind kind, ResultRelInfo *resultRelInfo, TupleTableSlot *slot, EState *estate)
#define forboth(cell1, list1, cell2, list2)
void getTypeOutputInfo(Oid type, Oid *typOutput, bool *typIsVarlena)
TupleTableSlot * ExecInitExtraTupleSlot(EState *estate, TupleDesc tupledesc, const TupleTableSlotOps *tts_ops)
static void ExecPostprocessPlan(EState *estate)
struct CopyMultiInsertBuffer * ri_CopyMultiInsertBuffer
void PreventCommandIfParallelMode(const char *cmdname)
static TupleTableSlot * ExecClearTuple(TupleTableSlot *slot)
Snapshot RegisterSnapshot(Snapshot snapshot)
AclResult pg_attribute_aclcheck(Oid table_oid, AttrNumber attnum, Oid roleid, AclMode mode)
#define ResetPerTupleExprContext(estate)
AttrNumber ExecFindJunkAttributeInTlist(List *targetlist, const char *attrName)
#define RelationGetDescr(relation)
bool EvalPlanQualFetchRowMark(EPQState *epqstate, Index rti, TupleTableSlot *slot)
bool ExecShutdownNode(PlanState *node)
void ExecEndNode(PlanState *node)
bool MatViewIncrementalMaintenanceIsEnabled(void)
#define TupleDescAttr(tupdesc, i)
void ExecCloseResultRelations(EState *estate)
static const char * CreateCommandName(Node *parsetree)
ExecForeignInsert_function ExecForeignInsert
char get_rel_relkind(Oid relid)
ExprState * ExecPrepareCheck(List *qual, EState *estate)
#define DatumGetObjectId(X)
Relation ri_PartitionRoot
ExprState * ri_PartitionCheckExpr
void standard_ExecutorStart(QueryDesc *queryDesc, int eflags)
void ExecReScan(PlanState *node)
int bms_next_member(const Bitmapset *a, int prevbit)
const TupleTableSlotOps TTSOpsVirtual
Oid get_rel_namespace(Oid relid)
void ExecutorStart(QueryDesc *queryDesc, int eflags)
void ExecConstraints(ResultRelInfo *resultRelInfo, TupleTableSlot *slot, EState *estate)
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
Instrumentation * ri_TrigInstrument
PlannedStmt * es_plannedstmt
#define GetAllUpdatedColumns(relinfo, estate)
TupleConversionMap * ri_ChildToRootMap
Snapshot es_crosscheck_snapshot
int errcode(int sqlerrcode)
void standard_ExecutorEnd(QueryDesc *queryDesc)
void * stringToNode(const char *str)
Instrumentation * InstrAlloc(int n, int instrument_options)
LockWaitPolicy waitPolicy
void(* ExecutorFinish_hook_type)(QueryDesc *queryDesc)
#define MemSet(start, val, len)
#define EXEC_FLAG_WITH_NO_DATA
#define FirstLowInvalidHeapAttributeNumber
void EvalPlanQualSetPlan(EPQState *epqstate, Plan *subplan, List *auxrowmarks)
bool(* ExecutorCheckPerms_hook_type)(List *, bool)
LockClauseStrength strength
static bool ExecQual(ExprState *state, ExprContext *econtext)
TupleTableSlot * ri_TrigNewSlot
#define ScanDirectionIsNoMovement(direction)
LockWaitPolicy waitPolicy
static void CheckValidRowMarkRel(Relation rel, RowMarkType markType)
AclMode pg_class_aclmask(Oid table_oid, Oid roleid, AclMode mask, AclMaskHow how)
#define OidIsValid(objectId)
ExprState * ExecPrepareExpr(Expr *node, EState *estate)
#define RowMarkRequiresRowShareLock(marktype)
ScanDirection es_direction
struct EPQState * es_epq_active
void standard_ExecutorFinish(QueryDesc *queryDesc)
void ExecCloseRangeTableRelations(EState *estate)
TupleTableSlot * EvalPlanQualNext(EPQState *epqstate)
void EvalPlanQualEnd(EPQState *epqstate)
ExecutorStart_hook_type ExecutorStart_hook
bool es_use_parallel_mode
struct ExecRowMark ** es_rowmarks
List * ri_WithCheckOptionExprs
void ExecutorEnd(QueryDesc *queryDesc)
bool trig_insert_instead_row
void FreeExecutorState(EState *estate)
#define GetPerTupleExprContext(estate)
int errtableconstraint(Relation rel, const char *conname)
const char * es_sourceText
void aclcheck_error(AclResult aclerr, ObjectType objtype, const char *objectname)
ParamExecData * es_param_exec_vals
QueryEnvironment * queryEnv
MemoryContext es_query_cxt
bool IsInParallelMode(void)
AttrMap * build_attrmap_by_name_if_req(TupleDesc indesc, TupleDesc outdesc)
ExecutorRun_hook_type ExecutorRun_hook
ExecutorEnd_hook_type ExecutorEnd_hook
void ExecutorRun(QueryDesc *queryDesc, ScanDirection direction, uint64 count, bool execute_once)
void InstrStartNode(Instrumentation *instr)
static char * ExecBuildSlotValueDescription(Oid reloid, TupleTableSlot *slot, TupleDesc tupdesc, Bitmapset *modifiedCols, int maxfieldlen)
void(* rStartup)(DestReceiver *self, int operation, TupleDesc typeinfo)
TupleTableSlot * ri_PartitionTupleSlot
int pg_mbcliplen(const char *mbstr, int len, int limit)
TupleTableSlot * EvalPlanQualSlot(EPQState *epqstate, Relation relation, Index rti)
static void slot_getallattrs(TupleTableSlot *slot)
bool ri_usesFdwDirectModify
void ExitParallelMode(void)
void CheckValidResultRel(ResultRelInfo *resultRelInfo, CmdType operation)
#define EXEC_FLAG_BACKWARD
ExprState ** ri_TrigWhenExprs
static void EvalPlanQualStart(EPQState *epqstate, Plan *planTree)
void appendStringInfoString(StringInfo str, const char *s)
TupleDesc jf_cleanTupType
TupleTableSlot * ri_ReturningSlot
List * es_opened_result_relations
static bool ExecCheckRTEPermsModified(Oid relOid, Oid userid, Bitmapset *modifiedCols, AclMode requiredPerms)
int errdetail(const char *fmt,...)
void ExecPartitionCheckEmitError(ResultRelInfo *resultRelInfo, TupleTableSlot *slot, EState *estate)
ExprState ** ri_GeneratedExprs
#define RelationGetRelationName(relation)
static bool ExecCheckRTEPerms(RangeTblEntry *rte)
TupleTableSlot * EvalPlanQual(EPQState *epqstate, Relation relation, Index rti, TupleTableSlot *inputslot)
ProjectionInfo * ri_projectReturning
static RangeTblEntry * exec_rt_fetch(Index rti, EState *estate)
FormData_pg_attribute * Form_pg_attribute
struct FdwRoutine * ri_FdwRoutine
bool isTempNamespace(Oid namespaceId)
void CheckCmdReplicaIdentity(Relation rel, CmdType cmd)
TupleTableSlot * origslot
ResultRelInfo ** es_result_relations
ExprState ** ri_ConstraintExprs
TriggerDesc * ri_TrigDesc
void ExecutorFinish(QueryDesc *queryDesc)
ExecutorCheckPerms_hook_type ExecutorCheckPerms_hook
EState * CreateExecutorState(void)
void ExecStoreHeapTupleDatum(Datum data, TupleTableSlot *slot)
void UnregisterSnapshot(Snapshot snapshot)
static bool table_tuple_fetch_row_version(Relation rel, ItemPointer tid, Snapshot snapshot, TupleTableSlot *slot)
List * lappend(List *list, void *datum)
QueryEnvironment * es_queryEnv
bool trig_update_instead_row
ResultRelInfo * ExecGetTriggerResultRel(EState *estate, Oid relid)
bool bms_is_empty(const Bitmapset *a)
void appendStringInfoChar(StringInfo str, char ch)
void initStringInfo(StringInfo str)
void EvalPlanQualInit(EPQState *epqstate, EState *parentestate, Plan *subplan, List *auxrowmarks, int epqParam)
OnConflictSetState * ri_onConflict
static void ExecCheckXactReadOnly(PlannedStmt *plannedstmt)
#define AttributeNumberIsValid(attributeNumber)
void ExecutorRewind(QueryDesc *queryDesc)
List * es_trig_target_relations
bool trig_delete_instead_row
void ExecResetTupleTable(List *tupleTable, bool shouldFree)
void * palloc0(Size size)
List * es_auxmodifytables
TupleTableSlot * ExecFilterJunk(JunkFilter *junkfilter, TupleTableSlot *slot)
static TupleTableSlot * ExecProcNode(PlanState *node)
List * ri_WithCheckOptions
Snapshot crosscheck_snapshot
TupleTableSlot * MakeTupleTableSlot(TupleDesc tupleDesc, const TupleTableSlotOps *tts_ops)
static void ExecMaterializeSlot(TupleTableSlot *slot)
static const char * ExecRelCheck(ResultRelInfo *resultRelInfo, TupleTableSlot *slot, EState *estate)
List * es_tuple_routing_result_relations
#define ereport(elevel,...)
ExecForeignUpdate_function ExecForeignUpdate
void AfterTriggerBeginQuery(void)
int check_enable_rls(Oid relid, Oid checkAsUser, bool noError)
Relation ExecGetRangeTableRelation(EState *estate, Index rti)
struct Instrumentation * totaltime
void(* ExecutorEnd_hook_type)(QueryDesc *queryDesc)
TupleTableSlot * ri_TrigOldSlot
TupleTableSlot * execute_attr_map_slot(AttrMap *attrMap, TupleTableSlot *in_slot, TupleTableSlot *out_slot)
TriggerDesc * CopyTriggerDesc(TriggerDesc *trigdesc)
#define Assert(condition)
Bitmapset * rewindPlanIDs
int errtablecol(Relation rel, int attnum)
LockTupleMode ExecUpdateLockMode(EState *estate, ResultRelInfo *relinfo)
static void ExecEndPlan(PlanState *planstate, EState *estate)
LockClauseStrength strength
AclResult pg_attribute_aclcheck_all(Oid table_oid, Oid roleid, AclMode mode, AclMaskHow how)
Bitmapset * bms_union(const Bitmapset *a, const Bitmapset *b)
static int list_length(const List *l)
TupleTableSlot * ecxt_scantuple
Index es_range_table_size
void EnterParallelMode(void)
Bitmapset * bms_add_member(Bitmapset *a, int x)
#define EXEC_FLAG_SKIP_TRIGGERS
TupleDesc ExecGetResultType(PlanState *planstate)
void PreventCommandIfReadOnly(const char *cmdname)
#define InvalidAttrNumber
void(* rShutdown)(DestReceiver *self)
AclResult pg_class_aclcheck(Oid table_oid, Oid roleid, AclMode mode)
#define DatumGetPointer(X)
bool bms_overlap(const Bitmapset *a, const Bitmapset *b)
#define ItemPointerSetInvalid(pointer)
void AfterTriggerEndQuery(EState *estate)
char * OidOutputFunctionCall(Oid functionId, Datum val)
TupleConversionMap * ri_RootToPartitionMap
int errmsg(const char *fmt,...)
FdwRoutine * GetFdwRoutineForRelation(Relation relation, bool makecopy)
void(* ExecutorStart_hook_type)(QueryDesc *queryDesc, int eflags)
Datum ExecGetJunkAttribute(TupleTableSlot *slot, AttrNumber attno, bool *isNull)
IndexInfo ** ri_IndexRelationInfo
ObjectType get_relkind_objtype(char relkind)
Bitmapset * RelationGetIndexAttrBitmap(Relation relation, IndexAttrBitmapKind attrKind)
IsForeignRelUpdatable_function IsForeignRelUpdatable
bool ExecCheckRTPerms(List *rangeTable, bool ereport_on_violation)
List * RelationGetPartitionQual(Relation rel)
bool ExecPartitionCheck(ResultRelInfo *resultRelInfo, TupleTableSlot *slot, EState *estate, bool emitError)
bool ExecCheck(ExprState *state, ExprContext *econtext)
ParamListInfo es_param_list_info
ExecutorFinish_hook_type ExecutorFinish_hook
CommandId GetCurrentCommandId(bool used)
PlannedStmt * plannedstmt
static bool slot_attisnull(TupleTableSlot *slot, int attnum)
Relation table_open(Oid relationId, LOCKMODE lockmode)
PlanState * ExecInitNode(Plan *node, EState *estate, int eflags)
ExecAuxRowMark ** relsubs_rowmark
char * get_rel_name(Oid relid)
int errtable(Relation rel)
bool bms_is_member(int x, const Bitmapset *a)
#define EXEC_FLAG_EXPLAIN_ONLY
#define RelationGetRelid(relation)
void appendBinaryStringInfo(StringInfo str, const char *data, int datalen)
JunkFilter * ExecInitJunkFilter(List *targetList, TupleTableSlot *slot)
static void InitPlan(QueryDesc *queryDesc, int eflags)
void EvalPlanQualBegin(EPQState *epqstate)
List * ri_onConflictArbiterIndexes
void ExecCloseIndices(ResultRelInfo *resultRelInfo)
RelationPtr ri_IndexRelationDescs
ExecAuxRowMark * ExecBuildAuxRowMark(ExecRowMark *erm, List *targetlist)
#define GetInsertedColumns(relinfo, estate)
FmgrInfo * ri_TrigFunctions
PlanState * recheckplanstate
RefetchForeignRow_function RefetchForeignRow
ExecRowMark * ExecFindRowMark(EState *estate, Index rti, bool missing_ok)
static void ExecutePlan(EState *estate, PlanState *planstate, bool use_parallel_mode, CmdType operation, bool sendTuples, uint64 numberTuples, ScanDirection direction, DestReceiver *dest, bool execute_once)