PostgreSQL Source Code  git master
execExpr.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * execExpr.h
4  * Low level infrastructure related to expression evaluation
5  *
6  *
7  * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  * src/include/executor/execExpr.h
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef EXEC_EXPR_H
15 #define EXEC_EXPR_H
16 
17 #include "executor/nodeAgg.h"
18 #include "nodes/execnodes.h"
19 
20 /* forward references to avoid circularity */
21 struct ExprEvalStep;
23 
24 /* Bits in ExprState->flags (see also execnodes.h for public flag bits): */
25 /* expression's interpreter has been initialized */
26 #define EEO_FLAG_INTERPRETER_INITIALIZED (1 << 1)
27 /* jump-threading is in use */
28 #define EEO_FLAG_DIRECT_THREADED (1 << 2)
29 
30 /* Typical API for out-of-line evaluation subroutines */
32  struct ExprEvalStep *op,
33  ExprContext *econtext);
34 
35 /*
36  * Discriminator for ExprEvalSteps.
37  *
38  * Identifies the operation to be executed and which member in the
39  * ExprEvalStep->d union is valid.
40  *
41  * The order of entries needs to be kept in sync with the dispatch_table[]
42  * array in execExprInterp.c:ExecInterpExpr().
43  */
44 typedef enum ExprEvalOp
45 {
46  /* entire expression has been evaluated completely, return */
48 
49  /* apply slot_getsomeattrs on corresponding tuple slot */
53 
54  /* compute non-system Var value */
58 
59  /* compute system Var value */
63 
64  /* compute wholerow Var */
66 
67  /*
68  * Compute non-system Var value, assign it into ExprState's resultslot.
69  * These are not used if a CheckVarSlotCompatibility() check would be
70  * needed.
71  */
75 
76  /* assign ExprState's resvalue/resnull to a column of its resultslot */
78  /* ditto, applying MakeExpandedObjectReadOnly() */
80 
81  /* evaluate Const value */
83 
84  /*
85  * Evaluate function call (including OpExprs etc). For speed, we
86  * distinguish in the opcode whether the function is strict and/or
87  * requires usage stats tracking.
88  */
93 
94  /*
95  * Evaluate boolean AND expression, one step per subexpression. FIRST/LAST
96  * subexpressions are special-cased for performance. Since AND always has
97  * at least two subexpressions, FIRST and LAST never apply to the same
98  * subexpression.
99  */
103 
104  /* similarly for boolean OR expression */
108 
109  /* evaluate boolean NOT expression */
111 
112  /* simplified version of BOOL_AND_STEP for use by ExecQual() */
114 
115  /* unconditional jump to another step */
117 
118  /* conditional jumps based on current result value */
122 
123  /* perform NULL tests for scalar values */
126 
127  /* perform NULL tests for row values */
130 
131  /* evaluate a BooleanTest expression */
136 
137  /* evaluate PARAM_EXEC/EXTERN parameters */
141 
142  /* return CaseTestExpr value */
144 
145  /* apply MakeExpandedObjectReadOnly() to target value */
147 
148  /* evaluate assorted special-purpose expression types */
159 
160  /*
161  * Compare two individual elements of each of two compared ROW()
162  * expressions. Skip to ROWCOMPARE_FINAL if elements are not equal.
163  */
165 
166  /* evaluate boolean value based on previous ROWCOMPARE_STEP operations */
168 
169  /* evaluate GREATEST() or LEAST() */
171 
172  /* evaluate FieldSelect expression */
174 
175  /*
176  * Deform tuple before evaluating new values for individual fields in a
177  * FieldStore expression.
178  */
180 
181  /*
182  * Form the new tuple for a FieldStore expression. Individual fields will
183  * have been evaluated into columns of the tuple deformed by the preceding
184  * DEFORM step.
185  */
187 
188  /* Process a container subscript; short-circuit expression to NULL if NULL */
190 
191  /*
192  * Compute old container element/slice when a SubscriptingRef assignment
193  * expression contains SubscriptingRef/FieldStore subexpressions. Value is
194  * accessed using the CaseTest mechanism.
195  */
197 
198  /* compute new value for SubscriptingRef assignment expression */
200 
201  /* compute element/slice for SubscriptingRef fetch expression */
203 
204  /* evaluate value for CoerceToDomainValue */
206 
207  /* evaluate a domain's NOT NULL constraint */
209 
210  /* evaluate a single domain CHECK constraint */
212 
213  /* evaluate assorted special-purpose expression types */
222 
223  /* aggregation related nodes */
237 
238  /* non-existent operation, used e.g. to check array lengths */
240 } ExprEvalOp;
241 
242 
243 typedef struct ExprEvalStep
244 {
245  /*
246  * Instruction to be executed. During instruction preparation this is an
247  * enum ExprEvalOp, but later it can be changed to some other type, e.g. a
248  * pointer for computed goto (that's why it's an intptr_t).
249  */
250  intptr_t opcode;
251 
252  /* where to store the result of this step */
254  bool *resnull;
255 
256  /*
257  * Inline data for the operation. Inline data is faster to access, but
258  * also bloats the size of all instructions. The union should be kept to
259  * no more than 40 bytes on 64-bit systems (so that the entire struct is
260  * no more than 64 bytes, a single cacheline on common systems).
261  */
262  union
263  {
264  /* for EEOP_INNER/OUTER/SCAN_FETCHSOME */
265  struct
266  {
267  /* attribute number up to which to fetch (inclusive) */
268  int last_var;
269  /* will the type of slot be the same for every invocation */
270  bool fixed;
271  /* tuple descriptor, if known */
273  /* type of slot, can only be relied upon if fixed is set */
275  } fetch;
276 
277  /* for EEOP_INNER/OUTER/SCAN_[SYS]VAR[_FIRST] */
278  struct
279  {
280  /* attnum is attr number - 1 for regular VAR ... */
281  /* but it's just the normal (negative) attr number for SYSVAR */
282  int attnum;
283  Oid vartype; /* type OID of variable */
284  } var;
285 
286  /* for EEOP_WHOLEROW */
287  struct
288  {
289  Var *var; /* original Var node in plan tree */
290  bool first; /* first time through, need to initialize? */
291  bool slow; /* need runtime check for nulls? */
292  TupleDesc tupdesc; /* descriptor for resulting tuples */
293  JunkFilter *junkFilter; /* JunkFilter to remove resjunk cols */
294  } wholerow;
295 
296  /* for EEOP_ASSIGN_*_VAR */
297  struct
298  {
299  /* target index in ExprState->resultslot->tts_values/nulls */
301  /* source attribute number - 1 */
302  int attnum;
303  } assign_var;
304 
305  /* for EEOP_ASSIGN_TMP[_MAKE_RO] */
306  struct
307  {
308  /* target index in ExprState->resultslot->tts_values/nulls */
309  int resultnum;
310  } assign_tmp;
311 
312  /* for EEOP_CONST */
313  struct
314  {
315  /* constant's value */
317  bool isnull;
318  } constval;
319 
320  /* for EEOP_FUNCEXPR_* / NULLIF / DISTINCT */
321  struct
322  {
323  FmgrInfo *finfo; /* function's lookup data */
324  FunctionCallInfo fcinfo_data; /* arguments etc */
325  /* faster to access without additional indirection: */
326  PGFunction fn_addr; /* actual call address */
327  int nargs; /* number of arguments */
328  } func;
329 
330  /* for EEOP_BOOL_*_STEP */
331  struct
332  {
333  bool *anynull; /* track if any input was NULL */
334  int jumpdone; /* jump here if result determined */
335  } boolexpr;
336 
337  /* for EEOP_QUAL */
338  struct
339  {
340  int jumpdone; /* jump here on false or null */
341  } qualexpr;
342 
343  /* for EEOP_JUMP[_CONDITION] */
344  struct
345  {
346  int jumpdone; /* target instruction's index */
347  } jump;
348 
349  /* for EEOP_NULLTEST_ROWIS[NOT]NULL */
350  struct
351  {
352  /* cached tupdesc pointer - filled at runtime */
354  } nulltest_row;
355 
356  /* for EEOP_PARAM_EXEC/EXTERN */
357  struct
358  {
359  int paramid; /* numeric ID for parameter */
360  Oid paramtype; /* OID of parameter's datatype */
361  } param;
362 
363  /* for EEOP_PARAM_CALLBACK */
364  struct
365  {
366  ExecEvalSubroutine paramfunc; /* add-on evaluation subroutine */
367  void *paramarg; /* private data for same */
368  int paramid; /* numeric ID for parameter */
369  Oid paramtype; /* OID of parameter's datatype */
370  } cparam;
371 
372  /* for EEOP_CASE_TESTVAL/DOMAIN_TESTVAL */
373  struct
374  {
375  Datum *value; /* value to return */
376  bool *isnull;
377  } casetest;
378 
379  /* for EEOP_MAKE_READONLY */
380  struct
381  {
382  Datum *value; /* value to coerce to read-only */
383  bool *isnull;
384  } make_readonly;
385 
386  /* for EEOP_IOCOERCE */
387  struct
388  {
389  /* lookup and call info for source type's output function */
392  /* lookup and call info for result type's input function */
395  } iocoerce;
396 
397  /* for EEOP_SQLVALUEFUNCTION */
398  struct
399  {
402 
403  /* for EEOP_NEXTVALUEEXPR */
404  struct
405  {
408  } nextvalueexpr;
409 
410  /* for EEOP_ARRAYEXPR */
411  struct
412  {
413  Datum *elemvalues; /* element values get stored here */
414  bool *elemnulls;
415  int nelems; /* length of the above arrays */
416  Oid elemtype; /* array element type */
417  int16 elemlength; /* typlen of the array element type */
418  bool elembyval; /* is the element type pass-by-value? */
419  char elemalign; /* typalign of the element type */
420  bool multidims; /* is array expression multi-D? */
421  } arrayexpr;
422 
423  /* for EEOP_ARRAYCOERCE */
424  struct
425  {
426  ExprState *elemexprstate; /* null if no per-element work */
427  Oid resultelemtype; /* element type of result array */
428  struct ArrayMapState *amstate; /* workspace for array_map */
429  } arraycoerce;
430 
431  /* for EEOP_ROW */
432  struct
433  {
434  TupleDesc tupdesc; /* descriptor for result tuples */
435  /* workspace for the values constituting the row: */
436  Datum *elemvalues;
437  bool *elemnulls;
438  } row;
439 
440  /* for EEOP_ROWCOMPARE_STEP */
441  struct
442  {
443  /* lookup and call data for column comparison function */
444  FmgrInfo *finfo;
447  /* target for comparison resulting in NULL */
448  int jumpnull;
449  /* target for comparison yielding inequality */
450  int jumpdone;
451  } rowcompare_step;
452 
453  /* for EEOP_ROWCOMPARE_FINAL */
454  struct
455  {
458 
459  /* for EEOP_MINMAX */
460  struct
461  {
462  /* workspace for argument values */
464  bool *nulls;
465  int nelems;
466  /* is it GREATEST or LEAST? */
468  /* lookup and call data for comparison function */
469  FmgrInfo *finfo;
471  } minmax;
472 
473  /* for EEOP_FIELDSELECT */
474  struct
475  {
476  AttrNumber fieldnum; /* field number to extract */
477  Oid resulttype; /* field's type */
478  /* cached tupdesc pointer - filled at runtime */
480  } fieldselect;
481 
482  /* for EEOP_FIELDSTORE_DEFORM / FIELDSTORE_FORM */
483  struct
484  {
485  /* original expression node */
487 
488  /* cached tupdesc pointer - filled at runtime */
489  /* note that a DEFORM and FORM pair share the same tupdesc */
491 
492  /* workspace for column values */
493  Datum *values;
494  bool *nulls;
495  int ncolumns;
496  } fieldstore;
497 
498  /* for EEOP_SBSREF_SUBSCRIPT */
499  struct
500  {
501  /* too big to have inline */
503  int off; /* 0-based index of this subscript */
504  bool isupper; /* is it upper or lower subscript? */
505  int jumpdone; /* jump here on null */
507 
508  /* for EEOP_SBSREF_OLD / ASSIGN / FETCH */
509  struct
510  {
511  /* too big to have inline */
512  struct SubscriptingRefState *state;
513  } sbsref;
514 
515  /* for EEOP_DOMAIN_NOTNULL / DOMAIN_CHECK */
516  struct
517  {
518  /* name of constraint */
520  /* where the result of a CHECK constraint will be stored */
522  bool *checknull;
523  /* OID of domain type */
524  Oid resulttype;
525  } domaincheck;
526 
527  /* for EEOP_CONVERT_ROWTYPE */
528  struct
529  {
530  ConvertRowtypeExpr *convert; /* original expression */
531  /* these three fields are filled at runtime: */
532  TupleDesc indesc; /* tupdesc for input type */
533  TupleDesc outdesc; /* tupdesc for output type */
534  TupleConversionMap *map; /* column mapping */
535  bool initialized; /* initialized for current types? */
536  } convert_rowtype;
537 
538  /* for EEOP_SCALARARRAYOP */
539  struct
540  {
541  /* element_type/typlen/typbyval/typalign are filled at runtime */
542  Oid element_type; /* InvalidOid if not yet filled */
543  bool useOr; /* use OR or AND semantics? */
544  int16 typlen; /* array element type storage info */
545  bool typbyval;
546  char typalign;
547  FmgrInfo *finfo; /* function's lookup data */
548  FunctionCallInfo fcinfo_data; /* arguments etc */
549  /* faster to access without additional indirection: */
550  PGFunction fn_addr; /* actual call address */
551  } scalararrayop;
552 
553  /* for EEOP_XMLEXPR */
554  struct
555  {
556  XmlExpr *xexpr; /* original expression node */
557  /* workspace for evaluating named args, if any */
560  /* workspace for evaluating unnamed args, if any */
562  bool *argnull;
563  } xmlexpr;
564 
565  /* for EEOP_AGGREF */
566  struct
567  {
568  /* out-of-line state, modified by nodeAgg.c */
570  } aggref;
571 
572  /* for EEOP_GROUPING_FUNC */
573  struct
574  {
575  List *clauses; /* integer list of column numbers */
576  } grouping_func;
577 
578  /* for EEOP_WINDOW_FUNC */
579  struct
580  {
581  /* out-of-line state, modified by nodeWindowAgg.c */
583  } window_func;
584 
585  /* for EEOP_SUBPLAN */
586  struct
587  {
588  /* out-of-line state, created by nodeSubplan.c */
590  } subplan;
591 
592  /* for EEOP_ALTERNATIVE_SUBPLAN */
593  struct
594  {
595  /* out-of-line state, created by nodeSubplan.c */
598 
599  /* for EEOP_AGG_*DESERIALIZE */
600  struct
601  {
603  int jumpnull;
604  } agg_deserialize;
605 
606  /* for EEOP_AGG_STRICT_INPUT_CHECK_NULLS / STRICT_INPUT_CHECK_ARGS */
607  struct
608  {
609  /*
610  * For EEOP_AGG_STRICT_INPUT_CHECK_ARGS args contains pointers to
611  * the NullableDatums that need to be checked for NULLs.
612  *
613  * For EEOP_AGG_STRICT_INPUT_CHECK_NULLS nulls contains pointers
614  * to booleans that need to be checked for NULLs.
615  *
616  * Both cases currently need to exist because sometimes the
617  * to-be-checked nulls are in TupleTableSlot.isnull array, and
618  * sometimes in FunctionCallInfoBaseData.args[i].isnull.
619  */
621  bool *nulls;
622  int nargs;
623  int jumpnull;
625 
626  /* for EEOP_AGG_PLAIN_PERGROUP_NULLCHECK */
627  struct
628  {
629  int setoff;
630  int jumpnull;
632 
633  /* for EEOP_AGG_PLAIN_TRANS_[INIT_][STRICT_]{BYVAL,BYREF} */
634  /* for EEOP_AGG_ORDERED_TRANS_{DATUM,TUPLE} */
635  struct
636  {
639  int setno;
640  int transno;
641  int setoff;
642  } agg_trans;
643  } d;
644 } ExprEvalStep;
645 
646 
647 /* Non-inline data for container operations */
648 typedef struct SubscriptingRefState
649 {
650  bool isassignment; /* is it assignment, or just fetch? */
651 
652  Oid refelemtype; /* OID of the container element type */
653  int16 refattrlength; /* typlen of container type */
654  int16 refelemlength; /* typlen of the container element type */
655  bool refelembyval; /* is the element type pass-by-value? */
656  char refelemalign; /* typalign of the element type */
657 
658  /* numupper and upperprovided[] are filled at compile time */
659  /* at runtime, extracted subscript datums get stored in upperindex[] */
660  int numupper;
661  bool upperprovided[MAXDIM];
662  int upperindex[MAXDIM];
663 
664  /* similarly for lower indexes, if any */
665  int numlower;
666  bool lowerprovided[MAXDIM];
667  int lowerindex[MAXDIM];
668 
669  /* subscript expressions get evaluated into here */
672 
673  /* for assignment, new value to assign is evaluated into here */
676 
677  /* if we have a nested assignment, SBSREF_OLD puts old value here */
679  bool prevnull;
681 
682 
683 /* functions in execExpr.c */
684 extern void ExprEvalPushStep(ExprState *es, const ExprEvalStep *s);
685 
686 /* functions in execExprInterp.c */
689 
690 extern Datum ExecInterpExprStillValid(ExprState *state, ExprContext *econtext, bool *isNull);
691 extern void CheckExprStillValid(ExprState *state, ExprContext *econtext);
692 
693 /*
694  * Non fast-path execution functions. These are externs instead of statics in
695  * execExprInterp.c, because that allows them to be used by other methods of
696  * expression evaluation, reducing code duplication.
697  */
699  ExprContext *econtext);
701  ExprContext *econtext);
703  ExprContext *econtext);
705  ExprContext *econtext);
709 extern void ExecEvalRowNull(ExprState *state, ExprEvalStep *op,
710  ExprContext *econtext);
712  ExprContext *econtext);
713 extern void ExecEvalArrayExpr(ExprState *state, ExprEvalStep *op);
715  ExprContext *econtext);
716 extern void ExecEvalRow(ExprState *state, ExprEvalStep *op);
717 extern void ExecEvalMinMax(ExprState *state, ExprEvalStep *op);
719  ExprContext *econtext);
721  ExprContext *econtext);
723  ExprContext *econtext);
729  ExprContext *econtext);
733 extern void ExecEvalXmlExpr(ExprState *state, ExprEvalStep *op);
735 extern void ExecEvalSubPlan(ExprState *state, ExprEvalStep *op,
736  ExprContext *econtext);
738  ExprContext *econtext);
740  ExprContext *econtext);
741 extern void ExecEvalSysVar(ExprState *state, ExprEvalStep *op,
742  ExprContext *econtext, TupleTableSlot *slot);
743 
744 extern void ExecAggInitGroup(AggState *aggstate, AggStatePerTrans pertrans, AggStatePerGroup pergroup,
747  Datum newValue, bool newValueIsNull,
748  Datum oldValue, bool oldValueIsNull);
750  ExprContext *econtext);
752  ExprContext *econtext);
753 
754 #endif /* EXEC_EXPR_H */
SubPlanState * sstate
Definition: execExpr.h:589
NullableDatum * args
Definition: execExpr.h:620
AggStatePerTrans pertrans
Definition: execExpr.h:637
signed short int16
Definition: c.h:354
struct ExprEvalStep::@51::@71 arraycoerce
struct ExprEvalStep::@51::@63 param
TupleDesc known_desc
Definition: execExpr.h:272
Datum ExecInterpExprStillValid(ExprState *state, ExprContext *econtext, bool *isNull)
bool * anynull
Definition: execExpr.h:333
struct ExprEvalStep::@51::@79 sbsref
Datum(* PGFunction)(FunctionCallInfo fcinfo)
Definition: fmgr.h:40
TupleConversionMap * map
Definition: execExpr.h:534
Definition: fmgr.h:56
void ExecEvalSubPlan(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
struct ExprEvalStep::@51::@86 window_func
void ExecEvalParamExec(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
ExprEvalOp ExecEvalStepOp(ExprState *state, ExprEvalStep *op)
void ExprEvalPushStep(ExprState *es, const ExprEvalStep *s)
Definition: execExpr.c:2125
bool multidims
Definition: execExpr.h:420
void ExecEvalFieldStoreForm(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
bool * checknull
Definition: execExpr.h:522
FunctionCallInfo fcinfo_data
Definition: execExpr.h:324
struct ExprEvalStep::@51::@74 rowcompare_final
struct ExprEvalStep::@51::@70 arrayexpr
RowCompareType rctype
Definition: execExpr.h:456
Datum * elemvalues
Definition: execExpr.h:413
void ExecEvalCurrentOfExpr(ExprState *state, ExprEvalStep *op)
char elemalign
Definition: execExpr.h:419
JunkFilter * junkFilter
Definition: execExpr.h:293
Datum * resvalue
Definition: execExpr.h:253
void ExecEvalSysVar(ExprState *state, ExprEvalStep *op, ExprContext *econtext, TupleTableSlot *slot)
PGFunction fn_addr
Definition: execExpr.h:326
#define MAXDIM
Definition: c.h:535
struct ExprEvalStep::@51::@80 domaincheck
void ExecEvalArrayCoerce(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
TupleDesc indesc
Definition: execExpr.h:532
struct ExprEvalStep::@51::@78 sbsref_subscript
bool elembyval
Definition: execExpr.h:418
struct ExprEvalStep::@51::@81 convert_rowtype
struct ExprEvalStep::@51::@85 grouping_func
int jumpdone
Definition: execExpr.h:334
Oid elemtype
Definition: execExpr.h:416
struct ExprEvalStep::@51::@57 constval
const TupleTableSlotOps * kind
Definition: execExpr.h:274
Datum * value
Definition: execExpr.h:375
struct ExprEvalStep::@51::@52 fetch
bool ExecEvalSubscriptingRef(ExprState *state, ExprEvalStep *op)
bool * resnull
Definition: execExpr.h:254
struct ExprEvalStep::@51::@77 fieldstore
FmgrInfo * finfo_in
Definition: execExpr.h:393
ExprEvalOp
Definition: execExpr.h:44
void ExecEvalXmlExpr(ExprState *state, ExprEvalStep *op)
bool * isnull
Definition: execExpr.h:376
bool * nulls
Definition: execExpr.h:464
FunctionCallInfo fcinfo_data_out
Definition: execExpr.h:391
void ExecEvalAggOrderedTransDatum(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
bool useOr
Definition: execExpr.h:543
XmlExpr * xexpr
Definition: execExpr.h:556
Datum * named_argvalue
Definition: execExpr.h:558
struct ExprEvalStep::@51::@55 assign_var
MinMaxOp op
Definition: execExpr.h:467
void ExecEvalFuncExprFusage(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
void(* ExecEvalSubroutine)(ExprState *state, struct ExprEvalStep *op, ExprContext *econtext)
Definition: execExpr.h:31
bool isupper
Definition: execExpr.h:504
struct SubscriptingRefState * state
Definition: execExpr.h:502
struct ExprEvalStep::@51::@67 iocoerce
ExprContext * aggcontext
Definition: execExpr.h:638
unsigned int Oid
Definition: postgres_ext.h:31
Definition: primnodes.h:181
struct ExprEvalStep::@51::@58 func
void ExecEvalSubscriptingRefAssign(ExprState *state, ExprEvalStep *op)
Var * var
Definition: execExpr.h:289
struct ExprEvalStep::@51::@82 scalararrayop
void ExecEvalArrayExpr(ExprState *state, ExprEvalStep *op)
FieldStore * fstore
Definition: execExpr.h:486
void * paramarg
Definition: execExpr.h:367
void ExecEvalGroupingFunc(ExprState *state, ExprEvalStep *op)
void ExecEvalAlternativeSubPlan(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
struct ExprEvalStep::@51::@72 row
void ExecEvalSubscriptingRefFetch(ExprState *state, ExprEvalStep *op)
Datum ExecAggTransReparent(AggState *aggstate, AggStatePerTrans pertrans, Datum newValue, bool newValueIsNull, Datum oldValue, bool oldValueIsNull)
Oid element_type
Definition: execExpr.h:542
ExecEvalSubroutine paramfunc
Definition: execExpr.h:366
int jumpnull
Definition: execExpr.h:448
void ExecEvalScalarArrayOp(ExprState *state, ExprEvalStep *op)
MinMaxOp
Definition: primnodes.h:1093
bool initialized
Definition: execExpr.h:535
void ExecEvalRow(ExprState *state, ExprEvalStep *op)
struct ExprEvalStep::@51::@87 subplan
TupleDesc tupdesc
Definition: execExpr.h:292
void ExecEvalMinMax(ExprState *state, ExprEvalStep *op)
struct ExprEvalStep::@51::@92 agg_trans
Datum * values
Definition: execExpr.h:463
void ExecEvalNextValueExpr(ExprState *state, ExprEvalStep *op)
int resultnum
Definition: execExpr.h:300
bool * elemnulls
Definition: execExpr.h:414
void ExecAggInitGroup(AggState *aggstate, AggStatePerTrans pertrans, AggStatePerGroup pergroup, ExprContext *aggcontext)
WindowFuncExprState * wfstate
Definition: execExpr.h:582
bool * named_argnull
Definition: execExpr.h:559
struct ExprEvalStep ExprEvalStep
void CheckExprStillValid(ExprState *state, ExprContext *econtext)
struct ExprEvalStep::@51::@76 fieldselect
struct ExprEvalStep::@51::@68 sqlvaluefunction
void ExecEvalFuncExprStrictFusage(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
struct ExprEvalStep::@51::@90 agg_strict_input_check
bool first
Definition: execExpr.h:290
union ExprEvalStep::@51 d
void ExecEvalFieldSelect(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
int16 elemlength
Definition: execExpr.h:417
ExprState * elemexprstate
Definition: execExpr.h:426
ConvertRowtypeExpr * convert
Definition: execExpr.h:530
struct ExprEvalStep::@51::@66 make_readonly
uintptr_t Datum
Definition: postgres.h:367
AggrefExprState * astate
Definition: execExpr.h:569
struct ExprEvalStep::@51::@59 boolexpr
Oid resulttype
Definition: execExpr.h:477
struct ExprEvalStep::@51::@53 var
AlternativeSubPlanState * asstate
Definition: execExpr.h:596
struct ExprEvalStep::@51::@69 nextvalueexpr
struct ExprEvalStep::@51::@83 xmlexpr
RowCompareType
Definition: primnodes.h:1056
TupleDesc outdesc
Definition: execExpr.h:533
struct ExprEvalStep::@51::@62 nulltest_row
void ExecEvalParamExtern(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
void ExecEvalRowNotNull(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
struct ExprEvalStep::@51::@73 rowcompare_step
struct ExprEvalStep::@51::@64 cparam
FmgrInfo * finfo
Definition: execExpr.h:323
struct ExprEvalStep::@51::@56 assign_tmp
Definition: regguts.h:298
intptr_t opcode
Definition: execExpr.h:250
void ExecEvalConstraintNotNull(ExprState *state, ExprEvalStep *op)
char * constraintname
Definition: execExpr.h:519
void ExecEvalSubscriptingRefOld(ExprState *state, ExprEvalStep *op)
void ExecEvalConstraintCheck(ExprState *state, ExprEvalStep *op)
void ExecEvalAggOrderedTransTuple(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
struct SubscriptingRefState SubscriptingRefState
struct ExprEvalStep::@51::@65 casetest
Datum * argvalue
Definition: execExpr.h:561
Datum * checkvalue
Definition: execExpr.h:521
char typalign
Definition: execExpr.h:546
struct ExprEvalStep::@51::@84 aggref
void ExecEvalWholeRowVar(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
struct ExprEvalStep::@51::@91 agg_plain_pergroup_nullcheck
Oid paramtype
Definition: execExpr.h:360
int last_var
Definition: execExpr.h:268
bool * argnull
Definition: execExpr.h:562
TupleDesc * argdesc
Definition: execExpr.h:490
struct ExprEvalStep::@51::@88 alternative_subplan
Oid resultelemtype
Definition: execExpr.h:427
void ExecEvalConvertRowtype(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
bool fixed
Definition: execExpr.h:270
struct ExprEvalStep::@51::@61 jump
bool isnull
Definition: execExpr.h:317
void ExecEvalSQLValueFunction(ExprState *state, ExprEvalStep *op)
int16 typlen
Definition: execExpr.h:544
SQLValueFunction * svf
Definition: execExpr.h:400
Datum value
Definition: execExpr.h:316
FmgrInfo * finfo_out
Definition: execExpr.h:390
void ExecEvalRowNull(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
struct ExprEvalStep::@51::@75 minmax
struct ExprEvalStep::@51::@54 wholerow
Definition: pg_list.h:50
int16 AttrNumber
Definition: attnum.h:21
AttrNumber fieldnum
Definition: execExpr.h:476
List * clauses
Definition: execExpr.h:575
FunctionCallInfo fcinfo_data_in
Definition: execExpr.h:394
struct ExprEvalStep::@51::@89 agg_deserialize
Oid seqtypid
Definition: execExpr.h:407
TupleDesc argdesc
Definition: execExpr.h:353
bool typbyval
Definition: execExpr.h:545
struct ArrayMapState * amstate
Definition: execExpr.h:428
int ncolumns
Definition: execExpr.h:495
struct ExprEvalStep::@51::@60 qualexpr
void ExecReadyInterpretedExpr(ExprState *state)
void ExecEvalFieldStoreDeForm(ExprState *state, ExprEvalStep *op, ExprContext *econtext)