PostgreSQL Source Code  git master
nodes.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * nodes.h
4  * Definitions for tagged nodes.
5  *
6  *
7  * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  * src/include/nodes/nodes.h
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef NODES_H
15 #define NODES_H
16 
17 /*
18  * The first field of every node is NodeTag. Each node created (with makeNode)
19  * will have one of the following tags as the value of its first field.
20  *
21  * Note that inserting or deleting node types changes the numbers of other
22  * node types later in the list. This is no problem during development, since
23  * the node numbers are never stored on disk. But don't do it in a released
24  * branch, because that would represent an ABI break for extensions.
25  */
26 typedef enum NodeTag
27 {
28  T_Invalid = 0,
29 
30  /*
31  * TAGS FOR EXECUTOR NODES (execnodes.h)
32  */
42 
43  /*
44  * TAGS FOR PLAN NODES (plannodes.h)
45  */
91  /* these aren't subclasses of Plan: */
99 
100  /*
101  * TAGS FOR PLAN STATE NODES (execnodes.h)
102  *
103  * These should correspond one-to-one with Plan node types.
104  */
150 
151  /*
152  * TAGS FOR PRIMITIVE NODES (primnodes.h)
153  */
217 
218  /*
219  * TAGS FOR EXPRESSION STATE NODES (execnodes.h)
220  *
221  * ExprState represents the evaluation state for a whole expression tree.
222  * Most Expr-based plan nodes do not have a corresponding expression state
223  * node, they're fully handled within execExpr* - but sometimes the state
224  * needs to be shared with other parts of the executor, as for example
225  * with SubPlanState, which nodeSubplan.c has to modify.
226  */
232 
233  /*
234  * TAGS FOR PLANNER NODES (pathnodes.h)
235  */
278  /* these aren't subclasses of Path: */
297 
298  /*
299  * TAGS FOR MEMORY NODES (memnodes.h)
300  */
304 
305  /*
306  * TAGS FOR VALUE NODES (value.h)
307  */
313 
314  /*
315  * TAGS FOR LIST NODES (pg_list.h)
316  */
320 
321  /*
322  * TAGS FOR EXTENSIBLE NODES (extensible.h)
323  */
325 
326  /*
327  * TAGS FOR STATEMENT NODES (mostly in parsenodes.h)
328  */
449 
450  /*
451  * TAGS FOR PARSE TREE NODES (parsenodes.h)
452  */
527 
528  /*
529  * TAGS FOR REPLICATION GRAMMAR PARSE NODES (replnodes.h)
530  */
538 
539  /*
540  * TAGS FOR RANDOM OTHER STUFF
541  *
542  * These are objects that aren't part of parse/plan/execute node tree
543  * structures, but we give them NodeTags anyway for identification
544  * purposes (usually because they are involved in APIs where we want to
545  * pass multiple object types through the same pointer).
546  */
547  T_TriggerData, /* in commands/trigger.h */
548  T_EventTriggerData, /* in commands/event_trigger.h */
549  T_ReturnSetInfo, /* in nodes/execnodes.h */
550  T_WindowObjectData, /* private in nodeWindowAgg.c */
551  T_TIDBitmap, /* in nodes/tidbitmap.h */
552  T_InlineCodeBlock, /* in nodes/parsenodes.h */
553  T_FdwRoutine, /* in foreign/fdwapi.h */
554  T_IndexAmRoutine, /* in access/amapi.h */
555  T_TableAmRoutine, /* in access/tableam.h */
556  T_TsmRoutine, /* in access/tsmapi.h */
557  T_ForeignKeyCacheInfo, /* in utils/rel.h */
558  T_CallContext, /* in nodes/parsenodes.h */
559  T_SupportRequestSimplify, /* in nodes/supportnodes.h */
560  T_SupportRequestSelectivity, /* in nodes/supportnodes.h */
561  T_SupportRequestCost, /* in nodes/supportnodes.h */
562  T_SupportRequestRows, /* in nodes/supportnodes.h */
563  T_SupportRequestIndexCondition, /* in nodes/supportnodes.h */
564  T_SupportRequestWFuncMonotonic /* in nodes/supportnodes.h */
566 
567 /*
568  * The first field of a node of any type is guaranteed to be the NodeTag.
569  * Hence the type of any node can be gotten by casting it to Node. Declaring
570  * a variable to be of Node * (instead of void *) can also facilitate
571  * debugging.
572  */
573 typedef struct Node
574 {
577 
578 #define nodeTag(nodeptr) (((const Node*)(nodeptr))->type)
579 
580 /*
581  * newNode -
582  * create a new node of the specified size and tag the node with the
583  * specified tag.
584  *
585  * !WARNING!: Avoid using newNode directly. You should be using the
586  * macro makeNode. eg. to create a Query node, use makeNode(Query)
587  *
588  * Note: the size argument should always be a compile-time constant, so the
589  * apparent risk of multiple evaluation doesn't matter in practice.
590  */
591 #ifdef __GNUC__
592 
593 /* With GCC, we can use a compound statement within an expression */
594 #define newNode(size, tag) \
595 ({ Node *_result; \
596  AssertMacro((size) >= sizeof(Node)); /* need the tag, at least */ \
597  _result = (Node *) palloc0fast(size); \
598  _result->type = (tag); \
599  _result; \
600 })
601 #else
602 
603 /*
604  * There is no way to dereference the palloc'ed pointer to assign the
605  * tag, and also return the pointer itself, so we need a holder variable.
606  * Fortunately, this macro isn't recursive so we just define
607  * a global variable for this purpose.
608  */
610 
611 #define newNode(size, tag) \
612 ( \
613  AssertMacro((size) >= sizeof(Node)), /* need the tag, at least */ \
614  newNodeMacroHolder = (Node *) palloc0fast(size), \
615  newNodeMacroHolder->type = (tag), \
616  newNodeMacroHolder \
617 )
618 #endif /* __GNUC__ */
619 
620 
621 #define makeNode(_type_) ((_type_ *) newNode(sizeof(_type_),T_##_type_))
622 #define NodeSetTag(nodeptr,t) (((Node*)(nodeptr))->type = (t))
623 
624 #define IsA(nodeptr,_type_) (nodeTag(nodeptr) == T_##_type_)
625 
626 /*
627  * castNode(type, ptr) casts ptr to "type *", and if assertions are enabled,
628  * verifies that the node has the appropriate type (using its nodeTag()).
629  *
630  * Use an inline function when assertions are enabled, to avoid multiple
631  * evaluations of the ptr argument (which could e.g. be a function call).
632  */
633 #ifdef USE_ASSERT_CHECKING
634 static inline Node *
635 castNodeImpl(NodeTag type, void *ptr)
636 {
637  Assert(ptr == NULL || nodeTag(ptr) == type);
638  return (Node *) ptr;
639 }
640 #define castNode(_type_, nodeptr) ((_type_ *) castNodeImpl(T_##_type_, nodeptr))
641 #else
642 #define castNode(_type_, nodeptr) ((_type_ *) (nodeptr))
643 #endif /* USE_ASSERT_CHECKING */
644 
645 
646 /* ----------------------------------------------------------------
647  * extern declarations follow
648  * ----------------------------------------------------------------
649  */
650 
651 /*
652  * nodes/{outfuncs.c,print.c}
653  */
654 struct Bitmapset; /* not to include bitmapset.h here */
655 struct StringInfoData; /* not to include stringinfo.h here */
656 
657 extern void outNode(struct StringInfoData *str, const void *obj);
658 extern void outToken(struct StringInfoData *str, const char *s);
659 extern void outBitmapset(struct StringInfoData *str,
660  const struct Bitmapset *bms);
661 extern void outDatum(struct StringInfoData *str, uintptr_t value,
662  int typlen, bool typbyval);
663 extern char *nodeToString(const void *obj);
664 extern char *bmsToString(const struct Bitmapset *bms);
665 
666 /*
667  * nodes/{readfuncs.c,read.c}
668  */
669 extern void *stringToNode(const char *str);
670 #ifdef WRITE_READ_PARSE_PLAN_TREES
671 extern void *stringToNodeWithLocations(const char *str);
672 #endif
673 extern struct Bitmapset *readBitmapset(void);
674 extern uintptr_t readDatum(bool typbyval);
675 extern bool *readBoolCols(int numCols);
676 extern int *readIntCols(int numCols);
677 extern Oid *readOidCols(int numCols);
678 extern int16 *readAttrNumberCols(int numCols);
679 
680 /*
681  * nodes/copyfuncs.c
682  */
683 extern void *copyObjectImpl(const void *obj);
684 
685 /* cast result back to argument type, if supported by compiler */
686 #ifdef HAVE_TYPEOF
687 #define copyObject(obj) ((typeof(obj)) copyObjectImpl(obj))
688 #else
689 #define copyObject(obj) copyObjectImpl(obj)
690 #endif
691 
692 /*
693  * nodes/equalfuncs.c
694  */
695 extern bool equal(const void *a, const void *b);
696 
697 
698 /*
699  * Typedefs for identifying qualifier selectivities and plan costs as such.
700  * These are just plain "double"s, but declaring a variable as Selectivity
701  * or Cost makes the intent more obvious.
702  *
703  * These could have gone into plannodes.h or some such, but many files
704  * depend on them...
705  */
706 typedef double Selectivity; /* fraction of tuples a qualifier will pass */
707 typedef double Cost; /* execution cost (in page-access units) */
708 typedef double Cardinality; /* (estimated) number of rows or other integer
709  * count */
710 
711 
712 /*
713  * CmdType -
714  * enums for type of operation represented by a Query or PlannedStmt
715  *
716  * This is needed in both parsenodes.h and plannodes.h, so put it here...
717  */
718 typedef enum CmdType
719 {
721  CMD_SELECT, /* select stmt */
722  CMD_UPDATE, /* update stmt */
723  CMD_INSERT, /* insert stmt */
724  CMD_DELETE, /* delete stmt */
725  CMD_MERGE, /* merge stmt */
726  CMD_UTILITY, /* cmds like create, destroy, copy, vacuum,
727  * etc. */
728  CMD_NOTHING /* dummy command for instead nothing rules
729  * with qual */
731 
732 
733 /*
734  * JoinType -
735  * enums for types of relation joins
736  *
737  * JoinType determines the exact semantics of joining two relations using
738  * a matching qualification. For example, it tells what to do with a tuple
739  * that has no match in the other relation.
740  *
741  * This is needed in both parsenodes.h and plannodes.h, so put it here...
742  */
743 typedef enum JoinType
744 {
745  /*
746  * The canonical kinds of joins according to the SQL JOIN syntax. Only
747  * these codes can appear in parser output (e.g., JoinExpr nodes).
748  */
749  JOIN_INNER, /* matching tuple pairs only */
750  JOIN_LEFT, /* pairs + unmatched LHS tuples */
751  JOIN_FULL, /* pairs + unmatched LHS + unmatched RHS */
752  JOIN_RIGHT, /* pairs + unmatched RHS tuples */
753 
754  /*
755  * Semijoins and anti-semijoins (as defined in relational theory) do not
756  * appear in the SQL JOIN syntax, but there are standard idioms for
757  * representing them (e.g., using EXISTS). The planner recognizes these
758  * cases and converts them to joins. So the planner and executor must
759  * support these codes. NOTE: in JOIN_SEMI output, it is unspecified
760  * which matching RHS row is joined to. In JOIN_ANTI output, the row is
761  * guaranteed to be null-extended.
762  */
763  JOIN_SEMI, /* 1 copy of each LHS row that has match(es) */
764  JOIN_ANTI, /* 1 copy of each LHS row that has no match */
765 
766  /*
767  * These codes are used internally in the planner, but are not supported
768  * by the executor (nor, indeed, by most of the planner).
769  */
770  JOIN_UNIQUE_OUTER, /* LHS path must be made unique */
771  JOIN_UNIQUE_INNER /* RHS path must be made unique */
772 
773  /*
774  * We might need additional join types someday.
775  */
777 
778 /*
779  * OUTER joins are those for which pushed-down quals must behave differently
780  * from the join's own quals. This is in fact everything except INNER and
781  * SEMI joins. However, this macro must also exclude the JOIN_UNIQUE symbols
782  * since those are temporary proxies for what will eventually be an INNER
783  * join.
784  *
785  * Note: semijoins are a hybrid case, but we choose to treat them as not
786  * being outer joins. This is okay principally because the SQL syntax makes
787  * it impossible to have a pushed-down qual that refers to the inner relation
788  * of a semijoin; so there is no strong need to distinguish join quals from
789  * pushed-down quals. This is convenient because for almost all purposes,
790  * quals attached to a semijoin can be treated the same as innerjoin quals.
791  */
792 #define IS_OUTER_JOIN(jointype) \
793  (((1 << (jointype)) & \
794  ((1 << JOIN_LEFT) | \
795  (1 << JOIN_FULL) | \
796  (1 << JOIN_RIGHT) | \
797  (1 << JOIN_ANTI))) != 0)
798 
799 /*
800  * AggStrategy -
801  * overall execution strategies for Agg plan nodes
802  *
803  * This is needed in both pathnodes.h and plannodes.h, so put it here...
804  */
805 typedef enum AggStrategy
806 {
807  AGG_PLAIN, /* simple agg across all input rows */
808  AGG_SORTED, /* grouped agg, input must be sorted */
809  AGG_HASHED, /* grouped agg, use internal hashtable */
810  AGG_MIXED /* grouped agg, hash and sort both used */
812 
813 /*
814  * AggSplit -
815  * splitting (partial aggregation) modes for Agg plan nodes
816  *
817  * This is needed in both pathnodes.h and plannodes.h, so put it here...
818  */
819 
820 /* Primitive options supported by nodeAgg.c: */
821 #define AGGSPLITOP_COMBINE 0x01 /* substitute combinefn for transfn */
822 #define AGGSPLITOP_SKIPFINAL 0x02 /* skip finalfn, return state as-is */
823 #define AGGSPLITOP_SERIALIZE 0x04 /* apply serialfn to output */
824 #define AGGSPLITOP_DESERIALIZE 0x08 /* apply deserialfn to input */
825 
826 /* Supported operating modes (i.e., useful combinations of these options): */
827 typedef enum AggSplit
828 {
829  /* Basic, non-split aggregation: */
831  /* Initial phase of partial aggregation, with serialization: */
833  /* Final phase of partial aggregation, with deserialization: */
836 
837 /* Test whether an AggSplit value selects each primitive option: */
838 #define DO_AGGSPLIT_COMBINE(as) (((as) & AGGSPLITOP_COMBINE) != 0)
839 #define DO_AGGSPLIT_SKIPFINAL(as) (((as) & AGGSPLITOP_SKIPFINAL) != 0)
840 #define DO_AGGSPLIT_SERIALIZE(as) (((as) & AGGSPLITOP_SERIALIZE) != 0)
841 #define DO_AGGSPLIT_DESERIALIZE(as) (((as) & AGGSPLITOP_DESERIALIZE) != 0)
842 
843 /*
844  * SetOpCmd and SetOpStrategy -
845  * overall semantics and execution strategies for SetOp plan nodes
846  *
847  * This is needed in both pathnodes.h and plannodes.h, so put it here...
848  */
849 typedef enum SetOpCmd
850 {
856 
857 typedef enum SetOpStrategy
858 {
859  SETOP_SORTED, /* input must be sorted */
860  SETOP_HASHED /* use internal hashtable */
862 
863 /*
864  * OnConflictAction -
865  * "ON CONFLICT" clause type of query
866  *
867  * This is needed in both parsenodes.h and plannodes.h, so put it here...
868  */
869 typedef enum OnConflictAction
870 {
871  ONCONFLICT_NONE, /* No "ON CONFLICT" clause */
872  ONCONFLICT_NOTHING, /* ON CONFLICT ... DO NOTHING */
873  ONCONFLICT_UPDATE /* ON CONFLICT ... DO UPDATE */
875 
876 /*
877  * LimitOption -
878  * LIMIT option of query
879  *
880  * This is needed in both parsenodes.h and plannodes.h, so put it here...
881  */
882 typedef enum LimitOption
883 {
884  LIMIT_OPTION_COUNT, /* FETCH FIRST... ONLY */
885  LIMIT_OPTION_WITH_TIES, /* FETCH FIRST... WITH TIES */
886  LIMIT_OPTION_DEFAULT, /* No limit present */
888 
889 #endif /* NODES_H */
#define PGDLLIMPORT
Definition: c.h:1331
signed short int16
Definition: c.h:428
static struct @151 value
int b
Definition: isn.c:70
int a
Definition: isn.c:69
Assert(fmt[strlen(fmt) - 1] !='\n')
SetOpCmd
Definition: nodes.h:850
@ SETOPCMD_EXCEPT
Definition: nodes.h:853
@ SETOPCMD_EXCEPT_ALL
Definition: nodes.h:854
@ SETOPCMD_INTERSECT_ALL
Definition: nodes.h:852
@ SETOPCMD_INTERSECT
Definition: nodes.h:851
SetOpStrategy
Definition: nodes.h:858
@ SETOP_HASHED
Definition: nodes.h:860
@ SETOP_SORTED
Definition: nodes.h:859
double Cost
Definition: nodes.h:707
void outToken(struct StringInfoData *str, const char *s)
#define nodeTag(nodeptr)
Definition: nodes.h:578
struct Node Node
void outDatum(struct StringInfoData *str, uintptr_t value, int typlen, bool typbyval)
int * readIntCols(int numCols)
Definition: readfuncs.c:3361
#define AGGSPLITOP_DESERIALIZE
Definition: nodes.h:824
#define AGGSPLITOP_SKIPFINAL
Definition: nodes.h:822
OnConflictAction
Definition: nodes.h:870
@ ONCONFLICT_NONE
Definition: nodes.h:871
@ ONCONFLICT_UPDATE
Definition: nodes.h:873
@ ONCONFLICT_NOTHING
Definition: nodes.h:872
#define AGGSPLITOP_SERIALIZE
Definition: nodes.h:823
PGDLLIMPORT Node * newNodeMacroHolder
Definition: nodes.c:31
struct Bitmapset * readBitmapset(void)
Definition: readfuncs.c:236
void outBitmapset(struct StringInfoData *str, const struct Bitmapset *bms)
double Cardinality
Definition: nodes.h:708
void * copyObjectImpl(const void *obj)
Definition: copyfuncs.c:5555
CmdType
Definition: nodes.h:719
@ CMD_MERGE
Definition: nodes.h:725
@ CMD_UTILITY
Definition: nodes.h:726
@ CMD_INSERT
Definition: nodes.h:723
@ CMD_DELETE
Definition: nodes.h:724
@ CMD_UNKNOWN
Definition: nodes.h:720
@ CMD_UPDATE
Definition: nodes.h:722
@ CMD_SELECT
Definition: nodes.h:721
@ CMD_NOTHING
Definition: nodes.h:728
bool equal(const void *a, const void *b)
Definition: equalfuncs.c:3564
AggStrategy
Definition: nodes.h:806
@ AGG_SORTED
Definition: nodes.h:808
@ AGG_HASHED
Definition: nodes.h:809
@ AGG_MIXED
Definition: nodes.h:810
@ AGG_PLAIN
Definition: nodes.h:807
char * bmsToString(const struct Bitmapset *bms)
NodeTag
Definition: nodes.h:27
@ T_LockingClause
Definition: nodes.h:491
@ T_Unique
Definition: nodes.h:84
@ T_HashJoinState
Definition: nodes.h:135
@ T_BitString
Definition: nodes.h:312
@ T_SupportRequestCost
Definition: nodes.h:561
@ T_RangeTblEntry
Definition: nodes.h:479
@ T_TIDBitmap
Definition: nodes.h:551
@ T_FieldStore
Definition: nodes.h:175
@ T_AlterPublicationStmt
Definition: nodes.h:441
@ T_AlternativeSubPlan
Definition: nodes.h:173
@ T_PartitionCmd
Definition: nodes.h:507
@ T_CoalesceExpr
Definition: nodes.h:187
@ T_CreateSchemaStmt
Definition: nodes.h:387
@ T_PathKey
Definition: nodes.h:281
@ T_PartitionPruneInfo
Definition: nodes.h:94
@ T_ModifyTablePath
Definition: nodes.h:276
@ T_RuleStmt
Definition: nodes.h:360
@ T_ExtensibleNode
Definition: nodes.h:324
@ T_SortPath
Definition: nodes.h:265
@ T_NamedTuplestoreScan
Definition: nodes.h:69
@ T_CreateRoleStmt
Definition: nodes.h:380
@ T_RangeVar
Definition: nodes.h:155
@ T_DoStmt
Definition: nodes.h:358
@ T_RangeTableFunc
Definition: nodes.h:471
@ T_Constraint
Definition: nodes.h:477
@ T_CreateStmt
Definition: nodes.h:349
@ T_WorkTableScanState
Definition: nodes.h:129
@ T_RangeFunction
Definition: nodes.h:469
@ T_OnConflictSetState
Definition: nodes.h:37
@ T_SubqueryScanPath
Definition: nodes.h:249
@ T_LoadStmt
Definition: nodes.h:366
@ T_GroupResultPath
Definition: nodes.h:257
@ T_JsonParseExpr
Definition: nodes.h:208
@ T_JsonSerializeExpr
Definition: nodes.h:210
@ T_CreateTrigStmt
Definition: nodes.h:378
@ T_XmlSerialize
Definition: nodes.h:493
@ T_MergeAppendState
Definition: nodes.h:110
@ T_DefElem
Definition: nodes.h:478
@ T_WithCheckOption
Definition: nodes.h:482
@ T_DomainConstraintState
Definition: nodes.h:231
@ T_ReindexStmt
Definition: nodes.h:385
@ T_SupportRequestSelectivity
Definition: nodes.h:560
@ T_AlterEnumStmt
Definition: nodes.h:413
@ T_List
Definition: nodes.h:317
@ T_ColumnDef
Definition: nodes.h:474
@ T_ExecuteStmt
Definition: nodes.h:398
@ T_PlannerParamItem
Definition: nodes.h:292
@ T_HashPath
Definition: nodes.h:254
@ T_CTESearchClause
Definition: nodes.h:497
@ T_IndexOnlyScanState
Definition: nodes.h:118
@ T_IndexOptInfo
Definition: nodes.h:239
@ T_OnConflictExpr
Definition: nodes.h:203
@ T_FdwRoutine
Definition: nodes.h:553
@ T_SubLink
Definition: nodes.h:171
@ T_RangeTblRef
Definition: nodes.h:200
@ T_JsonTableColumn
Definition: nodes.h:520
@ T_SeqScanState
Definition: nodes.h:115
@ T_InferenceElem
Definition: nodes.h:198
@ T_ValuesScanState
Definition: nodes.h:126
@ T_CreateFdwStmt
Definition: nodes.h:416
@ T_RenameStmt
Definition: nodes.h:359
@ T_CreateEventTrigStmt
Definition: nodes.h:431
@ T_SortGroupClause
Definition: nodes.h:483
@ T_GroupPath
Definition: nodes.h:267
@ T_CoerceToDomainValue
Definition: nodes.h:194
@ T_ObjectWithArgs
Definition: nodes.h:486
@ T_DiscardStmt
Definition: nodes.h:377
@ T_WindowFunc
Definition: nodes.h:162
@ T_CustomScanState
Definition: nodes.h:131
@ T_ImportForeignSchemaStmt
Definition: nodes.h:427
@ T_FieldSelect
Definition: nodes.h:174
@ T_JsonTablePlan
Definition: nodes.h:521
@ T_VacuumStmt
Definition: nodes.h:370
@ T_InlineCodeBlock
Definition: nodes.h:552
@ T_ArrayExpr
Definition: nodes.h:184
@ T_IdentifySystemCmd
Definition: nodes.h:531
@ T_TableFunc
Definition: nodes.h:156
@ T_TidRangeScan
Definition: nodes.h:63
@ T_AlterOperatorStmt
Definition: nodes.h:406
@ T_TableFuncScan
Definition: nodes.h:67
@ T_HashState
Definition: nodes.h:146
@ T_CollateExpr
Definition: nodes.h:180
@ T_JsonBehavior
Definition: nodes.h:525
@ T_JsonArrayConstructor
Definition: nodes.h:512
@ T_CallContext
Definition: nodes.h:558
@ T_ReturnStmt
Definition: nodes.h:337
@ T_CreateTableSpaceStmt
Definition: nodes.h:401
@ T_DropRoleStmt
Definition: nodes.h:382
@ T_AlterTableSpaceOptionsStmt
Definition: nodes.h:423
@ T_PartitionElem
Definition: nodes.h:503
@ T_BoolExpr
Definition: nodes.h:170
@ T_MinMaxAggPath
Definition: nodes.h:271
@ T_AlterCollationStmt
Definition: nodes.h:446
@ T_RelOptInfo
Definition: nodes.h:238
@ T_AccessPriv
Definition: nodes.h:487
@ T_OpExpr
Definition: nodes.h:166
@ T_SupportRequestRows
Definition: nodes.h:562
@ T_PathKeyInfo
Definition: nodes.h:282
@ T_SupportRequestWFuncMonotonic
Definition: nodes.h:564
@ T_CreateStatsStmt
Definition: nodes.h:445
@ T_CreateFunctionStmt
Definition: nodes.h:356
@ T_FunctionScan
Definition: nodes.h:65
@ T_TypeName
Definition: nodes.h:473
@ T_AlterDatabaseStmt
Definition: nodes.h:388
@ T_CreateSubscriptionStmt
Definition: nodes.h:442
@ T_PublicationObjSpec
Definition: nodes.h:509
@ T_SpecialJoinInfo
Definition: nodes.h:287
@ T_AlterRoleStmt
Definition: nodes.h:381
@ T_ExprContext
Definition: nodes.h:34
@ T_PathTarget
Definition: nodes.h:283
@ T_JoinExpr
Definition: nodes.h:201
@ T_ScalarArrayOpExpr
Definition: nodes.h:169
@ T_NestPath
Definition: nodes.h:252
@ T_CaseExpr
Definition: nodes.h:181
@ T_JsonArgument
Definition: nodes.h:523
@ T_RelabelType
Definition: nodes.h:176
@ T_TupleTableSlot
Definition: nodes.h:41
@ T_CreatePublicationStmt
Definition: nodes.h:440
@ T_PlaceHolderInfo
Definition: nodes.h:290
@ T_JsonTableParent
Definition: nodes.h:215
@ T_PublicationTable
Definition: nodes.h:510
@ T_DeleteStmt
Definition: nodes.h:333
@ T_XmlExpr
Definition: nodes.h:190
@ T_CreateForeignTableStmt
Definition: nodes.h:426
@ T_ForeignKeyOptInfo
Definition: nodes.h:240
@ T_TidRangeScanState
Definition: nodes.h:122
@ T_GroupState
Definition: nodes.h:140
@ T_GroupingSet
Definition: nodes.h:484
@ T_AlterObjectDependsStmt
Definition: nodes.h:403
@ T_BitmapOr
Definition: nodes.h:54
@ T_CustomPath
Definition: nodes.h:251
@ T_CreateRangeStmt
Definition: nodes.h:412
@ T_Scan
Definition: nodes.h:55
@ T_CreateConversionStmt
Definition: nodes.h:392
@ T_Material
Definition: nodes.h:77
@ T_ExprState
Definition: nodes.h:227
@ T_ClusterStmt
Definition: nodes.h:347
@ T_SampleScanState
Definition: nodes.h:116
@ T_RawStmt
Definition: nodes.h:329
@ T_WindowObjectData
Definition: nodes.h:550
@ T_SupportRequestSimplify
Definition: nodes.h:559
@ T_DropOwnedStmt
Definition: nodes.h:408
@ T_IndexOnlyScan
Definition: nodes.h:59
@ T_FunctionParameter
Definition: nodes.h:490
@ T_JsonReturning
Definition: nodes.h:206
@ T_TableSampleClause
Definition: nodes.h:481
@ T_Append
Definition: nodes.h:50
@ T_DropUserMappingStmt
Definition: nodes.h:422
@ T_SetOperationStmt
Definition: nodes.h:342
@ T_RestrictInfo
Definition: nodes.h:284
@ T_LockStmt
Definition: nodes.h:383
@ T_Gather
Definition: nodes.h:85
@ T_ListenStmt
Definition: nodes.h:362
@ T_BitmapIndexScan
Definition: nodes.h:60
@ T_Alias
Definition: nodes.h:154
@ T_ResTarget
Definition: nodes.h:462
@ T_SortState
Definition: nodes.h:138
@ T_PrepareStmt
Definition: nodes.h:397
@ T_MinMaxAggInfo
Definition: nodes.h:291
@ T_ReassignOwnedStmt
Definition: nodes.h:409
@ T_PartitionedRelPruneInfo
Definition: nodes.h:95
@ T_ConvertRowtypeExpr
Definition: nodes.h:179
@ T_RowIdentityVarInfo
Definition: nodes.h:289
@ T_AlterTypeStmt
Definition: nodes.h:407
@ T_BaseBackupCmd
Definition: nodes.h:532
@ T_IncrementalSortPath
Definition: nodes.h:266
@ T_CreateOpClassItem
Definition: nodes.h:488
@ T_RecursiveUnion
Definition: nodes.h:52
@ T_UpdateStmt
Definition: nodes.h:334
@ T_CommonTableExpr
Definition: nodes.h:499
@ T_IncrementalSortState
Definition: nodes.h:139
@ T_SubqueryScanState
Definition: nodes.h:123
@ T_TidPath
Definition: nodes.h:247
@ T_VariableShowStmt
Definition: nodes.h:376
@ T_TruncateStmt
Definition: nodes.h:352
@ T_PlanInvalItem
Definition: nodes.h:98
@ T_JsonConstructorExpr
Definition: nodes.h:211
@ T_JsonFuncExpr
Definition: nodes.h:517
@ T_ExplainStmt
Definition: nodes.h:371
@ T_WindowClause
Definition: nodes.h:485
@ T_SetExprState
Definition: nodes.h:229
@ T_JsonObjectConstructor
Definition: nodes.h:511
@ T_LockRows
Definition: nodes.h:89
@ T_CheckPointStmt
Definition: nodes.h:386
@ T_MultiAssignRef
Definition: nodes.h:463
@ T_EventTriggerData
Definition: nodes.h:548
@ T_DropdbStmt
Definition: nodes.h:369
@ T_StatsElem
Definition: nodes.h:476
@ T_Hash
Definition: nodes.h:87
@ T_ResultRelInfo
Definition: nodes.h:39
@ T_NotifyStmt
Definition: nodes.h:361
@ T_TidScan
Definition: nodes.h:62
@ T_ProjectionInfo
Definition: nodes.h:35
@ T_CteScanState
Definition: nodes.h:127
@ T_JsonAggConstructor
Definition: nodes.h:514
@ T_ResultState
Definition: nodes.h:106
@ T_AggPath
Definition: nodes.h:269
@ T_BitmapHeapScanState
Definition: nodes.h:120
@ T_Limit
Definition: nodes.h:90
@ T_Plan
Definition: nodes.h:46
@ T_JsonScalarExpr
Definition: nodes.h:209
@ T_CreateSeqStmt
Definition: nodes.h:373
@ T_PlanRowMark
Definition: nodes.h:93
@ T_A_Indices
Definition: nodes.h:459
@ T_StatisticExtInfo
Definition: nodes.h:295
@ T_MemoizePath
Definition: nodes.h:259
@ T_JsonTableSibling
Definition: nodes.h:216
@ T_AlterForeignServerStmt
Definition: nodes.h:419
@ T_RecursiveUnionState
Definition: nodes.h:111
@ T_MaterialState
Definition: nodes.h:136
@ T_CreateEnumStmt
Definition: nodes.h:411
@ T_AppendState
Definition: nodes.h:109
@ T_GatherMergePath
Definition: nodes.h:262
@ T_Query
Definition: nodes.h:330
@ T_A_ArrayExpr
Definition: nodes.h:461
@ T_SetOpPath
Definition: nodes.h:273
@ T_UnlistenStmt
Definition: nodes.h:363
@ T_FromExpr
Definition: nodes.h:202
@ T_Memoize
Definition: nodes.h:78
@ T_TidRangePath
Definition: nodes.h:248
@ T_JsonOutput
Definition: nodes.h:526
@ T_TriggerTransition
Definition: nodes.h:502
@ T_TransactionStmt
Definition: nodes.h:364
@ T_LockRowsState
Definition: nodes.h:148
@ T_ParamPathInfo
Definition: nodes.h:241
@ T_AlterExtensionContentsStmt
Definition: nodes.h:430
@ T_AlterFdwStmt
Definition: nodes.h:417
@ T_Sort
Definition: nodes.h:79
@ T_NamedTuplestoreScanState
Definition: nodes.h:128
@ T_BitmapAndPath
Definition: nodes.h:245
@ T_RowExpr
Definition: nodes.h:185
@ T_TargetEntry
Definition: nodes.h:199
@ T_AlterStatsStmt
Definition: nodes.h:448
@ T_AlterEventTrigStmt
Definition: nodes.h:432
@ T_ProjectionPath
Definition: nodes.h:263
@ T_PlannerInfo
Definition: nodes.h:236
@ T_AlterOpFamilyStmt
Definition: nodes.h:396
@ T_DropStmt
Definition: nodes.h:351
@ T_FuncCall
Definition: nodes.h:457
@ T_CreateTransformStmt
Definition: nodes.h:438
@ T_SubPlanState
Definition: nodes.h:230
@ T_Float
Definition: nodes.h:309
@ T_AlterTableCmd
Definition: nodes.h:340
@ T_SeqScan
Definition: nodes.h:56
@ T_ArrayCoerceExpr
Definition: nodes.h:178
@ T_A_Const
Definition: nodes.h:456
@ T_TidScanState
Definition: nodes.h:121
@ T_IndexInfo
Definition: nodes.h:33
@ T_ModifyTableState
Definition: nodes.h:108
@ T_AggState
Definition: nodes.h:141
@ T_String
Definition: nodes.h:311
@ T_ProjectSetState
Definition: nodes.h:107
@ T_AlterSeqStmt
Definition: nodes.h:374
@ T_GatherState
Definition: nodes.h:144
@ T_JunkFilter
Definition: nodes.h:36
@ T_BitmapOrState
Definition: nodes.h:113
@ T_WindowAgg
Definition: nodes.h:83
@ T_FunctionScanState
Definition: nodes.h:124
@ T_CTECycleClause
Definition: nodes.h:498
@ T_MinMaxExpr
Definition: nodes.h:188
@ T_MaterialPath
Definition: nodes.h:258
@ T_A_Expr
Definition: nodes.h:453
@ T_AlterFunctionStmt
Definition: nodes.h:357
@ T_SetOpState
Definition: nodes.h:147
@ T_InferClause
Definition: nodes.h:495
@ T_TriggerData
Definition: nodes.h:547
@ T_A_Indirection
Definition: nodes.h:460
@ T_RecursiveUnionPath
Definition: nodes.h:274
@ T_ForeignPath
Definition: nodes.h:250
@ T_ForeignKeyCacheInfo
Definition: nodes.h:557
@ T_JsonKeyValue
Definition: nodes.h:524
@ T_CurrentOfExpr
Definition: nodes.h:196
@ T_JsonCommon
Definition: nodes.h:522
@ T_IndexStmt
Definition: nodes.h:355
@ T_ProjectSet
Definition: nodes.h:48
@ T_MergeActionState
Definition: nodes.h:38
@ T_AlterDatabaseRefreshCollStmt
Definition: nodes.h:389
@ T_AlterObjectSchemaStmt
Definition: nodes.h:404
@ T_CreatePolicyStmt
Definition: nodes.h:436
@ T_ReturnSetInfo
Definition: nodes.h:549
@ T_AlterPolicyStmt
Definition: nodes.h:437
@ T_MergeJoin
Definition: nodes.h:75
@ T_UniqueState
Definition: nodes.h:143
@ T_SampleScan
Definition: nodes.h:57
@ T_SortBy
Definition: nodes.h:466
@ T_MergeAppendPath
Definition: nodes.h:256
@ T_ValuesScan
Definition: nodes.h:66
@ T_AllocSetContext
Definition: nodes.h:301
@ T_Aggref
Definition: nodes.h:160
@ T_GroupingSetsPath
Definition: nodes.h:270
@ T_DropTableSpaceStmt
Definition: nodes.h:402
@ T_BooleanTest
Definition: nodes.h:192
@ T_BitmapAnd
Definition: nodes.h:53
@ T_ReadReplicationSlotCmd
Definition: nodes.h:535
@ T_ParamRef
Definition: nodes.h:455
@ T_MemoizeState
Definition: nodes.h:137
@ T_MergeAppend
Definition: nodes.h:51
@ T_CompositeTypeStmt
Definition: nodes.h:410
@ T_OidList
Definition: nodes.h:319
@ T_MergeJoinState
Definition: nodes.h:134
@ T_DropReplicationSlotCmd
Definition: nodes.h:534
@ T_JsonArrayQueryConstructor
Definition: nodes.h:513
@ T_Integer
Definition: nodes.h:308
@ T_BitmapHeapPath
Definition: nodes.h:244
@ T_CallStmt
Definition: nodes.h:447
@ T_CreateDomainStmt
Definition: nodes.h:367
@ T_AlterTSConfigurationStmt
Definition: nodes.h:415
@ T_PlanState
Definition: nodes.h:105
@ T_Agg
Definition: nodes.h:82
@ T_GrantRoleStmt
Definition: nodes.h:344
@ T_A_Star
Definition: nodes.h:458
@ T_RangeTblFunction
Definition: nodes.h:480
@ T_CreateForeignServerStmt
Definition: nodes.h:418
@ T_UpperUniquePath
Definition: nodes.h:268
@ T_RowMarkClause
Definition: nodes.h:492
@ T_InsertStmt
Definition: nodes.h:332
@ T_WithClause
Definition: nodes.h:494
@ T_MergeAction
Definition: nodes.h:296
@ T_CreateTableAsStmt
Definition: nodes.h:372
@ T_IntList
Definition: nodes.h:318
@ T_VacuumRelation
Definition: nodes.h:508
@ T_MergeWhenClause
Definition: nodes.h:500
@ T_BitmapAndState
Definition: nodes.h:112
@ T_DeclareCursorStmt
Definition: nodes.h:400
@ T_AppendRelInfo
Definition: nodes.h:288
@ T_DefineStmt
Definition: nodes.h:350
@ T_CreateOpFamilyStmt
Definition: nodes.h:395
@ T_FetchStmt
Definition: nodes.h:354
@ T_CreatePLangStmt
Definition: nodes.h:379
@ T_CteScan
Definition: nodes.h:68
@ T_DeallocateStmt
Definition: nodes.h:399
@ T_RollupData
Definition: nodes.h:293
@ T_JsonIsPredicate
Definition: nodes.h:518
@ T_JsonValueExpr
Definition: nodes.h:207
@ T_CopyStmt
Definition: nodes.h:348
@ T_WindowFuncExprState
Definition: nodes.h:228
@ T_JsonCoercion
Definition: nodes.h:213
@ T_WindowAggState
Definition: nodes.h:142
@ T_SubPlan
Definition: nodes.h:172
@ T_NestLoop
Definition: nodes.h:74
@ T_SQLValueFunction
Definition: nodes.h:189
@ T_LockRowsPath
Definition: nodes.h:275
@ T_UniquePath
Definition: nodes.h:260
@ T_NamedArgExpr
Definition: nodes.h:165
@ T_DropSubscriptionStmt
Definition: nodes.h:444
@ T_JsonArrayAgg
Definition: nodes.h:516
@ T_ReplicaIdentityStmt
Definition: nodes.h:434
@ T_PLAssignStmt
Definition: nodes.h:338
@ T_IncrementalSort
Definition: nodes.h:80
@ T_CustomScan
Definition: nodes.h:72
@ T_Const
Definition: nodes.h:158
@ T_Group
Definition: nodes.h:81
@ T_NestLoopParam
Definition: nodes.h:92
@ T_ModifyTable
Definition: nodes.h:49
@ T_AlterExtensionStmt
Definition: nodes.h:429
@ T_CreateUserMappingStmt
Definition: nodes.h:420
@ T_AlterTSDictionaryStmt
Definition: nodes.h:414
@ T_WindowAggPath
Definition: nodes.h:272
@ T_LimitPath
Definition: nodes.h:277
@ T_GatherMerge
Definition: nodes.h:86
@ T_TimeLineHistoryCmd
Definition: nodes.h:537
@ T_JsonObjectAgg
Definition: nodes.h:515
@ T_CoerceViaIO
Definition: nodes.h:177
@ T_AlterUserMappingStmt
Definition: nodes.h:421
@ T_AlterOwnerStmt
Definition: nodes.h:405
@ T_PartitionRangeDatum
Definition: nodes.h:506
@ T_SlabContext
Definition: nodes.h:302
@ T_ScanState
Definition: nodes.h:114
@ T_AlterSystemStmt
Definition: nodes.h:435
@ T_JsonTable
Definition: nodes.h:519
@ T_JsonExpr
Definition: nodes.h:212
@ T_NextValueExpr
Definition: nodes.h:197
@ T_TsmRoutine
Definition: nodes.h:556
@ T_PartitionBoundSpec
Definition: nodes.h:505
@ T_CreateAmStmt
Definition: nodes.h:439
@ T_NestLoopState
Definition: nodes.h:133
@ T_Param
Definition: nodes.h:159
@ T_TableFuncScanState
Definition: nodes.h:125
@ T_AlterDomainStmt
Definition: nodes.h:341
@ T_CoerceToDomain
Definition: nodes.h:193
@ T_JsonItemCoercions
Definition: nodes.h:214
@ T_WindowDef
Definition: nodes.h:467
@ T_GroupingFunc
Definition: nodes.h:161
@ T_ConstraintsSetStmt
Definition: nodes.h:384
@ T_BitmapIndexScanState
Definition: nodes.h:119
@ T_SelectStmt
Definition: nodes.h:336
@ T_SubqueryScan
Definition: nodes.h:64
@ T_AlterDatabaseSetStmt
Definition: nodes.h:390
@ T_IndexScanState
Definition: nodes.h:117
@ T_DistinctExpr
Definition: nodes.h:167
@ T_PartitionSpec
Definition: nodes.h:504
@ T_CollateClause
Definition: nodes.h:465
@ T_MergePath
Definition: nodes.h:253
@ T_SetOp
Definition: nodes.h:88
@ T_CreateExtensionStmt
Definition: nodes.h:428
@ T_CreateCastStmt
Definition: nodes.h:393
@ T_RangeTableSample
Definition: nodes.h:470
@ T_RefreshMatViewStmt
Definition: nodes.h:433
@ T_ColumnRef
Definition: nodes.h:454
@ T_GrantStmt
Definition: nodes.h:343
@ T_AlterSubscriptionStmt
Definition: nodes.h:443
@ T_CreatedbStmt
Definition: nodes.h:368
@ T_GroupingSetData
Definition: nodes.h:294
@ T_ProjectSetPath
Definition: nodes.h:264
@ T_FuncExpr
Definition: nodes.h:164
@ T_Var
Definition: nodes.h:157
@ T_Join
Definition: nodes.h:73
@ T_PlannedStmt
Definition: nodes.h:331
@ T_GenerationContext
Definition: nodes.h:303
@ T_GatherMergeState
Definition: nodes.h:145
@ T_RowCompareExpr
Definition: nodes.h:186
@ T_RangeSubselect
Definition: nodes.h:468
@ T_CaseTestExpr
Definition: nodes.h:183
@ T_NullTest
Definition: nodes.h:191
@ T_ForeignScanState
Definition: nodes.h:130
@ T_PlannerGlobal
Definition: nodes.h:237
@ T_StartReplicationCmd
Definition: nodes.h:536
@ T_Invalid
Definition: nodes.h:28
@ T_AlterDefaultPrivilegesStmt
Definition: nodes.h:345
@ T_VariableSetStmt
Definition: nodes.h:375
@ T_SecLabelStmt
Definition: nodes.h:425
@ T_Result
Definition: nodes.h:47
@ T_AppendPath
Definition: nodes.h:255
@ T_IndexClause
Definition: nodes.h:285
@ T_AlterTableStmt
Definition: nodes.h:339
@ T_CaseWhen
Definition: nodes.h:182
@ T_EquivalenceMember
Definition: nodes.h:280
@ T_JoinState
Definition: nodes.h:132
@ T_CreateOpClassStmt
Definition: nodes.h:394
@ T_LimitState
Definition: nodes.h:149
@ T_IndexAmRoutine
Definition: nodes.h:554
@ T_EState
Definition: nodes.h:40
@ T_PartitionPruneStepCombine
Definition: nodes.h:97
@ T_SubscriptingRef
Definition: nodes.h:163
@ T_OnConflictClause
Definition: nodes.h:496
@ T_PartitionPruneStepOp
Definition: nodes.h:96
@ T_IndexScan
Definition: nodes.h:58
@ T_IndexElem
Definition: nodes.h:475
@ T_EquivalenceClass
Definition: nodes.h:279
@ T_IntoClause
Definition: nodes.h:204
@ T_ViewStmt
Definition: nodes.h:365
@ T_AlterTableMoveAllStmt
Definition: nodes.h:424
@ T_SupportRequestIndexCondition
Definition: nodes.h:563
@ T_BitmapOrPath
Definition: nodes.h:246
@ T_ClosePortalStmt
Definition: nodes.h:346
@ T_RangeTableFuncCol
Definition: nodes.h:472
@ T_SetToDefault
Definition: nodes.h:195
@ T_CreateReplicationSlotCmd
Definition: nodes.h:533
@ T_BitmapHeapScan
Definition: nodes.h:61
@ T_AlterRoleSetStmt
Definition: nodes.h:391
@ T_CommentStmt
Definition: nodes.h:353
@ T_TypeCast
Definition: nodes.h:464
@ T_TableAmRoutine
Definition: nodes.h:555
@ T_WorkTableScan
Definition: nodes.h:70
@ T_ForeignScan
Definition: nodes.h:71
@ T_Boolean
Definition: nodes.h:310
@ T_HashJoin
Definition: nodes.h:76
@ T_NullIfExpr
Definition: nodes.h:168
@ T_TableLikeClause
Definition: nodes.h:489
@ T_Path
Definition: nodes.h:242
@ T_RoleSpec
Definition: nodes.h:501
@ T_MergeStmt
Definition: nodes.h:335
@ T_GatherPath
Definition: nodes.h:261
@ T_IndexPath
Definition: nodes.h:243
@ T_PlaceHolderVar
Definition: nodes.h:286
@ T_JsonFormat
Definition: nodes.h:205
double Selectivity
Definition: nodes.h:706
AggSplit
Definition: nodes.h:828
@ AGGSPLIT_FINAL_DESERIAL
Definition: nodes.h:834
@ AGGSPLIT_SIMPLE
Definition: nodes.h:830
@ AGGSPLIT_INITIAL_SERIAL
Definition: nodes.h:832
LimitOption
Definition: nodes.h:883
@ LIMIT_OPTION_COUNT
Definition: nodes.h:884
@ LIMIT_OPTION_WITH_TIES
Definition: nodes.h:885
@ LIMIT_OPTION_DEFAULT
Definition: nodes.h:886
void * stringToNode(const char *str)
Definition: read.c:89
bool * readBoolCols(int numCols)
Definition: readfuncs.c:3385
#define AGGSPLITOP_COMBINE
Definition: nodes.h:821
Oid * readOidCols(int numCols)
Definition: readfuncs.c:3337
void outNode(struct StringInfoData *str, const void *obj)
uintptr_t readDatum(bool typbyval)
Definition: readfuncs.c:3256
int16 * readAttrNumberCols(int numCols)
Definition: readfuncs.c:3313
JoinType
Definition: nodes.h:744
@ JOIN_SEMI
Definition: nodes.h:763
@ JOIN_FULL
Definition: nodes.h:751
@ JOIN_INNER
Definition: nodes.h:749
@ JOIN_RIGHT
Definition: nodes.h:752
@ JOIN_LEFT
Definition: nodes.h:750
@ JOIN_UNIQUE_OUTER
Definition: nodes.h:770
@ JOIN_UNIQUE_INNER
Definition: nodes.h:771
@ JOIN_ANTI
Definition: nodes.h:764
char * nodeToString(const void *obj)
Definition: outfuncs.c:4785
unsigned int Oid
Definition: postgres_ext.h:31
Definition: nodes.h:574
NodeTag type
Definition: nodes.h:575