]> granicus.if.org Git - postgresql/blobdiff - src/include/executor/executor.h
Fix initialization of fake LSN for unlogged relations
[postgresql] / src / include / executor / executor.h
index 9003f2ce583539ab2c327b459f131028f5e04767..6298c7c8cad1a48484209cc7ed9520ca330d6665 100644 (file)
@@ -15,6 +15,7 @@
 #define EXECUTOR_H
 
 #include "executor/execdesc.h"
+#include "fmgr.h"
 #include "nodes/lockoptions.h"
 #include "nodes/parsenodes.h"
 #include "utils/memutils.h"
@@ -100,64 +101,67 @@ extern bool ExecMaterializesOutput(NodeTag plantype);
  * prototypes from functions in execCurrent.c
  */
 extern bool execCurrentOf(CurrentOfExpr *cexpr,
-                         ExprContext *econtext,
-                         Oid table_oid,
-                         ItemPointer current_tid);
+                                                 ExprContext *econtext,
+                                                 Oid table_oid,
+                                                 ItemPointer current_tid);
 
 /*
  * prototypes from functions in execGrouping.c
  */
 extern ExprState *execTuplesMatchPrepare(TupleDesc desc,
-                                          int numCols,
-                                          const AttrNumber *keyColIdx,
-                                          const Oid *eqOperators,
-                                          PlanState *parent);
+                                                                                int numCols,
+                                                                                const AttrNumber *keyColIdx,
+                                                                                const Oid *eqOperators,
+                                                                                const Oid *collations,
+                                                                                PlanState *parent);
 extern void execTuplesHashPrepare(int numCols,
-                                         const Oid *eqOperators,
-                                         Oid **eqFuncOids,
-                                         FmgrInfo **hashFunctions);
+                                                                 const Oid *eqOperators,
+                                                                 Oid **eqFuncOids,
+                                                                 FmgrInfo **hashFunctions);
 extern TupleHashTable BuildTupleHashTable(PlanState *parent,
-                                       TupleDesc inputDesc,
-                                       int numCols, AttrNumber *keyColIdx,
-                                       const Oid *eqfuncoids,
-                                       FmgrInfo *hashfunctions,
-                                       long nbuckets, Size additionalsize,
-                                       MemoryContext tablecxt,
-                                       MemoryContext tempcxt, bool use_variable_hash_iv);
+                                                                                 TupleDesc inputDesc,
+                                                                                 int numCols, AttrNumber *keyColIdx,
+                                                                                 const Oid *eqfuncoids,
+                                                                                 FmgrInfo *hashfunctions,
+                                                                                 Oid *collations,
+                                                                                 long nbuckets, Size additionalsize,
+                                                                                 MemoryContext tablecxt,
+                                                                                 MemoryContext tempcxt, bool use_variable_hash_iv);
 extern TupleHashTable BuildTupleHashTableExt(PlanState *parent,
-                                       TupleDesc inputDesc,
-                                       int numCols, AttrNumber *keyColIdx,
-                                       const Oid *eqfuncoids,
-                                       FmgrInfo *hashfunctions,
-                                       long nbuckets, Size additionalsize,
-                                       MemoryContext metacxt,
-                                       MemoryContext tablecxt,
-                                       MemoryContext tempcxt, bool use_variable_hash_iv);
+                                                                                        TupleDesc inputDesc,
+                                                                                        int numCols, AttrNumber *keyColIdx,
+                                                                                        const Oid *eqfuncoids,
+                                                                                        FmgrInfo *hashfunctions,
+                                                                                        Oid *collations,
+                                                                                        long nbuckets, Size additionalsize,
+                                                                                        MemoryContext metacxt,
+                                                                                        MemoryContext tablecxt,
+                                                                                        MemoryContext tempcxt, bool use_variable_hash_iv);
 extern TupleHashEntry LookupTupleHashEntry(TupleHashTable hashtable,
-                                        TupleTableSlot *slot,
-                                        bool *isnew);
+                                                                                  TupleTableSlot *slot,
+                                                                                  bool *isnew);
 extern TupleHashEntry FindTupleHashEntry(TupleHashTable hashtable,
-                                  TupleTableSlot *slot,
-                                  ExprState *eqcomp,
-                                  FmgrInfo *hashfunctions);
+                                                                                TupleTableSlot *slot,
+                                                                                ExprState *eqcomp,
+                                                                                FmgrInfo *hashfunctions);
 extern void ResetTupleHashTable(TupleHashTable hashtable);
 
 /*
  * prototypes from functions in execJunk.c
  */
 extern JunkFilter *ExecInitJunkFilter(List *targetList,
-                                  TupleTableSlot *slot);
+                                                                         TupleTableSlot *slot);
 extern JunkFilter *ExecInitJunkFilterConversion(List *targetList,
-                                                        TupleDesc cleanTupType,
-                                                        TupleTableSlot *slot);
+                                                                                               TupleDesc cleanTupType,
+                                                                                               TupleTableSlot *slot);
 extern AttrNumber ExecFindJunkAttribute(JunkFilter *junkfilter,
-                                         const char *attrName);
+                                                                               const char *attrName);
 extern AttrNumber ExecFindJunkAttributeInTlist(List *targetlist,
-                                                        const char *attrName);
+                                                                                          const char *attrName);
 extern Datum ExecGetJunkAttribute(TupleTableSlot *slot, AttrNumber attno,
-                                        bool *isNull);
+                                                                 bool *isNull);
 extern TupleTableSlot *ExecFilterJunk(JunkFilter *junkfilter,
-                          TupleTableSlot *slot);
+                                                                         TupleTableSlot *slot);
 
 
 /*
@@ -166,9 +170,9 @@ extern TupleTableSlot *ExecFilterJunk(JunkFilter *junkfilter,
 extern void ExecutorStart(QueryDesc *queryDesc, int eflags);
 extern void standard_ExecutorStart(QueryDesc *queryDesc, int eflags);
 extern void ExecutorRun(QueryDesc *queryDesc,
-                       ScanDirection direction, uint64 count, bool execute_once);
+                                               ScanDirection direction, uint64 count, bool execute_once);
 extern void standard_ExecutorRun(QueryDesc *queryDesc,
-                                        ScanDirection direction, uint64 count, bool execute_once);
+                                                                ScanDirection direction, uint64 count, bool execute_once);
 extern void ExecutorFinish(QueryDesc *queryDesc);
 extern void standard_ExecutorFinish(QueryDesc *queryDesc);
 extern void ExecutorEnd(QueryDesc *queryDesc);
@@ -177,41 +181,36 @@ extern void ExecutorRewind(QueryDesc *queryDesc);
 extern bool ExecCheckRTPerms(List *rangeTable, bool ereport_on_violation);
 extern void CheckValidResultRel(ResultRelInfo *resultRelInfo, CmdType operation);
 extern void InitResultRelInfo(ResultRelInfo *resultRelInfo,
-                                 Relation resultRelationDesc,
-                                 Index resultRelationIndex,
-                                 Relation partition_root,
-                                 int instrument_options);
+                                                         Relation resultRelationDesc,
+                                                         Index resultRelationIndex,
+                                                         Relation partition_root,
+                                                         int instrument_options);
 extern ResultRelInfo *ExecGetTriggerResultRel(EState *estate, Oid relid);
 extern void ExecCleanUpTriggerState(EState *estate);
 extern void ExecConstraints(ResultRelInfo *resultRelInfo,
-                               TupleTableSlot *slot, EState *estate);
+                                                       TupleTableSlot *slot, EState *estate);
 extern bool ExecPartitionCheck(ResultRelInfo *resultRelInfo,
-                                  TupleTableSlot *slot, EState *estate, bool emitError);
+                                                          TupleTableSlot *slot, EState *estate, bool emitError);
 extern void ExecPartitionCheckEmitError(ResultRelInfo *resultRelInfo,
-                                                       TupleTableSlot *slot, EState *estate);
+                                                                               TupleTableSlot *slot, EState *estate);
 extern void ExecWithCheckOptions(WCOKind kind, ResultRelInfo *resultRelInfo,
-                                        TupleTableSlot *slot, EState *estate);
+                                                                TupleTableSlot *slot, EState *estate);
 extern LockTupleMode ExecUpdateLockMode(EState *estate, ResultRelInfo *relinfo);
 extern ExecRowMark *ExecFindRowMark(EState *estate, Index rti, bool missing_ok);
 extern ExecAuxRowMark *ExecBuildAuxRowMark(ExecRowMark *erm, List *targetlist);
-extern TupleTableSlot *EvalPlanQual(EState *estate, EPQState *epqstate,
-                        Relation relation, Index rti, LockTupleMode lockmode,
-                        ItemPointer tid, TransactionId priorXmax);
-extern bool EvalPlanQualFetch(EState *estate, Relation relation,
-                                 LockTupleMode lockmode, LockWaitPolicy wait_policy,
-                                 ItemPointer tid, TransactionId priorXmax,
-                                 TupleTableSlot *slot);
-extern void EvalPlanQualInit(EPQState *epqstate, EState *estate,
-                                Plan *subplan, List *auxrowmarks, int epqParam);
+extern TupleTableSlot *EvalPlanQual(EPQState *epqstate, Relation relation,
+                                                                       Index rti, TupleTableSlot *testslot);
+extern void EvalPlanQualInit(EPQState *epqstate, EState *parentestate,
+                                                        Plan *subplan, List *auxrowmarks, int epqParam);
 extern void EvalPlanQualSetPlan(EPQState *epqstate,
-                                       Plan *subplan, List *auxrowmarks);
+                                                               Plan *subplan, List *auxrowmarks);
 extern TupleTableSlot *EvalPlanQualSlot(EPQState *epqstate,
-                        Relation relation, Index rti);
+                                                                               Relation relation, Index rti);
 
 #define EvalPlanQualSetSlot(epqstate, slot)  ((epqstate)->origslot = (slot))
-extern void EvalPlanQualFetchRowMarks(EPQState *epqstate);
+extern bool EvalPlanQualFetchRowMark(EPQState *epqstate, Index rti, TupleTableSlot *slot);
 extern TupleTableSlot *EvalPlanQualNext(EPQState *epqstate);
-extern void EvalPlanQualBegin(EPQState *epqstate, EState *parentestate);
+extern void EvalPlanQualBegin(EPQState *epqstate);
 extern void EvalPlanQualEnd(EPQState *epqstate);
 
 /*
@@ -251,18 +250,19 @@ extern ExprState *ExecInitQual(List *qual, PlanState *parent);
 extern ExprState *ExecInitCheck(List *qual, PlanState *parent);
 extern List *ExecInitExprList(List *nodes, PlanState *parent);
 extern ExprState *ExecBuildAggTrans(AggState *aggstate, struct AggStatePerPhaseData *phase,
-                                 bool doSort, bool doHash);
+                                                                       bool doSort, bool doHash);
 extern ExprState *ExecBuildGroupingEqual(TupleDesc ldesc, TupleDesc rdesc,
-                                          const TupleTableSlotOps *lops, const TupleTableSlotOps *rops,
-                                          int numCols,
-                                          const AttrNumber *keyColIdx,
-                                          const Oid *eqfunctions,
-                                          PlanState *parent);
+                                                                                const TupleTableSlotOps *lops, const TupleTableSlotOps *rops,
+                                                                                int numCols,
+                                                                                const AttrNumber *keyColIdx,
+                                                                                const Oid *eqfunctions,
+                                                                                const Oid *collations,
+                                                                                PlanState *parent);
 extern ProjectionInfo *ExecBuildProjectionInfo(List *targetList,
-                                               ExprContext *econtext,
-                                               TupleTableSlot *slot,
-                                               PlanState *parent,
-                                               TupleDesc inputDesc);
+                                                                                          ExprContext *econtext,
+                                                                                          TupleTableSlot *slot,
+                                                                                          PlanState *parent,
+                                                                                          TupleDesc inputDesc);
 extern ExprState *ExecPrepareExpr(Expr *node, EState *estate);
 extern ExprState *ExecPrepareQual(List *qual, EState *estate);
 extern ExprState *ExecPrepareCheck(List *qual, EState *estate);
@@ -315,7 +315,7 @@ ExecEvalExprSwitchContext(ExprState *state,
  * ExecProject
  *
  * Projects a tuple based on projection info and stores it in the slot passed
- * to ExecBuildProjectInfo().
+ * to ExecBuildProjectionInfo().
  *
  * Note: the result is always a virtual tuple; therefore it may reference
  * the contents of the exprContext's scan tuples and/or temporary results
@@ -405,19 +405,19 @@ extern bool ExecCheck(ExprState *state, ExprContext *context);
  * prototypes from functions in execSRF.c
  */
 extern SetExprState *ExecInitTableFunctionResult(Expr *expr,
-                                                       ExprContext *econtext, PlanState *parent);
+                                                                                                ExprContext *econtext, PlanState *parent);
 extern Tuplestorestate *ExecMakeTableFunctionResult(SetExprState *setexpr,
-                                                       ExprContext *econtext,
-                                                       MemoryContext argContext,
-                                                       TupleDesc expectedDesc,
-                                                       bool randomAccess);
+                                                                                                       ExprContext *econtext,
+                                                                                                       MemoryContext argContext,
+                                                                                                       TupleDesc expectedDesc,
+                                                                                                       bool randomAccess);
 extern SetExprState *ExecInitFunctionResultSet(Expr *expr,
-                                                 ExprContext *econtext, PlanState *parent);
+                                                                                          ExprContext *econtext, PlanState *parent);
 extern Datum ExecMakeFunctionResultSet(SetExprState *fcache,
-                                                 ExprContext *econtext,
-                                                 MemoryContext argContext,
-                                                 bool *isNull,
-                                                 ExprDoneCond *isDone);
+                                                                          ExprContext *econtext,
+                                                                          MemoryContext argContext,
+                                                                          bool *isNull,
+                                                                          ExprDoneCond *isDone);
 
 /*
  * prototypes from functions in execScan.c
@@ -426,7 +426,7 @@ typedef TupleTableSlot *(*ExecScanAccessMtd) (ScanState *node);
 typedef bool (*ExecScanRecheckMtd) (ScanState *node, TupleTableSlot *slot);
 
 extern TupleTableSlot *ExecScan(ScanState *node, ExecScanAccessMtd accessMtd,
-                ExecScanRecheckMtd recheckMtd);
+                                                               ExecScanRecheckMtd recheckMtd);
 extern void ExecAssignScanProjectionInfo(ScanState *node);
 extern void ExecAssignScanProjectionInfoWithVarno(ScanState *node, Index varno);
 extern void ExecScanReScan(ScanState *node);
@@ -443,10 +443,10 @@ extern void ExecInitScanTupleSlot(EState *estate, ScanState *scanstate,
                                                                  TupleDesc tupleDesc,
                                                                  const TupleTableSlotOps *tts_ops);
 extern TupleTableSlot *ExecInitExtraTupleSlot(EState *estate,
-                                          TupleDesc tupledesc,
-                                          const TupleTableSlotOps *tts_ops);
+                                                                                         TupleDesc tupledesc,
+                                                                                         const TupleTableSlotOps *tts_ops);
 extern TupleTableSlot *ExecInitNullTupleSlot(EState *estate, TupleDesc tupType,
-                                         const TupleTableSlotOps *tts_ops);
+                                                                                        const TupleTableSlotOps *tts_ops);
 extern TupleDesc ExecTypeFromTL(List *targetList);
 extern TupleDesc ExecCleanTypeFromTL(List *targetList);
 extern TupleDesc ExecTypeFromExprList(List *exprList);
@@ -460,8 +460,8 @@ typedef struct TupOutputState
 } TupOutputState;
 
 extern TupOutputState *begin_tup_output_tupdesc(DestReceiver *dest,
-                                                TupleDesc tupdesc,
-                                                const TupleTableSlotOps *tts_ops);
+                                                                                               TupleDesc tupdesc,
+                                                                                               const TupleTableSlotOps *tts_ops);
 extern void do_tup_output(TupOutputState *tstate, Datum *values, bool *isnull);
 extern void do_text_output_multiline(TupOutputState *tstate, const char *txt);
 extern void end_tup_output(TupOutputState *tstate);
@@ -515,18 +515,17 @@ extern ExprContext *MakePerTupleExprContext(EState *estate);
 
 extern void ExecAssignExprContext(EState *estate, PlanState *planstate);
 extern TupleDesc ExecGetResultType(PlanState *planstate);
-extern TupleTableSlot ExecGetResultSlot(PlanState *planstate);
 extern const TupleTableSlotOps *ExecGetResultSlotOps(PlanState *planstate,
                                                                                                         bool *isfixed);
 extern void ExecAssignProjectionInfo(PlanState *planstate,
-                                                TupleDesc inputDesc);
+                                                                        TupleDesc inputDesc);
 extern void ExecConditionalAssignProjectionInfo(PlanState *planstate,
-                                                                       TupleDesc inputDesc, Index varno);
+                                                                                               TupleDesc inputDesc, Index varno);
 extern void ExecFreeExprContext(PlanState *planstate);
 extern void ExecAssignScanType(ScanState *scanstate, TupleDesc tupDesc);
 extern void ExecCreateScanSlotFromOuterPlan(EState *estate,
-                                                               ScanState *scanstate,
-                                                               const TupleTableSlotOps *tts_ops);
+                                                                                       ScanState *scanstate,
+                                                                                       const TupleTableSlotOps *tts_ops);
 
 extern bool ExecRelationIsTargetRelation(EState *estate, Index scanrelid);
 
@@ -537,8 +536,7 @@ extern void ExecInitRangeTable(EState *estate, List *rangeTable);
 static inline RangeTblEntry *
 exec_rt_fetch(Index rti, EState *estate)
 {
-       Assert(rti > 0 && rti <= estate->es_range_table_size);
-       return estate->es_range_table_array[rti - 1];
+       return (RangeTblEntry *) list_nth(estate->es_range_table, rti - 1);
 }
 
 extern Relation ExecGetRangeTableRelation(EState *estate, Index rti);
@@ -546,16 +544,16 @@ extern Relation ExecGetRangeTableRelation(EState *estate, Index rti);
 extern int     executor_errposition(EState *estate, int location);
 
 extern void RegisterExprContextCallback(ExprContext *econtext,
-                                                       ExprContextCallbackFunction function,
-                                                       Datum arg);
+                                                                               ExprContextCallbackFunction function,
+                                                                               Datum arg);
 extern void UnregisterExprContextCallback(ExprContext *econtext,
-                                                         ExprContextCallbackFunction function,
-                                                         Datum arg);
+                                                                                 ExprContextCallbackFunction function,
+                                                                                 Datum arg);
 
 extern Datum GetAttributeByName(HeapTupleHeader tuple, const char *attname,
-                                  bool *isNull);
+                                                               bool *isNull);
 extern Datum GetAttributeByNum(HeapTupleHeader tuple, AttrNumber attrno,
-                                 bool *isNull);
+                                                          bool *isNull);
 
 extern int     ExecTargetListLength(List *targetlist);
 extern int     ExecCleanTargetListLength(List *targetlist);
@@ -569,35 +567,34 @@ extern TupleTableSlot *ExecGetReturningSlot(EState *estate, ResultRelInfo *relIn
  */
 extern void ExecOpenIndices(ResultRelInfo *resultRelInfo, bool speculative);
 extern void ExecCloseIndices(ResultRelInfo *resultRelInfo);
-extern List *ExecInsertIndexTuples(TupleTableSlot *slot, ItemPointer tupleid,
-                                         EState *estate, bool noDupErr, bool *specConflict,
-                                         List *arbiterIndexes);
+extern List *ExecInsertIndexTuples(TupleTableSlot *slot, EState *estate, bool noDupErr,
+                                                                  bool *specConflict, List *arbiterIndexes);
 extern bool ExecCheckIndexConstraints(TupleTableSlot *slot, EState *estate,
-                                                 ItemPointer conflictTid, List *arbiterIndexes);
+                                                                         ItemPointer conflictTid, List *arbiterIndexes);
 extern void check_exclusion_constraint(Relation heap, Relation index,
-                                                  IndexInfo *indexInfo,
-                                                  ItemPointer tupleid,
-                                                  Datum *values, bool *isnull,
-                                                  EState *estate, bool newIndex);
+                                                                          IndexInfo *indexInfo,
+                                                                          ItemPointer tupleid,
+                                                                          Datum *values, bool *isnull,
+                                                                          EState *estate, bool newIndex);
 
 /*
  * prototypes from functions in execReplication.c
  */
 extern bool RelationFindReplTupleByIndex(Relation rel, Oid idxoid,
-                                                        LockTupleMode lockmode,
-                                                        TupleTableSlot *searchslot,
-                                                        TupleTableSlot *outslot);
+                                                                                LockTupleMode lockmode,
+                                                                                TupleTableSlot *searchslot,
+                                                                                TupleTableSlot *outslot);
 extern bool RelationFindReplTupleSeq(Relation rel, LockTupleMode lockmode,
-                                                TupleTableSlot *searchslot, TupleTableSlot *outslot);
+                                                                        TupleTableSlot *searchslot, TupleTableSlot *outslot);
 
 extern void ExecSimpleRelationInsert(EState *estate, TupleTableSlot *slot);
 extern void ExecSimpleRelationUpdate(EState *estate, EPQState *epqstate,
-                                                TupleTableSlot *searchslot, TupleTableSlot *slot);
+                                                                        TupleTableSlot *searchslot, TupleTableSlot *slot);
 extern void ExecSimpleRelationDelete(EState *estate, EPQState *epqstate,
-                                                TupleTableSlot *searchslot);
+                                                                        TupleTableSlot *searchslot);
 extern void CheckCmdReplicaIdentity(Relation rel, CmdType cmd);
 
 extern void CheckSubscriptionRelkind(char relkind, const char *nspname,
-                                                const char *relname);
+                                                                        const char *relname);
 
 #endif                                                 /* EXECUTOR_H  */