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-2019, 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 */
234 
235  /* non-existent operation, used e.g. to check array lengths */
237 } ExprEvalOp;
238 
239 
240 typedef struct ExprEvalStep
241 {
242  /*
243  * Instruction to be executed. During instruction preparation this is an
244  * enum ExprEvalOp, but later it can be changed to some other type, e.g. a
245  * pointer for computed goto (that's why it's an intptr_t).
246  */
247  intptr_t opcode;
248 
249  /* where to store the result of this step */
251  bool *resnull;
252 
253  /*
254  * Inline data for the operation. Inline data is faster to access, but
255  * also bloats the size of all instructions. The union should be kept to
256  * no more than 40 bytes on 64-bit systems (so that the entire struct is
257  * no more than 64 bytes, a single cacheline on common systems).
258  */
259  union
260  {
261  /* for EEOP_INNER/OUTER/SCAN_FETCHSOME */
262  struct
263  {
264  /* attribute number up to which to fetch (inclusive) */
265  int last_var;
266  /* will the type of slot be the same for every invocation */
267  bool fixed;
268  /* tuple descriptor, if known */
270  /* type of slot, can only be relied upon if fixed is set */
272  } fetch;
273 
274  /* for EEOP_INNER/OUTER/SCAN_[SYS]VAR[_FIRST] */
275  struct
276  {
277  /* attnum is attr number - 1 for regular VAR ... */
278  /* but it's just the normal (negative) attr number for SYSVAR */
279  int attnum;
280  Oid vartype; /* type OID of variable */
281  } var;
282 
283  /* for EEOP_WHOLEROW */
284  struct
285  {
286  Var *var; /* original Var node in plan tree */
287  bool first; /* first time through, need to initialize? */
288  bool slow; /* need runtime check for nulls? */
289  TupleDesc tupdesc; /* descriptor for resulting tuples */
290  JunkFilter *junkFilter; /* JunkFilter to remove resjunk cols */
291  } wholerow;
292 
293  /* for EEOP_ASSIGN_*_VAR */
294  struct
295  {
296  /* target index in ExprState->resultslot->tts_values/nulls */
298  /* source attribute number - 1 */
299  int attnum;
300  } assign_var;
301 
302  /* for EEOP_ASSIGN_TMP[_MAKE_RO] */
303  struct
304  {
305  /* target index in ExprState->resultslot->tts_values/nulls */
306  int resultnum;
307  } assign_tmp;
308 
309  /* for EEOP_CONST */
310  struct
311  {
312  /* constant's value */
314  bool isnull;
315  } constval;
316 
317  /* for EEOP_FUNCEXPR_* / NULLIF / DISTINCT */
318  struct
319  {
320  FmgrInfo *finfo; /* function's lookup data */
321  FunctionCallInfo fcinfo_data; /* arguments etc */
322  /* faster to access without additional indirection: */
323  PGFunction fn_addr; /* actual call address */
324  int nargs; /* number of arguments */
325  } func;
326 
327  /* for EEOP_BOOL_*_STEP */
328  struct
329  {
330  bool *anynull; /* track if any input was NULL */
331  int jumpdone; /* jump here if result determined */
332  } boolexpr;
333 
334  /* for EEOP_QUAL */
335  struct
336  {
337  int jumpdone; /* jump here on false or null */
338  } qualexpr;
339 
340  /* for EEOP_JUMP[_CONDITION] */
341  struct
342  {
343  int jumpdone; /* target instruction's index */
344  } jump;
345 
346  /* for EEOP_NULLTEST_ROWIS[NOT]NULL */
347  struct
348  {
349  /* cached tupdesc pointer - filled at runtime */
351  } nulltest_row;
352 
353  /* for EEOP_PARAM_EXEC/EXTERN */
354  struct
355  {
356  int paramid; /* numeric ID for parameter */
357  Oid paramtype; /* OID of parameter's datatype */
358  } param;
359 
360  /* for EEOP_PARAM_CALLBACK */
361  struct
362  {
363  ExecEvalSubroutine paramfunc; /* add-on evaluation subroutine */
364  void *paramarg; /* private data for same */
365  int paramid; /* numeric ID for parameter */
366  Oid paramtype; /* OID of parameter's datatype */
367  } cparam;
368 
369  /* for EEOP_CASE_TESTVAL/DOMAIN_TESTVAL */
370  struct
371  {
372  Datum *value; /* value to return */
373  bool *isnull;
374  } casetest;
375 
376  /* for EEOP_MAKE_READONLY */
377  struct
378  {
379  Datum *value; /* value to coerce to read-only */
380  bool *isnull;
381  } make_readonly;
382 
383  /* for EEOP_IOCOERCE */
384  struct
385  {
386  /* lookup and call info for source type's output function */
389  /* lookup and call info for result type's input function */
392  } iocoerce;
393 
394  /* for EEOP_SQLVALUEFUNCTION */
395  struct
396  {
399 
400  /* for EEOP_NEXTVALUEEXPR */
401  struct
402  {
405  } nextvalueexpr;
406 
407  /* for EEOP_ARRAYEXPR */
408  struct
409  {
410  Datum *elemvalues; /* element values get stored here */
411  bool *elemnulls;
412  int nelems; /* length of the above arrays */
413  Oid elemtype; /* array element type */
414  int16 elemlength; /* typlen of the array element type */
415  bool elembyval; /* is the element type pass-by-value? */
416  char elemalign; /* typalign of the element type */
417  bool multidims; /* is array expression multi-D? */
418  } arrayexpr;
419 
420  /* for EEOP_ARRAYCOERCE */
421  struct
422  {
423  ExprState *elemexprstate; /* null if no per-element work */
424  Oid resultelemtype; /* element type of result array */
425  struct ArrayMapState *amstate; /* workspace for array_map */
426  } arraycoerce;
427 
428  /* for EEOP_ROW */
429  struct
430  {
431  TupleDesc tupdesc; /* descriptor for result tuples */
432  /* workspace for the values constituting the row: */
433  Datum *elemvalues;
434  bool *elemnulls;
435  } row;
436 
437  /* for EEOP_ROWCOMPARE_STEP */
438  struct
439  {
440  /* lookup and call data for column comparison function */
441  FmgrInfo *finfo;
444  /* target for comparison resulting in NULL */
445  int jumpnull;
446  /* target for comparison yielding inequality */
447  int jumpdone;
448  } rowcompare_step;
449 
450  /* for EEOP_ROWCOMPARE_FINAL */
451  struct
452  {
455 
456  /* for EEOP_MINMAX */
457  struct
458  {
459  /* workspace for argument values */
461  bool *nulls;
462  int nelems;
463  /* is it GREATEST or LEAST? */
465  /* lookup and call data for comparison function */
466  FmgrInfo *finfo;
468  } minmax;
469 
470  /* for EEOP_FIELDSELECT */
471  struct
472  {
473  AttrNumber fieldnum; /* field number to extract */
474  Oid resulttype; /* field's type */
475  /* cached tupdesc pointer - filled at runtime */
477  } fieldselect;
478 
479  /* for EEOP_FIELDSTORE_DEFORM / FIELDSTORE_FORM */
480  struct
481  {
482  /* original expression node */
484 
485  /* cached tupdesc pointer - filled at runtime */
486  /* note that a DEFORM and FORM pair share the same tupdesc */
488 
489  /* workspace for column values */
490  Datum *values;
491  bool *nulls;
492  int ncolumns;
493  } fieldstore;
494 
495  /* for EEOP_SBSREF_SUBSCRIPT */
496  struct
497  {
498  /* too big to have inline */
500  int off; /* 0-based index of this subscript */
501  bool isupper; /* is it upper or lower subscript? */
502  int jumpdone; /* jump here on null */
504 
505  /* for EEOP_SBSREF_OLD / ASSIGN / FETCH */
506  struct
507  {
508  /* too big to have inline */
509  struct SubscriptingRefState *state;
510  } sbsref;
511 
512  /* for EEOP_DOMAIN_NOTNULL / DOMAIN_CHECK */
513  struct
514  {
515  /* name of constraint */
517  /* where the result of a CHECK constraint will be stored */
519  bool *checknull;
520  /* OID of domain type */
521  Oid resulttype;
522  } domaincheck;
523 
524  /* for EEOP_CONVERT_ROWTYPE */
525  struct
526  {
527  ConvertRowtypeExpr *convert; /* original expression */
528  /* these three fields are filled at runtime: */
529  TupleDesc indesc; /* tupdesc for input type */
530  TupleDesc outdesc; /* tupdesc for output type */
531  TupleConversionMap *map; /* column mapping */
532  bool initialized; /* initialized for current types? */
533  } convert_rowtype;
534 
535  /* for EEOP_SCALARARRAYOP */
536  struct
537  {
538  /* element_type/typlen/typbyval/typalign are filled at runtime */
539  Oid element_type; /* InvalidOid if not yet filled */
540  bool useOr; /* use OR or AND semantics? */
541  int16 typlen; /* array element type storage info */
542  bool typbyval;
543  char typalign;
544  FmgrInfo *finfo; /* function's lookup data */
545  FunctionCallInfo fcinfo_data; /* arguments etc */
546  /* faster to access without additional indirection: */
547  PGFunction fn_addr; /* actual call address */
548  } scalararrayop;
549 
550  /* for EEOP_XMLEXPR */
551  struct
552  {
553  XmlExpr *xexpr; /* original expression node */
554  /* workspace for evaluating named args, if any */
557  /* workspace for evaluating unnamed args, if any */
559  bool *argnull;
560  } xmlexpr;
561 
562  /* for EEOP_AGGREF */
563  struct
564  {
565  /* out-of-line state, modified by nodeAgg.c */
567  } aggref;
568 
569  /* for EEOP_GROUPING_FUNC */
570  struct
571  {
572  AggState *parent; /* parent Agg */
573  List *clauses; /* integer list of column numbers */
574  } grouping_func;
575 
576  /* for EEOP_WINDOW_FUNC */
577  struct
578  {
579  /* out-of-line state, modified by nodeWindowAgg.c */
581  } window_func;
582 
583  /* for EEOP_SUBPLAN */
584  struct
585  {
586  /* out-of-line state, created by nodeSubplan.c */
588  } subplan;
589 
590  /* for EEOP_ALTERNATIVE_SUBPLAN */
591  struct
592  {
593  /* out-of-line state, created by nodeSubplan.c */
596 
597  /* for EEOP_AGG_*DESERIALIZE */
598  struct
599  {
602  int jumpnull;
603  } agg_deserialize;
604 
605  /* for EEOP_AGG_STRICT_INPUT_CHECK_NULLS / STRICT_INPUT_CHECK_ARGS */
606  struct
607  {
608  /*
609  * For EEOP_AGG_STRICT_INPUT_CHECK_ARGS args contains pointers to
610  * the NullableDatums that need to be checked for NULLs.
611  *
612  * For EEOP_AGG_STRICT_INPUT_CHECK_NULLS nulls contains pointers
613  * to booleans that need to be checked for NULLs.
614  *
615  * Both cases currently need to exist because sometimes the
616  * to-be-checked nulls are in TupleTableSlot.isnull array, and
617  * sometimes in FunctionCallInfoBaseData.args[i].isnull.
618  */
620  bool *nulls;
621  int nargs;
622  int jumpnull;
624 
625  /* for EEOP_AGG_INIT_TRANS */
626  struct
627  {
631  int setno;
632  int transno;
633  int setoff;
634  int jumpnull;
635  } agg_init_trans;
636 
637  /* for EEOP_AGG_STRICT_TRANS_CHECK */
638  struct
639  {
641  int setno;
642  int transno;
643  int setoff;
644  int jumpnull;
646 
647  /* for EEOP_AGG_{PLAIN,ORDERED}_TRANS* */
648  struct
649  {
653  int setno;
654  int transno;
655  int setoff;
656  } agg_trans;
657  } d;
658 } ExprEvalStep;
659 
660 
661 /* Non-inline data for container operations */
662 typedef struct SubscriptingRefState
663 {
664  bool isassignment; /* is it assignment, or just fetch? */
665 
666  Oid refelemtype; /* OID of the container element type */
667  int16 refattrlength; /* typlen of container type */
668  int16 refelemlength; /* typlen of the container element type */
669  bool refelembyval; /* is the element type pass-by-value? */
670  char refelemalign; /* typalign of the element type */
671 
672  /* numupper and upperprovided[] are filled at compile time */
673  /* at runtime, extracted subscript datums get stored in upperindex[] */
674  int numupper;
675  bool upperprovided[MAXDIM];
676  int upperindex[MAXDIM];
677 
678  /* similarly for lower indexes, if any */
679  int numlower;
680  bool lowerprovided[MAXDIM];
681  int lowerindex[MAXDIM];
682 
683  /* subscript expressions get evaluated into here */
686 
687  /* for assignment, new value to assign is evaluated into here */
690 
691  /* if we have a nested assignment, SBSREF_OLD puts old value here */
693  bool prevnull;
695 
696 
697 /* functions in execExpr.c */
698 extern void ExprEvalPushStep(ExprState *es, const ExprEvalStep *s);
699 
700 /* functions in execExprInterp.c */
703 
704 extern Datum ExecInterpExprStillValid(ExprState *state, ExprContext *econtext, bool *isNull);
705 extern void CheckExprStillValid(ExprState *state, ExprContext *econtext);
706 
707 /*
708  * Non fast-path execution functions. These are externs instead of statics in
709  * execExprInterp.c, because that allows them to be used by other methods of
710  * expression evaluation, reducing code duplication.
711  */
713  ExprContext *econtext);
715  ExprContext *econtext);
717  ExprContext *econtext);
719  ExprContext *econtext);
723 extern void ExecEvalRowNull(ExprState *state, ExprEvalStep *op,
724  ExprContext *econtext);
726  ExprContext *econtext);
727 extern void ExecEvalArrayExpr(ExprState *state, ExprEvalStep *op);
729  ExprContext *econtext);
730 extern void ExecEvalRow(ExprState *state, ExprEvalStep *op);
731 extern void ExecEvalMinMax(ExprState *state, ExprEvalStep *op);
733  ExprContext *econtext);
735  ExprContext *econtext);
737  ExprContext *econtext);
743  ExprContext *econtext);
747 extern void ExecEvalXmlExpr(ExprState *state, ExprEvalStep *op);
749 extern void ExecEvalSubPlan(ExprState *state, ExprEvalStep *op,
750  ExprContext *econtext);
752  ExprContext *econtext);
754  ExprContext *econtext);
755 extern void ExecEvalSysVar(ExprState *state, ExprEvalStep *op,
756  ExprContext *econtext, TupleTableSlot *slot);
757 
760  Datum newValue, bool newValueIsNull,
761  Datum oldValue, bool oldValueIsNull);
763  ExprContext *econtext);
765  ExprContext *econtext);
766 
767 #endif /* EXEC_EXPR_H */
SubPlanState * sstate
Definition: execExpr.h:587
NullableDatum * args
Definition: execExpr.h:619
AggStatePerTrans pertrans
Definition: execExpr.h:629
signed short int16
Definition: c.h:346
TupleDesc known_desc
Definition: execExpr.h:269
Datum ExecInterpExprStillValid(ExprState *state, ExprContext *econtext, bool *isNull)
bool * anynull
Definition: execExpr.h:330
Datum(* PGFunction)(FunctionCallInfo fcinfo)
Definition: fmgr.h:40
TupleConversionMap * map
Definition: execExpr.h:531
Definition: fmgr.h:56
void ExecEvalSubPlan(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
struct ExprEvalStep::@52::@94 agg_trans
void ExecEvalParamExec(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
struct ExprEvalStep::@52::@80 sbsref
ExprEvalOp ExecEvalStepOp(ExprState *state, ExprEvalStep *op)
void ExprEvalPushStep(ExprState *es, const ExprEvalStep *s)
Definition: execExpr.c:2124
bool multidims
Definition: execExpr.h:417
void ExecEvalFieldStoreForm(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
bool * checknull
Definition: execExpr.h:519
FunctionCallInfo fcinfo_data
Definition: execExpr.h:321
struct ExprEvalStep::@52::@84 xmlexpr
RowCompareType rctype
Definition: execExpr.h:453
Datum * elemvalues
Definition: execExpr.h:410
void ExecEvalCurrentOfExpr(ExprState *state, ExprEvalStep *op)
char elemalign
Definition: execExpr.h:416
struct ExprEvalStep::@52::@88 subplan
struct ExprEvalStep::@52::@54 var
JunkFilter * junkFilter
Definition: execExpr.h:290
Datum * resvalue
Definition: execExpr.h:250
void ExecEvalSysVar(ExprState *state, ExprEvalStep *op, ExprContext *econtext, TupleTableSlot *slot)
PGFunction fn_addr
Definition: execExpr.h:323
#define MAXDIM
Definition: c.h:536
void ExecEvalArrayCoerce(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
TupleDesc indesc
Definition: execExpr.h:529
struct ExprEvalStep::@52::@92 agg_init_trans
bool elembyval
Definition: execExpr.h:415
struct ExprEvalStep::@52::@85 aggref
int jumpdone
Definition: execExpr.h:331
Oid elemtype
Definition: execExpr.h:413
const TupleTableSlotOps * kind
Definition: execExpr.h:271
Datum * value
Definition: execExpr.h:372
bool ExecEvalSubscriptingRef(ExprState *state, ExprEvalStep *op)
bool * resnull
Definition: execExpr.h:251
FmgrInfo * finfo_in
Definition: execExpr.h:390
ExprEvalOp
Definition: execExpr.h:44
void ExecEvalXmlExpr(ExprState *state, ExprEvalStep *op)
bool * isnull
Definition: execExpr.h:373
bool * nulls
Definition: execExpr.h:461
FunctionCallInfo fcinfo_data_out
Definition: execExpr.h:388
void ExecEvalAggOrderedTransDatum(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
bool useOr
Definition: execExpr.h:540
XmlExpr * xexpr
Definition: execExpr.h:553
Datum * named_argvalue
Definition: execExpr.h:555
MinMaxOp op
Definition: execExpr.h:464
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:501
struct SubscriptingRefState * state
Definition: execExpr.h:499
ExprContext * aggcontext
Definition: execExpr.h:630
unsigned int Oid
Definition: postgres_ext.h:31
union ExprEvalStep::@52 d
Definition: primnodes.h:167
void ExecEvalSubscriptingRefAssign(ExprState *state, ExprEvalStep *op)
Var * var
Definition: execExpr.h:286
void ExecEvalArrayExpr(ExprState *state, ExprEvalStep *op)
FieldStore * fstore
Definition: execExpr.h:483
struct ExprEvalStep::@52::@65 cparam
struct ExprEvalStep::@52::@61 qualexpr
struct ExprEvalStep::@52::@81 domaincheck
void * paramarg
Definition: execExpr.h:364
void ExecEvalGroupingFunc(ExprState *state, ExprEvalStep *op)
struct ExprEvalStep::@52::@90 agg_deserialize
void ExecEvalAlternativeSubPlan(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
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:539
AggState * parent
Definition: execExpr.h:572
ExecEvalSubroutine paramfunc
Definition: execExpr.h:363
int jumpnull
Definition: execExpr.h:445
struct ExprEvalStep::@52::@86 grouping_func
void ExecEvalScalarArrayOp(ExprState *state, ExprEvalStep *op)
MinMaxOp
Definition: primnodes.h:1079
bool initialized
Definition: execExpr.h:532
struct ExprEvalStep::@52::@73 row
void ExecEvalRow(ExprState *state, ExprEvalStep *op)
struct ExprEvalStep::@52::@63 nulltest_row
struct ExprEvalStep::@52::@53 fetch
TupleDesc tupdesc
Definition: execExpr.h:289
void ExecEvalMinMax(ExprState *state, ExprEvalStep *op)
Datum * values
Definition: execExpr.h:460
struct ExprEvalStep::@52::@67 make_readonly
struct ExprEvalStep::@52::@78 fieldstore
struct ExprEvalStep::@52::@72 arraycoerce
void ExecEvalNextValueExpr(ExprState *state, ExprEvalStep *op)
struct ExprEvalStep::@52::@89 alternative_subplan
int resultnum
Definition: execExpr.h:297
struct ExprEvalStep::@52::@66 casetest
bool * elemnulls
Definition: execExpr.h:411
WindowFuncExprState * wfstate
Definition: execExpr.h:580
bool * named_argnull
Definition: execExpr.h:556
struct ExprEvalStep ExprEvalStep
struct ExprEvalStep::@52::@58 constval
void CheckExprStillValid(ExprState *state, ExprContext *econtext)
struct ExprEvalStep::@52::@60 boolexpr
void ExecAggInitGroup(AggState *aggstate, AggStatePerTrans pertrans, AggStatePerGroup pergroup)
void ExecEvalFuncExprStrictFusage(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
struct ExprEvalStep::@52::@71 arrayexpr
struct ExprEvalStep::@52::@64 param
bool first
Definition: execExpr.h:287
void ExecEvalFieldSelect(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
struct ExprEvalStep::@52::@93 agg_strict_trans_check
int16 elemlength
Definition: execExpr.h:414
AggState * aggstate
Definition: execExpr.h:600
struct ExprEvalStep::@52::@87 window_func
ExprState * elemexprstate
Definition: execExpr.h:423
ConvertRowtypeExpr * convert
Definition: execExpr.h:527
uintptr_t Datum
Definition: postgres.h:367
AggrefExprState * astate
Definition: execExpr.h:566
Oid resulttype
Definition: execExpr.h:474
AlternativeSubPlanState * asstate
Definition: execExpr.h:594
struct ExprEvalStep::@52::@62 jump
RowCompareType
Definition: primnodes.h:1042
struct ExprEvalStep::@52::@56 assign_var
TupleDesc outdesc
Definition: execExpr.h:530
struct ExprEvalStep::@52::@82 convert_rowtype
struct ExprEvalStep::@52::@59 func
void ExecEvalParamExtern(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
void ExecEvalRowNotNull(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
struct ExprEvalStep::@52::@74 rowcompare_step
FmgrInfo * finfo
Definition: execExpr.h:320
Definition: regguts.h:298
intptr_t opcode
Definition: execExpr.h:247
void ExecEvalConstraintNotNull(ExprState *state, ExprEvalStep *op)
char * constraintname
Definition: execExpr.h:516
void ExecEvalSubscriptingRefOld(ExprState *state, ExprEvalStep *op)
struct ExprEvalStep::@52::@70 nextvalueexpr
struct ExprEvalStep::@52::@91 agg_strict_input_check
void ExecEvalConstraintCheck(ExprState *state, ExprEvalStep *op)
void ExecEvalAggOrderedTransTuple(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
struct SubscriptingRefState SubscriptingRefState
Datum * argvalue
Definition: execExpr.h:558
Datum * checkvalue
Definition: execExpr.h:518
struct ExprEvalStep::@52::@76 minmax
struct ExprEvalStep::@52::@79 sbsref_subscript
char typalign
Definition: execExpr.h:543
void ExecEvalWholeRowVar(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
struct ExprEvalStep::@52::@69 sqlvaluefunction
Oid paramtype
Definition: execExpr.h:357
int last_var
Definition: execExpr.h:265
bool * argnull
Definition: execExpr.h:559
TupleDesc * argdesc
Definition: execExpr.h:487
struct ExprEvalStep::@52::@68 iocoerce
Oid resultelemtype
Definition: execExpr.h:424
void ExecEvalConvertRowtype(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
bool fixed
Definition: execExpr.h:267
bool isnull
Definition: execExpr.h:314
void ExecEvalSQLValueFunction(ExprState *state, ExprEvalStep *op)
int16 typlen
Definition: execExpr.h:541
SQLValueFunction * svf
Definition: execExpr.h:397
struct ExprEvalStep::@52::@77 fieldselect
Datum value
Definition: execExpr.h:313
FmgrInfo * finfo_out
Definition: execExpr.h:387
void ExecEvalRowNull(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
struct ExprEvalStep::@52::@83 scalararrayop
struct ExprEvalStep::@52::@55 wholerow
Definition: pg_list.h:50
int16 AttrNumber
Definition: attnum.h:21
AttrNumber fieldnum
Definition: execExpr.h:473
List * clauses
Definition: execExpr.h:573
FunctionCallInfo fcinfo_data_in
Definition: execExpr.h:391
Oid seqtypid
Definition: execExpr.h:404
TupleDesc argdesc
Definition: execExpr.h:350
bool typbyval
Definition: execExpr.h:542
struct ArrayMapState * amstate
Definition: execExpr.h:425
int ncolumns
Definition: execExpr.h:492
void ExecReadyInterpretedExpr(ExprState *state)
struct ExprEvalStep::@52::@75 rowcompare_final
void ExecEvalFieldStoreDeForm(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
struct ExprEvalStep::@52::@57 assign_tmp