diff options
Diffstat (limited to 'src/include/executor')
-rw-r--r-- | src/include/executor/execExpr.h | 25 | ||||
-rw-r--r-- | src/include/executor/executor.h | 1 |
2 files changed, 22 insertions, 4 deletions
diff --git a/src/include/executor/execExpr.h b/src/include/executor/execExpr.h index 1e42c131781..5371e344ecd 100644 --- a/src/include/executor/execExpr.h +++ b/src/include/executor/execExpr.h @@ -26,9 +26,9 @@ struct JsonConstructorExprState; /* Bits in ExprState->flags (see also execnodes.h for public flag bits): */ /* expression's interpreter has been initialized */ -#define EEO_FLAG_INTERPRETER_INITIALIZED (1 << 1) +#define EEO_FLAG_INTERPRETER_INITIALIZED (1 << 5) /* jump-threading is in use */ -#define EEO_FLAG_DIRECT_THREADED (1 << 2) +#define EEO_FLAG_DIRECT_THREADED (1 << 6) /* Typical API for out-of-line evaluation subroutines */ typedef void (*ExecEvalSubroutine) (ExprState *state, @@ -72,16 +72,22 @@ typedef enum ExprEvalOp EEOP_INNER_FETCHSOME, EEOP_OUTER_FETCHSOME, EEOP_SCAN_FETCHSOME, + EEOP_OLD_FETCHSOME, + EEOP_NEW_FETCHSOME, /* compute non-system Var value */ EEOP_INNER_VAR, EEOP_OUTER_VAR, EEOP_SCAN_VAR, + EEOP_OLD_VAR, + EEOP_NEW_VAR, /* compute system Var value */ EEOP_INNER_SYSVAR, EEOP_OUTER_SYSVAR, EEOP_SCAN_SYSVAR, + EEOP_OLD_SYSVAR, + EEOP_NEW_SYSVAR, /* compute wholerow Var */ EEOP_WHOLEROW, @@ -94,6 +100,8 @@ typedef enum ExprEvalOp EEOP_ASSIGN_INNER_VAR, EEOP_ASSIGN_OUTER_VAR, EEOP_ASSIGN_SCAN_VAR, + EEOP_ASSIGN_OLD_VAR, + EEOP_ASSIGN_NEW_VAR, /* assign ExprState's resvalue/resnull to a column of its resultslot */ EEOP_ASSIGN_TMP, @@ -178,6 +186,7 @@ typedef enum ExprEvalOp EEOP_SQLVALUEFUNCTION, EEOP_CURRENTOFEXPR, EEOP_NEXTVALUEEXPR, + EEOP_RETURNINGEXPR, EEOP_ARRAYEXPR, EEOP_ARRAYCOERCE, EEOP_ROW, @@ -301,7 +310,7 @@ typedef struct ExprEvalStep */ union { - /* for EEOP_INNER/OUTER/SCAN_FETCHSOME */ + /* for EEOP_INNER/OUTER/SCAN/OLD/NEW_FETCHSOME */ struct { /* attribute number up to which to fetch (inclusive) */ @@ -314,13 +323,14 @@ typedef struct ExprEvalStep const TupleTableSlotOps *kind; } fetch; - /* for EEOP_INNER/OUTER/SCAN_[SYS]VAR[_FIRST] */ + /* for EEOP_INNER/OUTER/SCAN/OLD/NEW_[SYS]VAR */ struct { /* attnum is attr number - 1 for regular VAR ... */ /* but it's just the normal (negative) attr number for SYSVAR */ int attnum; Oid vartype; /* type OID of variable */ + VarReturningType varreturningtype; /* return old/new/default */ } var; /* for EEOP_WHOLEROW */ @@ -349,6 +359,13 @@ typedef struct ExprEvalStep int resultnum; } assign_tmp; + /* for EEOP_RETURNINGEXPR */ + struct + { + uint8 nullflag; /* flag to test if OLD/NEW row is NULL */ + int jumpdone; /* jump here if OLD/NEW row is NULL */ + } returningexpr; + /* for EEOP_CONST */ struct { diff --git a/src/include/executor/executor.h b/src/include/executor/executor.h index f8a8d03e533..c7db6defd3e 100644 --- a/src/include/executor/executor.h +++ b/src/include/executor/executor.h @@ -629,6 +629,7 @@ extern int ExecCleanTargetListLength(List *targetlist); extern TupleTableSlot *ExecGetTriggerOldSlot(EState *estate, ResultRelInfo *relInfo); extern TupleTableSlot *ExecGetTriggerNewSlot(EState *estate, ResultRelInfo *relInfo); extern TupleTableSlot *ExecGetReturningSlot(EState *estate, ResultRelInfo *relInfo); +extern TupleTableSlot *ExecGetAllNullSlot(EState *estate, ResultRelInfo *relInfo); extern TupleConversionMap *ExecGetChildToRootMap(ResultRelInfo *resultRelInfo); extern TupleConversionMap *ExecGetRootToChildMap(ResultRelInfo *resultRelInfo, EState *estate); |