PostgreSQL Source Code git master
parsenodes.h
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * parsenodes.h
4 * definitions for parse tree nodes
5 *
6 * Many of the node types used in parsetrees include a "location" field.
7 * This is a byte (not character) offset in the original source text, to be
8 * used for positioning an error cursor when there is an error related to
9 * the node. Access to the original source text is needed to make use of
10 * the location. At the topmost (statement) level, we also provide a
11 * statement length, likewise measured in bytes, for convenience in
12 * identifying statement boundaries in multi-statement source strings.
13 *
14 *
15 * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
16 * Portions Copyright (c) 1994, Regents of the University of California
17 *
18 * src/include/nodes/parsenodes.h
19 *
20 *-------------------------------------------------------------------------
21 */
22#ifndef PARSENODES_H
23#define PARSENODES_H
24
25#include "common/relpath.h"
26#include "nodes/bitmapset.h"
27#include "nodes/lockoptions.h"
28#include "nodes/primnodes.h"
29#include "nodes/value.h"
31
32
33/* Possible sources of a Query */
34typedef enum QuerySource
35{
36 QSRC_ORIGINAL, /* original parsetree (explicit query) */
37 QSRC_PARSER, /* added by parse analysis (now unused) */
38 QSRC_INSTEAD_RULE, /* added by unconditional INSTEAD rule */
39 QSRC_QUAL_INSTEAD_RULE, /* added by conditional INSTEAD rule */
40 QSRC_NON_INSTEAD_RULE, /* added by non-INSTEAD rule */
42
43/* Sort ordering options for ORDER BY and CREATE INDEX */
44typedef enum SortByDir
45{
49 SORTBY_USING, /* not allowed in CREATE INDEX ... */
51
52typedef enum SortByNulls
53{
58
59/* Options for [ ALL | DISTINCT ] */
60typedef enum SetQuantifier
61{
66
67/*
68 * Grantable rights are encoded so that we can OR them together in a bitmask.
69 * The present representation of AclItem limits us to 32 distinct rights,
70 * even though AclMode is defined as uint64. See utils/acl.h.
71 *
72 * Caution: changing these codes breaks stored ACLs, hence forces initdb.
73 */
74typedef uint64 AclMode; /* a bitmask of privilege bits */
75
76#define ACL_INSERT (1<<0) /* for relations */
77#define ACL_SELECT (1<<1)
78#define ACL_UPDATE (1<<2)
79#define ACL_DELETE (1<<3)
80#define ACL_TRUNCATE (1<<4)
81#define ACL_REFERENCES (1<<5)
82#define ACL_TRIGGER (1<<6)
83#define ACL_EXECUTE (1<<7) /* for functions */
84#define ACL_USAGE (1<<8) /* for various object types */
85#define ACL_CREATE (1<<9) /* for namespaces and databases */
86#define ACL_CREATE_TEMP (1<<10) /* for databases */
87#define ACL_CONNECT (1<<11) /* for databases */
88#define ACL_SET (1<<12) /* for configuration parameters */
89#define ACL_ALTER_SYSTEM (1<<13) /* for configuration parameters */
90#define ACL_MAINTAIN (1<<14) /* for relations */
91#define N_ACL_RIGHTS 15 /* 1 plus the last 1<<x */
92#define ACL_NO_RIGHTS 0
93/* Currently, SELECT ... FOR [KEY] UPDATE/SHARE requires UPDATE privileges */
94#define ACL_SELECT_FOR_UPDATE ACL_UPDATE
95
96
97/*****************************************************************************
98 * Query Tree
99 *****************************************************************************/
100
101/*
102 * Query -
103 * Parse analysis turns all statements into a Query tree
104 * for further processing by the rewriter and planner.
105 *
106 * Utility statements (i.e. non-optimizable statements) have the
107 * utilityStmt field set, and the rest of the Query is mostly dummy.
108 *
109 * Planning converts a Query tree into a Plan tree headed by a PlannedStmt
110 * node --- the Query structure is not used by the executor.
111 *
112 * All the fields ignored for the query jumbling are not semantically
113 * significant (such as alias names), as is ignored anything that can
114 * be deduced from child nodes (else we'd just be double-hashing that
115 * piece of information).
116 */
117typedef struct Query
118{
120
121 CmdType commandType; /* select|insert|update|delete|merge|utility */
122
123 /* where did I come from? */
124 QuerySource querySource pg_node_attr(query_jumble_ignore);
125
126 /*
127 * query identifier (can be set by plugins); ignored for equal, as it
128 * might not be set; also not stored. This is the result of the query
129 * jumble, hence ignored.
130 *
131 * We store this as a signed value as this is the form it's displayed to
132 * users in places such as EXPLAIN and pg_stat_statements. Primarily this
133 * is done due to lack of an SQL type to represent the full range of
134 * uint64.
135 */
136 int64 queryId pg_node_attr(equal_ignore, query_jumble_ignore, read_write_ignore, read_as(0));
137
138 /* do I set the command result tag? */
139 bool canSetTag pg_node_attr(query_jumble_ignore);
140
141 Node *utilityStmt; /* non-null if commandType == CMD_UTILITY */
142
143 /*
144 * rtable index of target relation for INSERT/UPDATE/DELETE/MERGE; 0 for
145 * SELECT. This is ignored in the query jumble as unrelated to the
146 * compilation of the query ID.
147 */
148 int resultRelation pg_node_attr(query_jumble_ignore);
149
150 /* has aggregates in tlist or havingQual */
151 bool hasAggs pg_node_attr(query_jumble_ignore);
152 /* has window functions in tlist */
153 bool hasWindowFuncs pg_node_attr(query_jumble_ignore);
154 /* has set-returning functions in tlist */
155 bool hasTargetSRFs pg_node_attr(query_jumble_ignore);
156 /* has subquery SubLink */
157 bool hasSubLinks pg_node_attr(query_jumble_ignore);
158 /* distinctClause is from DISTINCT ON */
159 bool hasDistinctOn pg_node_attr(query_jumble_ignore);
160 /* WITH RECURSIVE was specified */
161 bool hasRecursive pg_node_attr(query_jumble_ignore);
162 /* has INSERT/UPDATE/DELETE/MERGE in WITH */
163 bool hasModifyingCTE pg_node_attr(query_jumble_ignore);
164 /* FOR [KEY] UPDATE/SHARE was specified */
165 bool hasForUpdate pg_node_attr(query_jumble_ignore);
166 /* rewriter has applied some RLS policy */
167 bool hasRowSecurity pg_node_attr(query_jumble_ignore);
168 /* parser has added an RTE_GROUP RTE */
169 bool hasGroupRTE pg_node_attr(query_jumble_ignore);
170 /* is a RETURN statement */
171 bool isReturn pg_node_attr(query_jumble_ignore);
172
173 List *cteList; /* WITH list (of CommonTableExpr's) */
174
175 List *rtable; /* list of range table entries */
176
177 /*
178 * list of RTEPermissionInfo nodes for the rtable entries having
179 * perminfoindex > 0
180 */
181 List *rteperminfos pg_node_attr(query_jumble_ignore);
182 FromExpr *jointree; /* table join tree (FROM and WHERE clauses);
183 * also USING clause for MERGE */
184
185 List *mergeActionList; /* list of actions for MERGE (only) */
186
187 /*
188 * rtable index of target relation for MERGE to pull data. Initially, this
189 * is the same as resultRelation, but after query rewriting, if the target
190 * relation is a trigger-updatable view, this is the index of the expanded
191 * view subquery, whereas resultRelation is the index of the target view.
192 */
193 int mergeTargetRelation pg_node_attr(query_jumble_ignore);
194
195 /* join condition between source and target for MERGE */
197
198 List *targetList; /* target list (of TargetEntry) */
199
200 /* OVERRIDING clause */
201 OverridingKind override pg_node_attr(query_jumble_ignore);
202
203 OnConflictExpr *onConflict; /* ON CONFLICT DO [NOTHING | UPDATE] */
204
205 /*
206 * The following three fields describe the contents of the RETURNING list
207 * for INSERT/UPDATE/DELETE/MERGE. returningOldAlias and returningNewAlias
208 * are the alias names for OLD and NEW, which may be user-supplied values,
209 * the defaults "old" and "new", or NULL (if the default "old"/"new" is
210 * already in use as the alias for some other relation).
211 */
212 char *returningOldAlias pg_node_attr(query_jumble_ignore);
213 char *returningNewAlias pg_node_attr(query_jumble_ignore);
214 List *returningList; /* return-values list (of TargetEntry) */
215
216 List *groupClause; /* a list of SortGroupClause's */
217 bool groupDistinct; /* was GROUP BY DISTINCT used? */
218 bool groupByAll; /* was GROUP BY ALL used? */
219
220 List *groupingSets; /* a list of GroupingSet's if present */
221
222 Node *havingQual; /* qualifications applied to groups */
223
224 List *windowClause; /* a list of WindowClause's */
225
226 List *distinctClause; /* a list of SortGroupClause's */
227
228 List *sortClause; /* a list of SortGroupClause's */
229
230 Node *limitOffset; /* # of result tuples to skip (int8 expr) */
231 Node *limitCount; /* # of result tuples to return (int8 expr) */
232 LimitOption limitOption; /* limit type */
233
234 List *rowMarks; /* a list of RowMarkClause's */
235
236 Node *setOperations; /* set-operation tree if this is top level of
237 * a UNION/INTERSECT/EXCEPT query */
238
239 /*
240 * A list of pg_constraint OIDs that the query depends on to be
241 * semantically valid
242 */
243 List *constraintDeps pg_node_attr(query_jumble_ignore);
244
245 /* a list of WithCheckOption's (added during rewrite) */
246 List *withCheckOptions pg_node_attr(query_jumble_ignore);
247
248 /*
249 * The following two fields identify the portion of the source text string
250 * containing this query. They are typically only populated in top-level
251 * Queries, not in sub-queries. When not set, they might both be zero, or
252 * both be -1 meaning "unknown".
253 */
254 /* start location, or -1 if unknown */
256 /* length in bytes; 0 means "rest of string" */
257 ParseLoc stmt_len pg_node_attr(query_jumble_ignore);
259
260
261/****************************************************************************
262 * Supporting data structures for Parse Trees
263 *
264 * Most of these node types appear in raw parsetrees output by the grammar,
265 * and get transformed to something else by the analyzer. A few of them
266 * are used as-is in transformed querytrees.
267 ****************************************************************************/
268
269/*
270 * TypeName - specifies a type in definitions
271 *
272 * For TypeName structures generated internally, it is often easier to
273 * specify the type by OID than by name. If "names" is NIL then the
274 * actual type OID is given by typeOid, otherwise typeOid is unused.
275 * Similarly, if "typmods" is NIL then the actual typmod is expected to
276 * be prespecified in typemod, otherwise typemod is unused.
277 *
278 * If pct_type is true, then names is actually a field name and we look up
279 * the type of that field. Otherwise (the normal case), names is a type
280 * name possibly qualified with schema and database name.
281 */
282typedef struct TypeName
283{
285 List *names; /* qualified name (list of String nodes) */
286 Oid typeOid; /* type identified by OID */
287 bool setof; /* is a set? */
288 bool pct_type; /* %TYPE specified? */
289 List *typmods; /* type modifier expression(s) */
290 int32 typemod; /* prespecified type modifier */
291 List *arrayBounds; /* array bounds */
292 ParseLoc location; /* token location, or -1 if unknown */
294
295/*
296 * ColumnRef - specifies a reference to a column, or possibly a whole tuple
297 *
298 * The "fields" list must be nonempty. It can contain String nodes
299 * (representing names) and A_Star nodes (representing occurrence of a '*').
300 * Currently, A_Star must appear only as the last list element --- the grammar
301 * is responsible for enforcing this!
302 *
303 * Note: any container subscripting or selection of fields from composite columns
304 * is represented by an A_Indirection node above the ColumnRef. However,
305 * for simplicity in the normal case, initial field selection from a table
306 * name is represented within ColumnRef and not by adding A_Indirection.
307 */
308typedef struct ColumnRef
309{
311 List *fields; /* field names (String nodes) or A_Star */
312 ParseLoc location; /* token location, or -1 if unknown */
314
315/*
316 * ParamRef - specifies a $n parameter reference
317 */
318typedef struct ParamRef
319{
321 int number; /* the number of the parameter */
322 ParseLoc location; /* token location, or -1 if unknown */
324
325/*
326 * A_Expr - infix, prefix, and postfix expressions
327 */
328typedef enum A_Expr_Kind
329{
330 AEXPR_OP, /* normal operator */
331 AEXPR_OP_ANY, /* scalar op ANY (array) */
332 AEXPR_OP_ALL, /* scalar op ALL (array) */
333 AEXPR_DISTINCT, /* IS DISTINCT FROM - name must be "=" */
334 AEXPR_NOT_DISTINCT, /* IS NOT DISTINCT FROM - name must be "=" */
335 AEXPR_NULLIF, /* NULLIF - name must be "=" */
336 AEXPR_IN, /* [NOT] IN - name must be "=" or "<>" */
337 AEXPR_LIKE, /* [NOT] LIKE - name must be "~~" or "!~~" */
338 AEXPR_ILIKE, /* [NOT] ILIKE - name must be "~~*" or "!~~*" */
339 AEXPR_SIMILAR, /* [NOT] SIMILAR - name must be "~" or "!~" */
340 AEXPR_BETWEEN, /* name must be "BETWEEN" */
341 AEXPR_NOT_BETWEEN, /* name must be "NOT BETWEEN" */
342 AEXPR_BETWEEN_SYM, /* name must be "BETWEEN SYMMETRIC" */
343 AEXPR_NOT_BETWEEN_SYM, /* name must be "NOT BETWEEN SYMMETRIC" */
345
346typedef struct A_Expr
347{
348 pg_node_attr(custom_read_write)
349
351 A_Expr_Kind kind; /* see above */
352 List *name; /* possibly-qualified name of operator */
353 Node *lexpr; /* left argument, or NULL if none */
354 Node *rexpr; /* right argument, or NULL if none */
355
356 /*
357 * If rexpr is a list of some kind, we separately track its starting and
358 * ending location; it's not the same as the starting and ending location
359 * of the token itself.
360 */
363 ParseLoc location; /* token location, or -1 if unknown */
365
366/*
367 * A_Const - a literal constant
368 *
369 * Value nodes are inline for performance. You can treat 'val' as a node,
370 * as in IsA(&val, Integer). 'val' is not valid if isnull is true.
371 */
373{
380};
381
382typedef struct A_Const
383{
384 pg_node_attr(custom_copy_equal, custom_read_write, custom_query_jumble)
385
388 bool isnull; /* SQL NULL constant */
389 ParseLoc location; /* token location, or -1 if unknown */
391
392/*
393 * TypeCast - a CAST expression
394 */
395typedef struct TypeCast
396{
398 Node *arg; /* the expression being casted */
399 TypeName *typeName; /* the target type */
400 ParseLoc location; /* token location, or -1 if unknown */
402
403/*
404 * CollateClause - a COLLATE expression
405 */
406typedef struct CollateClause
407{
409 Node *arg; /* input expression */
410 List *collname; /* possibly-qualified collation name */
411 ParseLoc location; /* token location, or -1 if unknown */
413
414/*
415 * RoleSpec - a role name or one of a few special values.
416 */
417typedef enum RoleSpecType
418{
419 ROLESPEC_CSTRING, /* role name is stored as a C string */
420 ROLESPEC_CURRENT_ROLE, /* role spec is CURRENT_ROLE */
421 ROLESPEC_CURRENT_USER, /* role spec is CURRENT_USER */
422 ROLESPEC_SESSION_USER, /* role spec is SESSION_USER */
423 ROLESPEC_PUBLIC, /* role name is "public" */
425
426typedef struct RoleSpec
427{
429 RoleSpecType roletype; /* Type of this rolespec */
430 char *rolename; /* filled only for ROLESPEC_CSTRING */
431 ParseLoc location; /* token location, or -1 if unknown */
433
434/*
435 * FuncCall - a function or aggregate invocation
436 *
437 * agg_order (if not NIL) indicates we saw 'foo(... ORDER BY ...)', or if
438 * agg_within_group is true, it was 'foo(...) WITHIN GROUP (ORDER BY ...)'.
439 * agg_star indicates we saw a 'foo(*)' construct, while agg_distinct
440 * indicates we saw 'foo(DISTINCT ...)'. In any of these cases, the
441 * construct *must* be an aggregate call. Otherwise, it might be either an
442 * aggregate or some other kind of function. However, if FILTER or OVER is
443 * present it had better be an aggregate or window function.
444 *
445 * Normally, you'd initialize this via makeFuncCall() and then only change the
446 * parts of the struct its defaults don't match afterwards, as needed.
447 */
448typedef struct FuncCall
449{
451 List *funcname; /* qualified name of function */
452 List *args; /* the arguments (list of exprs) */
453 List *agg_order; /* ORDER BY (list of SortBy) */
454 Node *agg_filter; /* FILTER clause, if any */
455 struct WindowDef *over; /* OVER clause, if any */
456 int ignore_nulls; /* ignore nulls for window function */
457 bool agg_within_group; /* ORDER BY appeared in WITHIN GROUP */
458 bool agg_star; /* argument was really '*' */
459 bool agg_distinct; /* arguments were labeled DISTINCT */
460 bool func_variadic; /* last argument was labeled VARIADIC */
461 CoercionForm funcformat; /* how to display this node */
462 ParseLoc location; /* token location, or -1 if unknown */
464
465/*
466 * A_Star - '*' representing all columns of a table or compound field
467 *
468 * This can appear within ColumnRef.fields, A_Indirection.indirection, and
469 * ResTarget.indirection lists.
470 */
471typedef struct A_Star
472{
475
476/*
477 * A_Indices - array subscript or slice bounds ([idx] or [lidx:uidx])
478 *
479 * In slice case, either or both of lidx and uidx can be NULL (omitted).
480 * In non-slice case, uidx holds the single subscript and lidx is always NULL.
481 */
482typedef struct A_Indices
483{
485 bool is_slice; /* true if slice (i.e., colon present) */
486 Node *lidx; /* slice lower bound, if any */
487 Node *uidx; /* subscript, or slice upper bound if any */
489
490/*
491 * A_Indirection - select a field and/or array element from an expression
492 *
493 * The indirection list can contain A_Indices nodes (representing
494 * subscripting), String nodes (representing field selection --- the
495 * string value is the name of the field to select), and A_Star nodes
496 * (representing selection of all fields of a composite type).
497 * For example, a complex selection operation like
498 * (foo).field1[42][7].field2
499 * would be represented with a single A_Indirection node having a 4-element
500 * indirection list.
501 *
502 * Currently, A_Star must appear only as the last list element --- the grammar
503 * is responsible for enforcing this!
504 */
505typedef struct A_Indirection
506{
508 Node *arg; /* the thing being selected from */
509 List *indirection; /* subscripts and/or field names and/or * */
511
512/*
513 * A_ArrayExpr - an ARRAY[] construct
514 */
515typedef struct A_ArrayExpr
516{
518 List *elements; /* array element expressions */
519 ParseLoc list_start; /* start of the element list */
520 ParseLoc list_end; /* end of the elements list */
521 ParseLoc location; /* token location, or -1 if unknown */
523
524/*
525 * ResTarget -
526 * result target (used in target list of pre-transformed parse trees)
527 *
528 * In a SELECT target list, 'name' is the column label from an
529 * 'AS ColumnLabel' clause, or NULL if there was none, and 'val' is the
530 * value expression itself. The 'indirection' field is not used.
531 *
532 * INSERT uses ResTarget in its target-column-names list. Here, 'name' is
533 * the name of the destination column, 'indirection' stores any subscripts
534 * attached to the destination, and 'val' is not used.
535 *
536 * In an UPDATE target list, 'name' is the name of the destination column,
537 * 'indirection' stores any subscripts attached to the destination, and
538 * 'val' is the expression to assign.
539 *
540 * See A_Indirection for more info about what can appear in 'indirection'.
541 */
542typedef struct ResTarget
543{
545 char *name; /* column name or NULL */
546 List *indirection; /* subscripts, field names, and '*', or NIL */
547 Node *val; /* the value expression to compute or assign */
548 ParseLoc location; /* token location, or -1 if unknown */
550
551/*
552 * MultiAssignRef - element of a row source expression for UPDATE
553 *
554 * In an UPDATE target list, when we have SET (a,b,c) = row-valued-expression,
555 * we generate separate ResTarget items for each of a,b,c. Their "val" trees
556 * are MultiAssignRef nodes numbered 1..n, linking to a common copy of the
557 * row-valued-expression (which parse analysis will process only once, when
558 * handling the MultiAssignRef with colno=1).
559 */
560typedef struct MultiAssignRef
561{
563 Node *source; /* the row-valued expression */
564 int colno; /* column number for this target (1..n) */
565 int ncolumns; /* number of targets in the construct */
567
568/*
569 * SortBy - for ORDER BY clause
570 */
571typedef struct SortBy
572{
574 Node *node; /* expression to sort on */
575 SortByDir sortby_dir; /* ASC/DESC/USING/default */
576 SortByNulls sortby_nulls; /* NULLS FIRST/LAST */
577 List *useOp; /* name of op to use, if SORTBY_USING */
578 ParseLoc location; /* operator location, or -1 if none/unknown */
580
581/*
582 * WindowDef - raw representation of WINDOW and OVER clauses
583 *
584 * For entries in a WINDOW list, "name" is the window name being defined.
585 * For OVER clauses, we use "name" for the "OVER window" syntax, or "refname"
586 * for the "OVER (window)" syntax, which is subtly different --- the latter
587 * implies overriding the window frame clause.
588 */
589typedef struct WindowDef
590{
592 char *name; /* window's own name */
593 char *refname; /* referenced window name, if any */
594 List *partitionClause; /* PARTITION BY expression list */
595 List *orderClause; /* ORDER BY (list of SortBy) */
596 int frameOptions; /* frame_clause options, see below */
597 Node *startOffset; /* expression for starting bound, if any */
598 Node *endOffset; /* expression for ending bound, if any */
599 ParseLoc location; /* parse location, or -1 if none/unknown */
601
602/*
603 * frameOptions is an OR of these bits. The NONDEFAULT and BETWEEN bits are
604 * used so that ruleutils.c can tell which properties were specified and
605 * which were defaulted; the correct behavioral bits must be set either way.
606 * The START_foo and END_foo options must come in pairs of adjacent bits for
607 * the convenience of gram.y, even though some of them are useless/invalid.
608 */
609#define FRAMEOPTION_NONDEFAULT 0x00001 /* any specified? */
610#define FRAMEOPTION_RANGE 0x00002 /* RANGE behavior */
611#define FRAMEOPTION_ROWS 0x00004 /* ROWS behavior */
612#define FRAMEOPTION_GROUPS 0x00008 /* GROUPS behavior */
613#define FRAMEOPTION_BETWEEN 0x00010 /* BETWEEN given? */
614#define FRAMEOPTION_START_UNBOUNDED_PRECEDING 0x00020 /* start is U. P. */
615#define FRAMEOPTION_END_UNBOUNDED_PRECEDING 0x00040 /* (disallowed) */
616#define FRAMEOPTION_START_UNBOUNDED_FOLLOWING 0x00080 /* (disallowed) */
617#define FRAMEOPTION_END_UNBOUNDED_FOLLOWING 0x00100 /* end is U. F. */
618#define FRAMEOPTION_START_CURRENT_ROW 0x00200 /* start is C. R. */
619#define FRAMEOPTION_END_CURRENT_ROW 0x00400 /* end is C. R. */
620#define FRAMEOPTION_START_OFFSET_PRECEDING 0x00800 /* start is O. P. */
621#define FRAMEOPTION_END_OFFSET_PRECEDING 0x01000 /* end is O. P. */
622#define FRAMEOPTION_START_OFFSET_FOLLOWING 0x02000 /* start is O. F. */
623#define FRAMEOPTION_END_OFFSET_FOLLOWING 0x04000 /* end is O. F. */
624#define FRAMEOPTION_EXCLUDE_CURRENT_ROW 0x08000 /* omit C.R. */
625#define FRAMEOPTION_EXCLUDE_GROUP 0x10000 /* omit C.R. & peers */
626#define FRAMEOPTION_EXCLUDE_TIES 0x20000 /* omit C.R.'s peers */
627
628#define FRAMEOPTION_START_OFFSET \
629 (FRAMEOPTION_START_OFFSET_PRECEDING | FRAMEOPTION_START_OFFSET_FOLLOWING)
630#define FRAMEOPTION_END_OFFSET \
631 (FRAMEOPTION_END_OFFSET_PRECEDING | FRAMEOPTION_END_OFFSET_FOLLOWING)
632#define FRAMEOPTION_EXCLUSION \
633 (FRAMEOPTION_EXCLUDE_CURRENT_ROW | FRAMEOPTION_EXCLUDE_GROUP | \
634 FRAMEOPTION_EXCLUDE_TIES)
635
636#define FRAMEOPTION_DEFAULTS \
637 (FRAMEOPTION_RANGE | FRAMEOPTION_START_UNBOUNDED_PRECEDING | \
638 FRAMEOPTION_END_CURRENT_ROW)
639
640/*
641 * RangeSubselect - subquery appearing in a FROM clause
642 */
643typedef struct RangeSubselect
644{
646 bool lateral; /* does it have LATERAL prefix? */
647 Node *subquery; /* the untransformed sub-select clause */
648 Alias *alias; /* table alias & optional column aliases */
650
651/*
652 * RangeFunction - function call appearing in a FROM clause
653 *
654 * functions is a List because we use this to represent the construct
655 * ROWS FROM(func1(...), func2(...), ...). Each element of this list is a
656 * two-element sublist, the first element being the untransformed function
657 * call tree, and the second element being a possibly-empty list of ColumnDef
658 * nodes representing any columndef list attached to that function within the
659 * ROWS FROM() syntax.
660 *
661 * alias and coldeflist represent any alias and/or columndef list attached
662 * at the top level. (We disallow coldeflist appearing both here and
663 * per-function, but that's checked in parse analysis, not by the grammar.)
664 */
665typedef struct RangeFunction
666{
668 bool lateral; /* does it have LATERAL prefix? */
669 bool ordinality; /* does it have WITH ORDINALITY suffix? */
670 bool is_rowsfrom; /* is result of ROWS FROM() syntax? */
671 List *functions; /* per-function information, see above */
672 Alias *alias; /* table alias & optional column aliases */
673 List *coldeflist; /* list of ColumnDef nodes to describe result
674 * of function returning RECORD */
676
677/*
678 * RangeTableFunc - raw form of "table functions" such as XMLTABLE
679 *
680 * Note: JSON_TABLE is also a "table function", but it uses JsonTable node,
681 * not RangeTableFunc.
682 */
683typedef struct RangeTableFunc
684{
686 bool lateral; /* does it have LATERAL prefix? */
687 Node *docexpr; /* document expression */
688 Node *rowexpr; /* row generator expression */
689 List *namespaces; /* list of namespaces as ResTarget */
690 List *columns; /* list of RangeTableFuncCol */
691 Alias *alias; /* table alias & optional column aliases */
692 ParseLoc location; /* token location, or -1 if unknown */
694
695/*
696 * RangeTableFuncCol - one column in a RangeTableFunc->columns
697 *
698 * If for_ordinality is true (FOR ORDINALITY), then the column is an int4
699 * column and the rest of the fields are ignored.
700 */
701typedef struct RangeTableFuncCol
702{
704 char *colname; /* name of generated column */
705 TypeName *typeName; /* type of generated column */
706 bool for_ordinality; /* does it have FOR ORDINALITY? */
707 bool is_not_null; /* does it have NOT NULL? */
708 Node *colexpr; /* column filter expression */
709 Node *coldefexpr; /* column default value expression */
710 ParseLoc location; /* token location, or -1 if unknown */
712
713/*
714 * RangeTableSample - TABLESAMPLE appearing in a raw FROM clause
715 *
716 * This node, appearing only in raw parse trees, represents
717 * <relation> TABLESAMPLE <method> (<params>) REPEATABLE (<num>)
718 * Currently, the <relation> can only be a RangeVar, but we might in future
719 * allow RangeSubselect and other options. Note that the RangeTableSample
720 * is wrapped around the node representing the <relation>, rather than being
721 * a subfield of it.
722 */
723typedef struct RangeTableSample
724{
726 Node *relation; /* relation to be sampled */
727 List *method; /* sampling method name (possibly qualified) */
728 List *args; /* argument(s) for sampling method */
729 Node *repeatable; /* REPEATABLE expression, or NULL if none */
730 ParseLoc location; /* method name location, or -1 if unknown */
732
733/*
734 * ColumnDef - column definition (used in various creates)
735 *
736 * If the column has a default value, we may have the value expression
737 * in either "raw" form (an untransformed parse tree) or "cooked" form
738 * (a post-parse-analysis, executable expression tree), depending on
739 * how this ColumnDef node was created (by parsing, or by inheritance
740 * from an existing relation). We should never have both in the same node!
741 *
742 * Similarly, we may have a COLLATE specification in either raw form
743 * (represented as a CollateClause with arg==NULL) or cooked form
744 * (the collation's OID).
745 *
746 * The constraints list may contain a CONSTR_DEFAULT item in a raw
747 * parsetree produced by gram.y, but transformCreateStmt will remove
748 * the item and set raw_default instead. CONSTR_DEFAULT items
749 * should not appear in any subsequent processing.
750 */
751typedef struct ColumnDef
752{
754 char *colname; /* name of column */
755 TypeName *typeName; /* type of column */
756 char *compression; /* compression method for column */
757 int16 inhcount; /* number of times column is inherited */
758 bool is_local; /* column has local (non-inherited) def'n */
759 bool is_not_null; /* NOT NULL constraint specified? */
760 bool is_from_type; /* column definition came from table type */
761 char storage; /* attstorage setting, or 0 for default */
762 char *storage_name; /* attstorage setting name or NULL for default */
763 Node *raw_default; /* default value (untransformed parse tree) */
764 Node *cooked_default; /* default value (transformed expr tree) */
765 char identity; /* attidentity setting */
766 RangeVar *identitySequence; /* to store identity sequence name for
767 * ALTER TABLE ... ADD COLUMN */
768 char generated; /* attgenerated setting */
769 CollateClause *collClause; /* untransformed COLLATE spec, if any */
770 Oid collOid; /* collation OID (InvalidOid if not set) */
771 List *constraints; /* other constraints on column */
772 List *fdwoptions; /* per-column FDW options */
773 ParseLoc location; /* parse location, or -1 if none/unknown */
775
776/*
777 * TableLikeClause - CREATE TABLE ( ... LIKE ... ) clause
778 */
779typedef struct TableLikeClause
780{
783 bits32 options; /* OR of TableLikeOption flags */
784 Oid relationOid; /* If table has been looked up, its OID */
786
787typedef enum TableLikeOption
788{
800
801/*
802 * IndexElem - index parameters (used in CREATE INDEX, and in ON CONFLICT)
803 *
804 * For a plain index attribute, 'name' is the name of the table column to
805 * index, and 'expr' is NULL. For an index expression, 'name' is NULL and
806 * 'expr' is the expression tree.
807 */
808typedef struct IndexElem
809{
811 char *name; /* name of attribute to index, or NULL */
812 Node *expr; /* expression to index, or NULL */
813 char *indexcolname; /* name for index column; NULL = default */
814 List *collation; /* name of collation; NIL = default */
815 List *opclass; /* name of desired opclass; NIL = default */
816 List *opclassopts; /* opclass-specific options, or NIL */
817 SortByDir ordering; /* ASC/DESC/default */
818 SortByNulls nulls_ordering; /* FIRST/LAST/default */
819 ParseLoc location; /* token location, or -1 if unknown */
821
822/*
823 * DefElem - a generic "name = value" option definition
824 *
825 * In some contexts the name can be qualified. Also, certain SQL commands
826 * allow a SET/ADD/DROP action to be attached to option settings, so it's
827 * convenient to carry a field for that too. (Note: currently, it is our
828 * practice that the grammar allows namespace and action only in statements
829 * where they are relevant; C code can just ignore those fields in other
830 * statements.)
831 */
832typedef enum DefElemAction
833{
834 DEFELEM_UNSPEC, /* no action given */
839
840typedef struct DefElem
841{
843 char *defnamespace; /* NULL if unqualified name */
844 char *defname;
845 Node *arg; /* typically Integer, Float, String, or
846 * TypeName */
847 DefElemAction defaction; /* unspecified action, or SET/ADD/DROP */
848 ParseLoc location; /* token location, or -1 if unknown */
850
851/*
852 * LockingClause - raw representation of FOR [NO KEY] UPDATE/[KEY] SHARE
853 * options
854 *
855 * Note: lockedRels == NIL means "all relations in query". Otherwise it
856 * is a list of RangeVar nodes. (We use RangeVar mainly because it carries
857 * a location field --- currently, parse analysis insists on unqualified
858 * names in LockingClause.)
859 */
860typedef struct LockingClause
861{
863 List *lockedRels; /* FOR [KEY] UPDATE/SHARE relations */
865 LockWaitPolicy waitPolicy; /* NOWAIT and SKIP LOCKED */
867
868/*
869 * XMLSERIALIZE (in raw parse tree only)
870 */
871typedef struct XmlSerialize
872{
874 XmlOptionType xmloption; /* DOCUMENT or CONTENT */
877 bool indent; /* [NO] INDENT */
878 ParseLoc location; /* token location, or -1 if unknown */
880
881/* Partitioning related definitions */
882
883/*
884 * PartitionElem - parse-time representation of a single partition key
885 *
886 * expr can be either a raw expression tree or a parse-analyzed expression.
887 * We don't store these on-disk, though.
888 */
889typedef struct PartitionElem
890{
892 char *name; /* name of column to partition on, or NULL */
893 Node *expr; /* expression to partition on, or NULL */
894 List *collation; /* name of collation; NIL = default */
895 List *opclass; /* name of desired opclass; NIL = default */
896 ParseLoc location; /* token location, or -1 if unknown */
898
900{
905
906/*
907 * PartitionSpec - parse-time representation of a partition key specification
908 *
909 * This represents the key space we will be partitioning on.
910 */
911typedef struct PartitionSpec
912{
915 List *partParams; /* List of PartitionElems */
916 ParseLoc location; /* token location, or -1 if unknown */
918
919/*
920 * PartitionBoundSpec - a partition bound specification
921 *
922 * This represents the portion of the partition key space assigned to a
923 * particular partition. These are stored on disk in pg_class.relpartbound.
924 */
926{
928
929 char strategy; /* see PARTITION_STRATEGY codes above */
930 bool is_default; /* is it a default partition bound? */
931
932 /* Partitioning info for HASH strategy: */
935
936 /* Partitioning info for LIST strategy: */
937 List *listdatums; /* List of Consts (or A_Consts in raw tree) */
938
939 /* Partitioning info for RANGE strategy: */
940 List *lowerdatums; /* List of PartitionRangeDatums */
941 List *upperdatums; /* List of PartitionRangeDatums */
942
943 ParseLoc location; /* token location, or -1 if unknown */
944};
945
946/*
947 * PartitionRangeDatum - one of the values in a range partition bound
948 *
949 * This can be MINVALUE, MAXVALUE or a specific bounded value.
950 */
952{
953 PARTITION_RANGE_DATUM_MINVALUE = -1, /* less than any other value */
954 PARTITION_RANGE_DATUM_VALUE = 0, /* a specific (bounded) value */
955 PARTITION_RANGE_DATUM_MAXVALUE = 1, /* greater than any other value */
957
959{
961
963 Node *value; /* Const (or A_Const in raw tree), if kind is
964 * PARTITION_RANGE_DATUM_VALUE, else NULL */
965
966 ParseLoc location; /* token location, or -1 if unknown */
968
969/*
970 * PartitionDesc - info about a single partition for the ALTER TABLE SPLIT
971 * PARTITION command
972 */
974{
976
977 RangeVar *name; /* name of partition */
978 PartitionBoundSpec *bound; /* FOR VALUES, if attaching */
980
981/*
982 * PartitionCmd - info for ALTER TABLE/INDEX ATTACH/DETACH PARTITION and for
983 * ALTER TABLE SPLIT/MERGE PARTITION(S) commands
984 */
985typedef struct PartitionCmd
986{
988
989 /* name of partition to attach/detach/merge/split */
991
992 /* FOR VALUES, if attaching */
994
995 /*
996 * list of partitions to be split/merged, used in ALTER TABLE MERGE
997 * PARTITIONS and ALTER TABLE SPLIT PARTITIONS. For merge partitions,
998 * partlist is a list of RangeVar; For split partition, it is a list of
999 * SinglePartitionSpec.
1000 */
1002
1005
1006/****************************************************************************
1007 * Nodes for a Query tree
1008 ****************************************************************************/
1009
1010/*--------------------
1011 * RangeTblEntry -
1012 * A range table is a List of RangeTblEntry nodes.
1013 *
1014 * A range table entry may represent a plain relation, a sub-select in
1015 * FROM, or the result of a JOIN clause. (Only explicit JOIN syntax
1016 * produces an RTE, not the implicit join resulting from multiple FROM
1017 * items. This is because we only need the RTE to deal with SQL features
1018 * like outer joins and join-output-column aliasing.) Other special
1019 * RTE types also exist, as indicated by RTEKind.
1020 *
1021 * Note that we consider RTE_RELATION to cover anything that has a pg_class
1022 * entry. relkind distinguishes the sub-cases.
1023 *
1024 * alias is an Alias node representing the AS alias-clause attached to the
1025 * FROM expression, or NULL if no clause.
1026 *
1027 * eref is the table reference name and column reference names (either
1028 * real or aliases). Note that system columns (OID etc) are not included
1029 * in the column list.
1030 * eref->aliasname is required to be present, and should generally be used
1031 * to identify the RTE for error messages etc.
1032 *
1033 * In RELATION RTEs, the colnames in both alias and eref are indexed by
1034 * physical attribute number; this means there must be colname entries for
1035 * dropped columns. When building an RTE we insert empty strings ("") for
1036 * dropped columns. Note however that a stored rule may have nonempty
1037 * colnames for columns dropped since the rule was created (and for that
1038 * matter the colnames might be out of date due to column renamings).
1039 * The same comments apply to FUNCTION RTEs when a function's return type
1040 * is a named composite type.
1041 *
1042 * In JOIN RTEs, the colnames in both alias and eref are one-to-one with
1043 * joinaliasvars entries. A JOIN RTE will omit columns of its inputs when
1044 * those columns are known to be dropped at parse time. Again, however,
1045 * a stored rule might contain entries for columns dropped since the rule
1046 * was created. (This is only possible for columns not actually referenced
1047 * in the rule.) When loading a stored rule, we replace the joinaliasvars
1048 * items for any such columns with null pointers. (We can't simply delete
1049 * them from the joinaliasvars list, because that would affect the attnums
1050 * of Vars referencing the rest of the list.)
1051 *
1052 * inFromCl marks those range variables that are listed in the FROM clause.
1053 * It's false for RTEs that are added to a query behind the scenes, such
1054 * as the NEW and OLD variables for a rule, or the subqueries of a UNION.
1055 * This flag is not used during parsing (except in transformLockingClause,
1056 * q.v.); the parser now uses a separate "namespace" data structure to
1057 * control visibility. But it is needed by ruleutils.c to determine
1058 * whether RTEs should be shown in decompiled queries.
1059 *
1060 * securityQuals is a list of security barrier quals (boolean expressions),
1061 * to be tested in the listed order before returning a row from the
1062 * relation. It is always NIL in parser output. Entries are added by the
1063 * rewriter to implement security-barrier views and/or row-level security.
1064 * Note that the planner turns each boolean expression into an implicitly
1065 * AND'ed sublist, as is its usual habit with qualification expressions.
1066 *--------------------
1067 */
1068typedef enum RTEKind
1069{
1070 RTE_RELATION, /* ordinary relation reference */
1071 RTE_SUBQUERY, /* subquery in FROM */
1072 RTE_JOIN, /* join */
1073 RTE_FUNCTION, /* function in FROM */
1074 RTE_TABLEFUNC, /* TableFunc(.., column list) */
1075 RTE_VALUES, /* VALUES (<exprlist>), (<exprlist>), ... */
1076 RTE_CTE, /* common table expr (WITH list element) */
1077 RTE_NAMEDTUPLESTORE, /* tuplestore, e.g. for AFTER triggers */
1078 RTE_RESULT, /* RTE represents an empty FROM clause; such
1079 * RTEs are added by the planner, they're not
1080 * present during parsing or rewriting */
1081 RTE_GROUP, /* the grouping step */
1083
1084typedef struct RangeTblEntry
1085{
1086 pg_node_attr(custom_read_write)
1087
1088 NodeTag type;
1089
1090 /*
1091 * Fields valid in all RTEs:
1092 *
1093 * put alias + eref first to make dump more legible
1094 */
1095 /* user-written alias clause, if any */
1096 Alias *alias pg_node_attr(query_jumble_ignore);
1097
1098 /*
1099 * Expanded reference names. This uses a custom query jumble function so
1100 * that the table name is included in the computation, but not its list of
1101 * columns.
1102 */
1103 Alias *eref pg_node_attr(custom_query_jumble);
1104
1105 RTEKind rtekind; /* see above */
1106
1107 /*
1108 * Fields valid for a plain relation RTE (else zero):
1109 *
1110 * inh is true for relation references that should be expanded to include
1111 * inheritance children, if the rel has any. In the parser, this will
1112 * only be true for RTE_RELATION entries. The planner also uses this
1113 * field to mark RTE_SUBQUERY entries that contain UNION ALL queries that
1114 * it has flattened into pulled-up subqueries (creating a structure much
1115 * like the effects of inheritance).
1116 *
1117 * rellockmode is really LOCKMODE, but it's declared int to avoid having
1118 * to include lock-related headers here. It must be RowExclusiveLock if
1119 * the RTE is an INSERT/UPDATE/DELETE/MERGE target, else RowShareLock if
1120 * the RTE is a SELECT FOR UPDATE/FOR SHARE target, else AccessShareLock.
1121 *
1122 * Note: in some cases, rule expansion may result in RTEs that are marked
1123 * with RowExclusiveLock even though they are not the target of the
1124 * current query; this happens if a DO ALSO rule simply scans the original
1125 * target table. We leave such RTEs with their original lockmode so as to
1126 * avoid getting an additional, lesser lock.
1127 *
1128 * perminfoindex is 1-based index of the RTEPermissionInfo belonging to
1129 * this RTE in the containing struct's list of same; 0 if permissions need
1130 * not be checked for this RTE.
1131 *
1132 * As a special case, relid, relkind, rellockmode, and perminfoindex can
1133 * also be set (nonzero) in an RTE_SUBQUERY RTE. This occurs when we
1134 * convert an RTE_RELATION RTE naming a view into an RTE_SUBQUERY
1135 * containing the view's query. We still need to perform run-time locking
1136 * and permission checks on the view, even though it's not directly used
1137 * in the query anymore, and the most expedient way to do that is to
1138 * retain these fields from the old state of the RTE.
1139 *
1140 * As a special case, RTE_NAMEDTUPLESTORE can also set relid to indicate
1141 * that the tuple format of the tuplestore is the same as the referenced
1142 * relation. This allows plans referencing AFTER trigger transition
1143 * tables to be invalidated if the underlying table is altered.
1144 */
1145 /* OID of the relation */
1146 Oid relid pg_node_attr(query_jumble_ignore);
1147 /* inheritance requested? */
1148 bool inh;
1149 /* relation kind (see pg_class.relkind) */
1150 char relkind pg_node_attr(query_jumble_ignore);
1151 /* lock level that query requires on the rel */
1152 int rellockmode pg_node_attr(query_jumble_ignore);
1153 /* index of RTEPermissionInfo entry, or 0 */
1154 Index perminfoindex pg_node_attr(query_jumble_ignore);
1155 /* sampling info, or NULL */
1157
1158 /*
1159 * Fields valid for a subquery RTE (else NULL):
1160 */
1161 /* the sub-query */
1163 /* is from security_barrier view? */
1164 bool security_barrier pg_node_attr(query_jumble_ignore);
1165
1166 /*
1167 * Fields valid for a join RTE (else NULL/zero):
1168 *
1169 * joinaliasvars is a list of (usually) Vars corresponding to the columns
1170 * of the join result. An alias Var referencing column K of the join
1171 * result can be replaced by the K'th element of joinaliasvars --- but to
1172 * simplify the task of reverse-listing aliases correctly, we do not do
1173 * that until planning time. In detail: an element of joinaliasvars can
1174 * be a Var of one of the join's input relations, or such a Var with an
1175 * implicit coercion to the join's output column type, or a COALESCE
1176 * expression containing the two input column Vars (possibly coerced).
1177 * Elements beyond the first joinmergedcols entries are always just Vars,
1178 * and are never referenced from elsewhere in the query (that is, join
1179 * alias Vars are generated only for merged columns). We keep these
1180 * entries only because they're needed in expandRTE() and similar code.
1181 *
1182 * Vars appearing within joinaliasvars are marked with varnullingrels sets
1183 * that describe the nulling effects of this join and lower ones. This is
1184 * essential for FULL JOIN cases, because the COALESCE expression only
1185 * describes the semantics correctly if its inputs have been nulled by the
1186 * join. For other cases, it allows expandRTE() to generate a valid
1187 * representation of the join's output without consulting additional
1188 * parser state.
1189 *
1190 * Within a Query loaded from a stored rule, it is possible for non-merged
1191 * joinaliasvars items to be null pointers, which are placeholders for
1192 * (necessarily unreferenced) columns dropped since the rule was made.
1193 * Also, once planning begins, joinaliasvars items can be almost anything,
1194 * as a result of subquery-flattening substitutions.
1195 *
1196 * joinleftcols is an integer list of physical column numbers of the left
1197 * join input rel that are included in the join; likewise joinrighttcols
1198 * for the right join input rel. (Which rels those are can be determined
1199 * from the associated JoinExpr.) If the join is USING/NATURAL, then the
1200 * first joinmergedcols entries in each list identify the merged columns.
1201 * The merged columns come first in the join output, then remaining
1202 * columns of the left input, then remaining columns of the right.
1203 *
1204 * Note that input columns could have been dropped after creation of a
1205 * stored rule, if they are not referenced in the query (in particular,
1206 * merged columns could not be dropped); this is not accounted for in
1207 * joinleftcols/joinrighttcols.
1208 */
1210 /* number of merged (JOIN USING) columns */
1211 int joinmergedcols pg_node_attr(query_jumble_ignore);
1212 /* list of alias-var expansions */
1213 List *joinaliasvars pg_node_attr(query_jumble_ignore);
1214 /* left-side input column numbers */
1215 List *joinleftcols pg_node_attr(query_jumble_ignore);
1216 /* right-side input column numbers */
1217 List *joinrightcols pg_node_attr(query_jumble_ignore);
1218
1219 /*
1220 * join_using_alias is an alias clause attached directly to JOIN/USING. It
1221 * is different from the alias field (above) in that it does not hide the
1222 * range variables of the tables being joined.
1223 */
1224 Alias *join_using_alias pg_node_attr(query_jumble_ignore);
1225
1226 /*
1227 * Fields valid for a function RTE (else NIL/zero):
1228 *
1229 * When funcordinality is true, the eref->colnames list includes an alias
1230 * for the ordinality column. The ordinality column is otherwise
1231 * implicit, and must be accounted for "by hand" in places such as
1232 * expandRTE().
1233 */
1234 /* list of RangeTblFunction nodes */
1236 /* is this called WITH ORDINALITY? */
1238
1239 /*
1240 * Fields valid for a TableFunc RTE (else NULL):
1241 */
1243
1244 /*
1245 * Fields valid for a values RTE (else NIL):
1246 */
1247 /* list of expression lists */
1249
1250 /*
1251 * Fields valid for a CTE RTE (else NULL/zero):
1252 */
1253 /* name of the WITH list item */
1254 char *ctename;
1255 /* number of query levels up */
1257 /* is this a recursive self-reference? */
1258 bool self_reference pg_node_attr(query_jumble_ignore);
1259
1260 /*
1261 * Fields valid for CTE, VALUES, ENR, and TableFunc RTEs (else NIL):
1262 *
1263 * We need these for CTE RTEs so that the types of self-referential
1264 * columns are well-defined. For VALUES RTEs, storing these explicitly
1265 * saves having to re-determine the info by scanning the values_lists. For
1266 * ENRs, we store the types explicitly here (we could get the information
1267 * from the catalogs if 'relid' was supplied, but we'd still need these
1268 * for TupleDesc-based ENRs, so we might as well always store the type
1269 * info here). For TableFuncs, these fields are redundant with data in
1270 * the TableFunc node, but keeping them here allows some code sharing with
1271 * the other cases.
1272 *
1273 * For ENRs only, we have to consider the possibility of dropped columns.
1274 * A dropped column is included in these lists, but it will have zeroes in
1275 * all three lists (as well as an empty-string entry in eref). Testing
1276 * for zero coltype is the standard way to detect a dropped column.
1277 */
1278 /* OID list of column type OIDs */
1279 List *coltypes pg_node_attr(query_jumble_ignore);
1280 /* integer list of column typmods */
1281 List *coltypmods pg_node_attr(query_jumble_ignore);
1282 /* OID list of column collation OIDs */
1283 List *colcollations pg_node_attr(query_jumble_ignore);
1284
1285 /*
1286 * Fields valid for ENR RTEs (else NULL/zero):
1287 */
1288 /* name of ephemeral named relation */
1289 char *enrname;
1290 /* estimated or actual from caller */
1291 Cardinality enrtuples pg_node_attr(query_jumble_ignore);
1292
1293 /*
1294 * Fields valid for a GROUP RTE (else NIL):
1295 */
1296 /* list of grouping expressions */
1297 List *groupexprs pg_node_attr(query_jumble_ignore);
1298
1299 /*
1300 * Fields valid in all RTEs:
1301 */
1302 /* was LATERAL specified? */
1303 bool lateral pg_node_attr(query_jumble_ignore);
1304 /* present in FROM clause? */
1305 bool inFromCl pg_node_attr(query_jumble_ignore);
1306 /* security barrier quals to apply, if any */
1307 List *securityQuals pg_node_attr(query_jumble_ignore);
1309
1310/*
1311 * RTEPermissionInfo
1312 * Per-relation information for permission checking. Added to the Query
1313 * node by the parser when adding the corresponding RTE to the query
1314 * range table and subsequently editorialized on by the rewriter if
1315 * needed after rule expansion.
1316 *
1317 * Only the relations directly mentioned in the query are checked for
1318 * access permissions by the core executor, so only their RTEPermissionInfos
1319 * are present in the Query. However, extensions may want to check inheritance
1320 * children too, depending on the value of rte->inh, so it's copied in 'inh'
1321 * for their perusal.
1322 *
1323 * requiredPerms and checkAsUser specify run-time access permissions checks
1324 * to be performed at query startup. The user must have *all* of the
1325 * permissions that are OR'd together in requiredPerms (never 0!). If
1326 * checkAsUser is not zero, then do the permissions checks using the access
1327 * rights of that user, not the current effective user ID. (This allows rules
1328 * to act as setuid gateways.)
1329 *
1330 * For SELECT/INSERT/UPDATE permissions, if the user doesn't have table-wide
1331 * permissions then it is sufficient to have the permissions on all columns
1332 * identified in selectedCols (for SELECT) and/or insertedCols and/or
1333 * updatedCols (INSERT with ON CONFLICT DO UPDATE may have all 3).
1334 * selectedCols, insertedCols and updatedCols are bitmapsets, which cannot have
1335 * negative integer members, so we subtract FirstLowInvalidHeapAttributeNumber
1336 * from column numbers before storing them in these fields. A whole-row Var
1337 * reference is represented by setting the bit for InvalidAttrNumber.
1338 *
1339 * updatedCols is also used in some other places, for example, to determine
1340 * which triggers to fire and in FDWs to know which changed columns they need
1341 * to ship off.
1342 */
1343typedef struct RTEPermissionInfo
1344{
1346
1347 Oid relid; /* relation OID */
1348 bool inh; /* separately check inheritance children? */
1349 AclMode requiredPerms; /* bitmask of required access permissions */
1350 Oid checkAsUser; /* if valid, check access as this role */
1351 Bitmapset *selectedCols; /* columns needing SELECT permission */
1352 Bitmapset *insertedCols; /* columns needing INSERT permission */
1353 Bitmapset *updatedCols; /* columns needing UPDATE permission */
1355
1356/*
1357 * RangeTblFunction -
1358 * RangeTblEntry subsidiary data for one function in a FUNCTION RTE.
1359 *
1360 * If the function had a column definition list (required for an
1361 * otherwise-unspecified RECORD result), funccolnames lists the names given
1362 * in the definition list, funccoltypes lists their declared column types,
1363 * funccoltypmods lists their typmods, funccolcollations their collations.
1364 * Otherwise, those fields are NIL.
1365 *
1366 * Notice we don't attempt to store info about the results of functions
1367 * returning named composite types, because those can change from time to
1368 * time. We do however remember how many columns we thought the type had
1369 * (including dropped columns!), so that we can successfully ignore any
1370 * columns added after the query was parsed.
1371 *
1372 * The query jumbling only needs to track the function expression.
1373 */
1374typedef struct RangeTblFunction
1375{
1377
1378 Node *funcexpr; /* expression tree for func call */
1379 /* number of columns it contributes to RTE */
1380 int funccolcount pg_node_attr(query_jumble_ignore);
1381 /* These fields record the contents of a column definition list, if any: */
1382 /* column names (list of String) */
1383 List *funccolnames pg_node_attr(query_jumble_ignore);
1384 /* OID list of column type OIDs */
1385 List *funccoltypes pg_node_attr(query_jumble_ignore);
1386 /* integer list of column typmods */
1387 List *funccoltypmods pg_node_attr(query_jumble_ignore);
1388 /* OID list of column collation OIDs */
1389 List *funccolcollations pg_node_attr(query_jumble_ignore);
1390
1391 /* This is set during planning for use by the executor: */
1392 /* PARAM_EXEC Param IDs affecting this func */
1393 Bitmapset *funcparams pg_node_attr(query_jumble_ignore);
1395
1396/*
1397 * TableSampleClause - TABLESAMPLE appearing in a transformed FROM clause
1398 *
1399 * Unlike RangeTableSample, this is a subnode of the relevant RangeTblEntry.
1400 */
1401typedef struct TableSampleClause
1402{
1404 Oid tsmhandler; /* OID of the tablesample handler function */
1405 List *args; /* tablesample argument expression(s) */
1406 Expr *repeatable; /* REPEATABLE expression, or NULL if none */
1408
1409/*
1410 * WithCheckOption -
1411 * representation of WITH CHECK OPTION checks to be applied to new tuples
1412 * when inserting/updating an auto-updatable view, or RLS WITH CHECK
1413 * policies to be applied when inserting/updating a relation with RLS.
1414 */
1415typedef enum WCOKind
1416{
1417 WCO_VIEW_CHECK, /* WCO on an auto-updatable view */
1418 WCO_RLS_INSERT_CHECK, /* RLS INSERT WITH CHECK policy */
1419 WCO_RLS_UPDATE_CHECK, /* RLS UPDATE WITH CHECK policy */
1420 WCO_RLS_CONFLICT_CHECK, /* RLS ON CONFLICT DO UPDATE USING policy */
1421 WCO_RLS_MERGE_UPDATE_CHECK, /* RLS MERGE UPDATE USING policy */
1422 WCO_RLS_MERGE_DELETE_CHECK, /* RLS MERGE DELETE USING policy */
1424
1425typedef struct WithCheckOption
1426{
1428 WCOKind kind; /* kind of WCO */
1429 char *relname; /* name of relation that specified the WCO */
1430 char *polname; /* name of RLS policy being checked */
1431 Node *qual; /* constraint qual to check */
1432 bool cascaded; /* true for a cascaded WCO on a view */
1434
1435/*
1436 * SortGroupClause -
1437 * representation of ORDER BY, GROUP BY, PARTITION BY,
1438 * DISTINCT, DISTINCT ON items
1439 *
1440 * You might think that ORDER BY is only interested in defining ordering,
1441 * and GROUP/DISTINCT are only interested in defining equality. However,
1442 * one way to implement grouping is to sort and then apply a "uniq"-like
1443 * filter. So it's also interesting to keep track of possible sort operators
1444 * for GROUP/DISTINCT, and in particular to try to sort for the grouping
1445 * in a way that will also yield a requested ORDER BY ordering. So we need
1446 * to be able to compare ORDER BY and GROUP/DISTINCT lists, which motivates
1447 * the decision to give them the same representation.
1448 *
1449 * tleSortGroupRef must match ressortgroupref of exactly one entry of the
1450 * query's targetlist; that is the expression to be sorted or grouped by.
1451 * eqop is the OID of the equality operator.
1452 * sortop is the OID of the ordering operator (a "<" or ">" operator),
1453 * or InvalidOid if not available.
1454 * nulls_first means about what you'd expect. If sortop is InvalidOid
1455 * then nulls_first is meaningless and should be set to false.
1456 * hashable is true if eqop is hashable (note this condition also depends
1457 * on the datatype of the input expression).
1458 *
1459 * In an ORDER BY item, all fields must be valid. (The eqop isn't essential
1460 * here, but it's cheap to get it along with the sortop, and requiring it
1461 * to be valid eases comparisons to grouping items.) Note that this isn't
1462 * actually enough information to determine an ordering: if the sortop is
1463 * collation-sensitive, a collation OID is needed too. We don't store the
1464 * collation in SortGroupClause because it's not available at the time the
1465 * parser builds the SortGroupClause; instead, consult the exposed collation
1466 * of the referenced targetlist expression to find out what it is.
1467 *
1468 * In a grouping item, eqop must be valid. If the eqop is a btree equality
1469 * operator, then sortop should be set to a compatible ordering operator.
1470 * We prefer to set eqop/sortop/nulls_first to match any ORDER BY item that
1471 * the query presents for the same tlist item. If there is none, we just
1472 * use the default ordering op for the datatype.
1473 *
1474 * If the tlist item's type has a hash opclass but no btree opclass, then
1475 * we will set eqop to the hash equality operator, sortop to InvalidOid,
1476 * and nulls_first to false. A grouping item of this kind can only be
1477 * implemented by hashing, and of course it'll never match an ORDER BY item.
1478 *
1479 * The hashable flag is provided since we generally have the requisite
1480 * information readily available when the SortGroupClause is constructed,
1481 * and it's relatively expensive to get it again later. Note there is no
1482 * need for a "sortable" flag since OidIsValid(sortop) serves the purpose.
1483 *
1484 * A query might have both ORDER BY and DISTINCT (or DISTINCT ON) clauses.
1485 * In SELECT DISTINCT, the distinctClause list is as long or longer than the
1486 * sortClause list, while in SELECT DISTINCT ON it's typically shorter.
1487 * The two lists must match up to the end of the shorter one --- the parser
1488 * rearranges the distinctClause if necessary to make this true. (This
1489 * restriction ensures that only one sort step is needed to both satisfy the
1490 * ORDER BY and set up for the Unique step. This is semantically necessary
1491 * for DISTINCT ON, and presents no real drawback for DISTINCT.)
1492 */
1493typedef struct SortGroupClause
1494{
1496 Index tleSortGroupRef; /* reference into targetlist */
1497 Oid eqop; /* the equality operator ('=' op) */
1498 Oid sortop; /* the ordering operator ('<' op), or 0 */
1499 bool reverse_sort; /* is sortop a "greater than" operator? */
1500 bool nulls_first; /* do NULLs come before normal values? */
1501 /* can eqop be implemented by hashing? */
1502 bool hashable pg_node_attr(query_jumble_ignore);
1504
1505/*
1506 * GroupingSet -
1507 * representation of CUBE, ROLLUP and GROUPING SETS clauses
1508 *
1509 * In a Query with grouping sets, the groupClause contains a flat list of
1510 * SortGroupClause nodes for each distinct expression used. The actual
1511 * structure of the GROUP BY clause is given by the groupingSets tree.
1512 *
1513 * In the raw parser output, GroupingSet nodes (of all types except SIMPLE
1514 * which is not used) are potentially mixed in with the expressions in the
1515 * groupClause of the SelectStmt. (An expression can't contain a GroupingSet,
1516 * but a list may mix GroupingSet and expression nodes.) At this stage, the
1517 * content of each node is a list of expressions, some of which may be RowExprs
1518 * which represent sublists rather than actual row constructors, and nested
1519 * GroupingSet nodes where legal in the grammar. The structure directly
1520 * reflects the query syntax.
1521 *
1522 * In parse analysis, the transformed expressions are used to build the tlist
1523 * and groupClause list (of SortGroupClause nodes), and the groupingSets tree
1524 * is eventually reduced to a fixed format:
1525 *
1526 * EMPTY nodes represent (), and obviously have no content
1527 *
1528 * SIMPLE nodes represent a list of one or more expressions to be treated as an
1529 * atom by the enclosing structure; the content is an integer list of
1530 * ressortgroupref values (see SortGroupClause)
1531 *
1532 * CUBE and ROLLUP nodes contain a list of one or more SIMPLE nodes.
1533 *
1534 * SETS nodes contain a list of EMPTY, SIMPLE, CUBE or ROLLUP nodes, but after
1535 * parse analysis they cannot contain more SETS nodes; enough of the syntactic
1536 * transforms of the spec have been applied that we no longer have arbitrarily
1537 * deep nesting (though we still preserve the use of cube/rollup).
1538 *
1539 * Note that if the groupingSets tree contains no SIMPLE nodes (only EMPTY
1540 * nodes at the leaves), then the groupClause will be empty, but this is still
1541 * an aggregation query (similar to using aggs or HAVING without GROUP BY).
1542 *
1543 * As an example, the following clause:
1544 *
1545 * GROUP BY GROUPING SETS ((a,b), CUBE(c,(d,e)))
1546 *
1547 * looks like this after raw parsing:
1548 *
1549 * SETS( RowExpr(a,b) , CUBE( c, RowExpr(d,e) ) )
1550 *
1551 * and parse analysis converts it to:
1552 *
1553 * SETS( SIMPLE(1,2), CUBE( SIMPLE(3), SIMPLE(4,5) ) )
1554 */
1556{
1563
1564typedef struct GroupingSet
1565{
1567 GroupingSetKind kind pg_node_attr(query_jumble_ignore);
1571
1572/*
1573 * WindowClause -
1574 * transformed representation of WINDOW and OVER clauses
1575 *
1576 * A parsed Query's windowClause list contains these structs. "name" is set
1577 * if the clause originally came from WINDOW, and is NULL if it originally
1578 * was an OVER clause (but note that we collapse out duplicate OVERs).
1579 * partitionClause and orderClause are lists of SortGroupClause structs.
1580 * partitionClause is sanitized by the query planner to remove any columns or
1581 * expressions belonging to redundant PathKeys.
1582 * If we have RANGE with offset PRECEDING/FOLLOWING, the semantics of that are
1583 * specified by startInRangeFunc/inRangeColl/inRangeAsc/inRangeNullsFirst
1584 * for the start offset, or endInRangeFunc/inRange* for the end offset.
1585 * winref is an ID number referenced by WindowFunc nodes; it must be unique
1586 * among the members of a Query's windowClause list.
1587 * When refname isn't null, the partitionClause is always copied from there;
1588 * the orderClause might or might not be copied (see copiedOrder); the framing
1589 * options are never copied, per spec.
1590 *
1591 * The information relevant for the query jumbling is the partition clause
1592 * type and its bounds.
1593 */
1594typedef struct WindowClause
1595{
1597 /* window name (NULL in an OVER clause) */
1598 char *name pg_node_attr(query_jumble_ignore);
1599 /* referenced window name, if any */
1600 char *refname pg_node_attr(query_jumble_ignore);
1601 List *partitionClause; /* PARTITION BY list */
1602 /* ORDER BY list */
1604 int frameOptions; /* frame_clause options, see WindowDef */
1605 Node *startOffset; /* expression for starting bound, if any */
1606 Node *endOffset; /* expression for ending bound, if any */
1607 /* in_range function for startOffset */
1608 Oid startInRangeFunc pg_node_attr(query_jumble_ignore);
1609 /* in_range function for endOffset */
1610 Oid endInRangeFunc pg_node_attr(query_jumble_ignore);
1611 /* collation for in_range tests */
1612 Oid inRangeColl pg_node_attr(query_jumble_ignore);
1613 /* use ASC sort order for in_range tests? */
1614 bool inRangeAsc pg_node_attr(query_jumble_ignore);
1615 /* nulls sort first for in_range tests? */
1616 bool inRangeNullsFirst pg_node_attr(query_jumble_ignore);
1617 Index winref; /* ID referenced by window functions */
1618 /* did we copy orderClause from refname? */
1619 bool copiedOrder pg_node_attr(query_jumble_ignore);
1621
1622/*
1623 * RowMarkClause -
1624 * parser output representation of FOR [KEY] UPDATE/SHARE clauses
1625 *
1626 * Query.rowMarks contains a separate RowMarkClause node for each relation
1627 * identified as a FOR [KEY] UPDATE/SHARE target. If one of these clauses
1628 * is applied to a subquery, we generate RowMarkClauses for all normal and
1629 * subquery rels in the subquery, but they are marked pushedDown = true to
1630 * distinguish them from clauses that were explicitly written at this query
1631 * level. Also, Query.hasForUpdate tells whether there were explicit FOR
1632 * UPDATE/SHARE/KEY SHARE clauses in the current query level.
1633 */
1634typedef struct RowMarkClause
1635{
1637 Index rti; /* range table index of target relation */
1639 LockWaitPolicy waitPolicy; /* NOWAIT and SKIP LOCKED */
1640 bool pushedDown; /* pushed down from higher query level? */
1642
1643/*
1644 * WithClause -
1645 * representation of WITH clause
1646 *
1647 * Note: WithClause does not propagate into the Query representation;
1648 * but CommonTableExpr does.
1649 */
1650typedef struct WithClause
1651{
1653 List *ctes; /* list of CommonTableExprs */
1654 bool recursive; /* true = WITH RECURSIVE */
1655 ParseLoc location; /* token location, or -1 if unknown */
1657
1658/*
1659 * InferClause -
1660 * ON CONFLICT unique index inference clause
1661 *
1662 * Note: InferClause does not propagate into the Query representation.
1663 */
1664typedef struct InferClause
1665{
1667 List *indexElems; /* IndexElems to infer unique index */
1668 Node *whereClause; /* qualification (partial-index predicate) */
1669 char *conname; /* Constraint name, or NULL if unnamed */
1670 ParseLoc location; /* token location, or -1 if unknown */
1672
1673/*
1674 * OnConflictClause -
1675 * representation of ON CONFLICT clause
1676 *
1677 * Note: OnConflictClause does not propagate into the Query representation.
1678 */
1679typedef struct OnConflictClause
1680{
1682 OnConflictAction action; /* DO NOTHING or UPDATE? */
1683 InferClause *infer; /* Optional index inference clause */
1684 List *targetList; /* the target list (of ResTarget) */
1685 Node *whereClause; /* qualifications */
1686 ParseLoc location; /* token location, or -1 if unknown */
1688
1689/*
1690 * CommonTableExpr -
1691 * representation of WITH list element
1692 */
1693
1694typedef enum CTEMaterialize
1695{
1696 CTEMaterializeDefault, /* no option specified */
1697 CTEMaterializeAlways, /* MATERIALIZED */
1698 CTEMaterializeNever, /* NOT MATERIALIZED */
1700
1701typedef struct CTESearchClause
1702{
1709
1710typedef struct CTECycleClause
1711{
1719 /* These fields are set during parse analysis: */
1720 Oid cycle_mark_type; /* common type of _value and _default */
1723 Oid cycle_mark_neop; /* <> operator for type */
1725
1726typedef struct CommonTableExpr
1727{
1729
1730 /*
1731 * Query name (never qualified). The string name is included in the query
1732 * jumbling because RTE_CTE RTEs need it.
1733 */
1734 char *ctename;
1735 /* optional list of column names */
1736 List *aliascolnames pg_node_attr(query_jumble_ignore);
1737 CTEMaterialize ctematerialized; /* is this an optimization fence? */
1738 /* SelectStmt/InsertStmt/etc before parse analysis, Query afterwards: */
1739 Node *ctequery; /* the CTE's subquery */
1740 CTESearchClause *search_clause pg_node_attr(query_jumble_ignore);
1741 CTECycleClause *cycle_clause pg_node_attr(query_jumble_ignore);
1742 ParseLoc location; /* token location, or -1 if unknown */
1743 /* These fields are set during parse analysis: */
1744 /* is this CTE actually recursive? */
1745 bool cterecursive pg_node_attr(query_jumble_ignore);
1746
1747 /*
1748 * Number of RTEs referencing this CTE (excluding internal
1749 * self-references), irrelevant for query jumbling.
1750 */
1751 int cterefcount pg_node_attr(query_jumble_ignore);
1752 /* list of output column names */
1753 List *ctecolnames pg_node_attr(query_jumble_ignore);
1754 /* OID list of output column type OIDs */
1755 List *ctecoltypes pg_node_attr(query_jumble_ignore);
1756 /* integer list of output column typmods */
1757 List *ctecoltypmods pg_node_attr(query_jumble_ignore);
1758 /* OID list of column collation OIDs */
1759 List *ctecolcollations pg_node_attr(query_jumble_ignore);
1761
1762/* Convenience macro to get the output tlist of a CTE's query */
1763#define GetCTETargetList(cte) \
1764 (AssertMacro(IsA((cte)->ctequery, Query)), \
1765 ((Query *) (cte)->ctequery)->commandType == CMD_SELECT ? \
1766 ((Query *) (cte)->ctequery)->targetList : \
1767 ((Query *) (cte)->ctequery)->returningList)
1768
1769/*
1770 * MergeWhenClause -
1771 * raw parser representation of a WHEN clause in a MERGE statement
1772 *
1773 * This is transformed into MergeAction by parse analysis
1774 */
1775typedef struct MergeWhenClause
1776{
1778 MergeMatchKind matchKind; /* MATCHED/NOT MATCHED BY SOURCE/TARGET */
1779 CmdType commandType; /* INSERT/UPDATE/DELETE/DO NOTHING */
1780 OverridingKind override; /* OVERRIDING clause */
1781 Node *condition; /* WHEN conditions (raw parser) */
1782 List *targetList; /* INSERT/UPDATE targetlist */
1783 /* the following members are only used in INSERT actions */
1784 List *values; /* VALUES to INSERT, or NULL */
1786
1787/*
1788 * ReturningOptionKind -
1789 * Possible kinds of option in RETURNING WITH(...) list
1790 *
1791 * Currently, this is used only for specifying OLD/NEW aliases.
1792 */
1794{
1795 RETURNING_OPTION_OLD, /* specify alias for OLD in RETURNING */
1796 RETURNING_OPTION_NEW, /* specify alias for NEW in RETURNING */
1798
1799/*
1800 * ReturningOption -
1801 * An individual option in the RETURNING WITH(...) list
1802 */
1803typedef struct ReturningOption
1804{
1806 ReturningOptionKind option; /* specified option */
1807 char *value; /* option's value */
1808 ParseLoc location; /* token location, or -1 if unknown */
1810
1811/*
1812 * ReturningClause -
1813 * List of RETURNING expressions, together with any WITH(...) options
1814 */
1815typedef struct ReturningClause
1816{
1818 List *options; /* list of ReturningOption elements */
1819 List *exprs; /* list of expressions to return */
1821
1822/*
1823 * TriggerTransition -
1824 * representation of transition row or table naming clause
1825 *
1826 * Only transition tables are initially supported in the syntax, and only for
1827 * AFTER triggers, but other permutations are accepted by the parser so we can
1828 * give a meaningful message from C code.
1829 */
1830typedef struct TriggerTransition
1831{
1833 char *name;
1834 bool isNew;
1837
1838/* Nodes for SQL/JSON support */
1839
1840/*
1841 * JsonOutput -
1842 * representation of JSON output clause (RETURNING type [FORMAT format])
1843 */
1844typedef struct JsonOutput
1845{
1847 TypeName *typeName; /* RETURNING type name, if specified */
1848 JsonReturning *returning; /* RETURNING FORMAT clause and type Oids */
1850
1851/*
1852 * JsonArgument -
1853 * representation of argument from JSON PASSING clause
1854 */
1855typedef struct JsonArgument
1856{
1858 JsonValueExpr *val; /* argument value expression */
1859 char *name; /* argument name */
1861
1862/*
1863 * JsonQuotes -
1864 * representation of [KEEP|OMIT] QUOTES clause for JSON_QUERY()
1865 */
1866typedef enum JsonQuotes
1867{
1868 JS_QUOTES_UNSPEC, /* unspecified */
1869 JS_QUOTES_KEEP, /* KEEP QUOTES */
1870 JS_QUOTES_OMIT, /* OMIT QUOTES */
1872
1873/*
1874 * JsonFuncExpr -
1875 * untransformed representation of function expressions for
1876 * SQL/JSON query functions
1877 */
1878typedef struct JsonFuncExpr
1879{
1881 JsonExprOp op; /* expression type */
1882 char *column_name; /* JSON_TABLE() column name or NULL if this is
1883 * not for a JSON_TABLE() */
1884 JsonValueExpr *context_item; /* context item expression */
1885 Node *pathspec; /* JSON path specification expression */
1886 List *passing; /* list of PASSING clause arguments, if any */
1887 JsonOutput *output; /* output clause, if specified */
1888 JsonBehavior *on_empty; /* ON EMPTY behavior */
1889 JsonBehavior *on_error; /* ON ERROR behavior */
1890 JsonWrapper wrapper; /* array wrapper behavior (JSON_QUERY only) */
1891 JsonQuotes quotes; /* omit or keep quotes? (JSON_QUERY only) */
1892 ParseLoc location; /* token location, or -1 if unknown */
1894
1895/*
1896 * JsonTablePathSpec
1897 * untransformed specification of JSON path expression with an optional
1898 * name
1899 */
1900typedef struct JsonTablePathSpec
1901{
1903
1905 char *name;
1907 ParseLoc location; /* location of 'string' */
1909
1910/*
1911 * JsonTable -
1912 * untransformed representation of JSON_TABLE
1913 */
1914typedef struct JsonTable
1915{
1917 JsonValueExpr *context_item; /* context item expression */
1918 JsonTablePathSpec *pathspec; /* JSON path specification */
1919 List *passing; /* list of PASSING clause arguments, if any */
1920 List *columns; /* list of JsonTableColumn */
1921 JsonBehavior *on_error; /* ON ERROR behavior */
1922 Alias *alias; /* table alias in FROM clause */
1923 bool lateral; /* does it have LATERAL prefix? */
1924 ParseLoc location; /* token location, or -1 if unknown */
1926
1927/*
1928 * JsonTableColumnType -
1929 * enumeration of JSON_TABLE column types
1930 */
1932{
1939
1940/*
1941 * JsonTableColumn -
1942 * untransformed representation of JSON_TABLE column
1943 */
1944typedef struct JsonTableColumn
1945{
1947 JsonTableColumnType coltype; /* column type */
1948 char *name; /* column name */
1949 TypeName *typeName; /* column type name */
1950 JsonTablePathSpec *pathspec; /* JSON path specification */
1951 JsonFormat *format; /* JSON format clause, if specified */
1952 JsonWrapper wrapper; /* WRAPPER behavior for formatted columns */
1953 JsonQuotes quotes; /* omit or keep quotes on scalar strings? */
1954 List *columns; /* nested columns */
1955 JsonBehavior *on_empty; /* ON EMPTY behavior */
1956 JsonBehavior *on_error; /* ON ERROR behavior */
1957 ParseLoc location; /* token location, or -1 if unknown */
1959
1960/*
1961 * JsonKeyValue -
1962 * untransformed representation of JSON object key-value pair for
1963 * JSON_OBJECT() and JSON_OBJECTAGG()
1964 */
1965typedef struct JsonKeyValue
1966{
1968 Expr *key; /* key expression */
1969 JsonValueExpr *value; /* JSON value expression */
1971
1972/*
1973 * JsonParseExpr -
1974 * untransformed representation of JSON()
1975 */
1976typedef struct JsonParseExpr
1977{
1979 JsonValueExpr *expr; /* string expression */
1980 JsonOutput *output; /* RETURNING clause, if specified */
1981 bool unique_keys; /* WITH UNIQUE KEYS? */
1982 ParseLoc location; /* token location, or -1 if unknown */
1984
1985/*
1986 * JsonScalarExpr -
1987 * untransformed representation of JSON_SCALAR()
1988 */
1989typedef struct JsonScalarExpr
1990{
1992 Expr *expr; /* scalar expression */
1993 JsonOutput *output; /* RETURNING clause, if specified */
1994 ParseLoc location; /* token location, or -1 if unknown */
1996
1997/*
1998 * JsonSerializeExpr -
1999 * untransformed representation of JSON_SERIALIZE() function
2000 */
2001typedef struct JsonSerializeExpr
2002{
2004 JsonValueExpr *expr; /* json value expression */
2005 JsonOutput *output; /* RETURNING clause, if specified */
2006 ParseLoc location; /* token location, or -1 if unknown */
2008
2009/*
2010 * JsonObjectConstructor -
2011 * untransformed representation of JSON_OBJECT() constructor
2012 */
2014{
2016 List *exprs; /* list of JsonKeyValue pairs */
2017 JsonOutput *output; /* RETURNING clause, if specified */
2018 bool absent_on_null; /* skip NULL values? */
2019 bool unique; /* check key uniqueness? */
2020 ParseLoc location; /* token location, or -1 if unknown */
2022
2023/*
2024 * JsonArrayConstructor -
2025 * untransformed representation of JSON_ARRAY(element,...) constructor
2026 */
2028{
2030 List *exprs; /* list of JsonValueExpr elements */
2031 JsonOutput *output; /* RETURNING clause, if specified */
2032 bool absent_on_null; /* skip NULL elements? */
2033 ParseLoc location; /* token location, or -1 if unknown */
2035
2036/*
2037 * JsonArrayQueryConstructor -
2038 * untransformed representation of JSON_ARRAY(subquery) constructor
2039 */
2041{
2043 Node *query; /* subquery */
2044 JsonOutput *output; /* RETURNING clause, if specified */
2045 JsonFormat *format; /* FORMAT clause for subquery, if specified */
2046 bool absent_on_null; /* skip NULL elements? */
2047 ParseLoc location; /* token location, or -1 if unknown */
2049
2050/*
2051 * JsonAggConstructor -
2052 * common fields of untransformed representation of
2053 * JSON_ARRAYAGG() and JSON_OBJECTAGG()
2054 */
2056{
2058 JsonOutput *output; /* RETURNING clause, if any */
2059 Node *agg_filter; /* FILTER clause, if any */
2060 List *agg_order; /* ORDER BY clause, if any */
2061 struct WindowDef *over; /* OVER clause, if any */
2062 ParseLoc location; /* token location, or -1 if unknown */
2064
2065/*
2066 * JsonObjectAgg -
2067 * untransformed representation of JSON_OBJECTAGG()
2068 */
2069typedef struct JsonObjectAgg
2070{
2072 JsonAggConstructor *constructor; /* common fields */
2073 JsonKeyValue *arg; /* object key-value pair */
2074 bool absent_on_null; /* skip NULL values? */
2075 bool unique; /* check key uniqueness? */
2077
2078/*
2079 * JsonArrayAgg -
2080 * untransformed representation of JSON_ARRAYAGG()
2081 */
2082typedef struct JsonArrayAgg
2083{
2085 JsonAggConstructor *constructor; /* common fields */
2086 JsonValueExpr *arg; /* array element expression */
2087 bool absent_on_null; /* skip NULL elements? */
2089
2090
2091/*****************************************************************************
2092 * Raw Grammar Output Statements
2093 *****************************************************************************/
2094
2095/*
2096 * RawStmt --- container for any one statement's raw parse tree
2097 *
2098 * Parse analysis converts a raw parse tree headed by a RawStmt node into
2099 * an analyzed statement headed by a Query node. For optimizable statements,
2100 * the conversion is complex. For utility statements, the parser usually just
2101 * transfers the raw parse tree (sans RawStmt) into the utilityStmt field of
2102 * the Query node, and all the useful work happens at execution time.
2103 *
2104 * stmt_location/stmt_len identify the portion of the source text string
2105 * containing this raw statement (useful for multi-statement strings).
2106 *
2107 * This is irrelevant for query jumbling, as this is not used in parsed
2108 * queries.
2109 */
2110typedef struct RawStmt
2111{
2112 pg_node_attr(no_query_jumble)
2113
2114 NodeTag type;
2115 Node *stmt; /* raw parse tree */
2116 ParseLoc stmt_location; /* start location, or -1 if unknown */
2117 ParseLoc stmt_len; /* length in bytes; 0 means "rest of string" */
2119
2120/*****************************************************************************
2121 * Optimizable Statements
2122 *****************************************************************************/
2123
2124/* ----------------------
2125 * Insert Statement
2126 *
2127 * The source expression is represented by SelectStmt for both the
2128 * SELECT and VALUES cases. If selectStmt is NULL, then the query
2129 * is INSERT ... DEFAULT VALUES.
2130 * ----------------------
2131 */
2132typedef struct InsertStmt
2133{
2135 RangeVar *relation; /* relation to insert into */
2136 List *cols; /* optional: names of the target columns */
2137 Node *selectStmt; /* the source SELECT/VALUES, or NULL */
2138 OnConflictClause *onConflictClause; /* ON CONFLICT clause */
2139 ReturningClause *returningClause; /* RETURNING clause */
2140 WithClause *withClause; /* WITH clause */
2141 OverridingKind override; /* OVERRIDING clause */
2143
2144/* ----------------------
2145 * Delete Statement
2146 * ----------------------
2147 */
2148typedef struct DeleteStmt
2149{
2151 RangeVar *relation; /* relation to delete from */
2152 List *usingClause; /* optional using clause for more tables */
2153 Node *whereClause; /* qualifications */
2154 ReturningClause *returningClause; /* RETURNING clause */
2155 WithClause *withClause; /* WITH clause */
2157
2158/* ----------------------
2159 * Update Statement
2160 * ----------------------
2161 */
2162typedef struct UpdateStmt
2163{
2165 RangeVar *relation; /* relation to update */
2166 List *targetList; /* the target list (of ResTarget) */
2167 Node *whereClause; /* qualifications */
2168 List *fromClause; /* optional from clause for more tables */
2169 ReturningClause *returningClause; /* RETURNING clause */
2170 WithClause *withClause; /* WITH clause */
2172
2173/* ----------------------
2174 * Merge Statement
2175 * ----------------------
2176 */
2177typedef struct MergeStmt
2178{
2180 RangeVar *relation; /* target relation to merge into */
2181 Node *sourceRelation; /* source relation */
2182 Node *joinCondition; /* join condition between source and target */
2183 List *mergeWhenClauses; /* list of MergeWhenClause(es) */
2184 ReturningClause *returningClause; /* RETURNING clause */
2185 WithClause *withClause; /* WITH clause */
2187
2188/* ----------------------
2189 * Select Statement
2190 *
2191 * A "simple" SELECT is represented in the output of gram.y by a single
2192 * SelectStmt node; so is a VALUES construct. A query containing set
2193 * operators (UNION, INTERSECT, EXCEPT) is represented by a tree of SelectStmt
2194 * nodes, in which the leaf nodes are component SELECTs and the internal nodes
2195 * represent UNION, INTERSECT, or EXCEPT operators. Using the same node
2196 * type for both leaf and internal nodes allows gram.y to stick ORDER BY,
2197 * LIMIT, etc, clause values into a SELECT statement without worrying
2198 * whether it is a simple or compound SELECT.
2199 * ----------------------
2200 */
2201typedef enum SetOperation
2202{
2208
2209typedef struct SelectStmt
2210{
2212
2213 /*
2214 * These fields are used only in "leaf" SelectStmts.
2215 */
2216 List *distinctClause; /* NULL, list of DISTINCT ON exprs, or
2217 * lcons(NIL,NIL) for all (SELECT DISTINCT) */
2218 IntoClause *intoClause; /* target for SELECT INTO */
2219 List *targetList; /* the target list (of ResTarget) */
2220 List *fromClause; /* the FROM clause */
2221 Node *whereClause; /* WHERE qualification */
2222 List *groupClause; /* GROUP BY clauses */
2223 bool groupDistinct; /* Is this GROUP BY DISTINCT? */
2224 bool groupByAll; /* Is this GROUP BY ALL? */
2225 Node *havingClause; /* HAVING conditional-expression */
2226 List *windowClause; /* WINDOW window_name AS (...), ... */
2227
2228 /*
2229 * In a "leaf" node representing a VALUES list, the above fields are all
2230 * null, and instead this field is set. Note that the elements of the
2231 * sublists are just expressions, without ResTarget decoration. Also note
2232 * that a list element can be DEFAULT (represented as a SetToDefault
2233 * node), regardless of the context of the VALUES list. It's up to parse
2234 * analysis to reject that where not valid.
2235 */
2236 List *valuesLists; /* untransformed list of expression lists */
2237
2238 /*
2239 * These fields are used in both "leaf" SelectStmts and upper-level
2240 * SelectStmts.
2241 */
2242 List *sortClause; /* sort clause (a list of SortBy's) */
2243 Node *limitOffset; /* # of result tuples to skip */
2244 Node *limitCount; /* # of result tuples to return */
2245 LimitOption limitOption; /* limit type */
2246 List *lockingClause; /* FOR UPDATE (list of LockingClause's) */
2247 WithClause *withClause; /* WITH clause */
2248
2249 /*
2250 * These fields are used only in upper-level SelectStmts.
2251 */
2252 SetOperation op; /* type of set op */
2253 bool all; /* ALL specified? */
2254 struct SelectStmt *larg; /* left child */
2255 struct SelectStmt *rarg; /* right child */
2256 /* Eventually add fields for CORRESPONDING spec here */
2258
2259
2260/* ----------------------
2261 * Set Operation node for post-analysis query trees
2262 *
2263 * After parse analysis, a SELECT with set operations is represented by a
2264 * top-level Query node containing the leaf SELECTs as subqueries in its
2265 * range table. Its setOperations field shows the tree of set operations,
2266 * with leaf SelectStmt nodes replaced by RangeTblRef nodes, and internal
2267 * nodes replaced by SetOperationStmt nodes. Information about the output
2268 * column types is added, too. (Note that the child nodes do not necessarily
2269 * produce these types directly, but we've checked that their output types
2270 * can be coerced to the output column type.) Also, if it's not UNION ALL,
2271 * information about the types' sort/group semantics is provided in the form
2272 * of a SortGroupClause list (same representation as, eg, DISTINCT).
2273 * The resolved common column collations are provided too; but note that if
2274 * it's not UNION ALL, it's okay for a column to not have a common collation,
2275 * so a member of the colCollations list could be InvalidOid even though the
2276 * column has a collatable type.
2277 * ----------------------
2278 */
2279typedef struct SetOperationStmt
2280{
2282 SetOperation op; /* type of set op */
2283 bool all; /* ALL specified? */
2284 Node *larg; /* left child */
2285 Node *rarg; /* right child */
2286 /* Eventually add fields for CORRESPONDING spec here */
2287
2288 /* Fields derived during parse analysis (irrelevant for query jumbling): */
2289 /* OID list of output column type OIDs */
2290 List *colTypes pg_node_attr(query_jumble_ignore);
2291 /* integer list of output column typmods */
2292 List *colTypmods pg_node_attr(query_jumble_ignore);
2293 /* OID list of output column collation OIDs */
2294 List *colCollations pg_node_attr(query_jumble_ignore);
2295 /* a list of SortGroupClause's */
2296 List *groupClauses pg_node_attr(query_jumble_ignore);
2297 /* groupClauses is NIL if UNION ALL, but must be set otherwise */
2299
2300
2301/*
2302 * RETURN statement (inside SQL function body)
2303 */
2304typedef struct ReturnStmt
2305{
2309
2310
2311/* ----------------------
2312 * PL/pgSQL Assignment Statement
2313 *
2314 * Like SelectStmt, this is transformed into a SELECT Query.
2315 * However, the targetlist of the result looks more like an UPDATE.
2316 * ----------------------
2317 */
2318typedef struct PLAssignStmt
2319{
2321
2322 char *name; /* initial column name */
2323 List *indirection; /* subscripts and field names, if any */
2324 int nnames; /* number of names to use in ColumnRef */
2325 SelectStmt *val; /* the PL/pgSQL expression to assign */
2326 ParseLoc location; /* name's token location, or -1 if unknown */
2328
2329
2330/*****************************************************************************
2331 * Other Statements (no optimizations required)
2332 *
2333 * These are not touched by parser/analyze.c except to put them into
2334 * the utilityStmt field of a Query. This is eventually passed to
2335 * ProcessUtility (by-passing rewriting and planning). Some of the
2336 * statements do need attention from parse analysis, and this is
2337 * done by routines in parser/parse_utilcmd.c after ProcessUtility
2338 * receives the command for execution.
2339 * DECLARE CURSOR, EXPLAIN, and CREATE TABLE AS are special cases:
2340 * they contain optimizable statements, which get processed normally
2341 * by parser/analyze.c.
2342 *****************************************************************************/
2343
2344/*
2345 * When a command can act on several kinds of objects with only one
2346 * parse structure required, use these constants to designate the
2347 * object type. Note that commands typically don't support all the types.
2348 */
2349
2350typedef enum ObjectType
2351{
2356 OBJECT_ATTRIBUTE, /* type's attribute, when distinct from column */
2405
2406/* ----------------------
2407 * Create Schema Statement
2408 *
2409 * NOTE: the schemaElts list contains raw parsetrees for component statements
2410 * of the schema, such as CREATE TABLE, GRANT, etc. These are analyzed and
2411 * executed after the schema itself is created.
2412 * ----------------------
2413 */
2414typedef struct CreateSchemaStmt
2415{
2417 char *schemaname; /* the name of the schema to create */
2418 RoleSpec *authrole; /* the owner of the created schema */
2419 List *schemaElts; /* schema components (list of parsenodes) */
2420 bool if_not_exists; /* just do nothing if schema already exists? */
2422
2423typedef enum DropBehavior
2424{
2425 DROP_RESTRICT, /* drop fails if any dependent objects */
2426 DROP_CASCADE, /* remove dependent objects too */
2428
2429/* ----------------------
2430 * Alter Table
2431 * ----------------------
2432 */
2433typedef struct AlterTableStmt
2434{
2436 RangeVar *relation; /* table to work on */
2437 List *cmds; /* list of subcommands */
2438 ObjectType objtype; /* type of object */
2439 bool missing_ok; /* skip error if table missing */
2441
2442typedef enum AlterTableType
2443{
2444 AT_AddColumn, /* add column */
2445 AT_AddColumnToView, /* implicitly via CREATE OR REPLACE VIEW */
2446 AT_ColumnDefault, /* alter column default */
2447 AT_CookedColumnDefault, /* add a pre-cooked column default */
2448 AT_DropNotNull, /* alter column drop not null */
2449 AT_SetNotNull, /* alter column set not null */
2450 AT_SetExpression, /* alter column set expression */
2451 AT_DropExpression, /* alter column drop expression */
2452 AT_SetStatistics, /* alter column set statistics */
2453 AT_SetOptions, /* alter column set ( options ) */
2454 AT_ResetOptions, /* alter column reset ( options ) */
2455 AT_SetStorage, /* alter column set storage */
2456 AT_SetCompression, /* alter column set compression */
2457 AT_DropColumn, /* drop column */
2458 AT_AddIndex, /* add index */
2459 AT_ReAddIndex, /* internal to commands/tablecmds.c */
2460 AT_AddConstraint, /* add constraint */
2461 AT_ReAddConstraint, /* internal to commands/tablecmds.c */
2462 AT_ReAddDomainConstraint, /* internal to commands/tablecmds.c */
2463 AT_AlterConstraint, /* alter constraint */
2464 AT_ValidateConstraint, /* validate constraint */
2465 AT_AddIndexConstraint, /* add constraint using existing index */
2466 AT_DropConstraint, /* drop constraint */
2467 AT_ReAddComment, /* internal to commands/tablecmds.c */
2468 AT_AlterColumnType, /* alter column type */
2469 AT_AlterColumnGenericOptions, /* alter column OPTIONS (...) */
2470 AT_ChangeOwner, /* change owner */
2471 AT_ClusterOn, /* CLUSTER ON */
2472 AT_DropCluster, /* SET WITHOUT CLUSTER */
2473 AT_SetLogged, /* SET LOGGED */
2474 AT_SetUnLogged, /* SET UNLOGGED */
2475 AT_DropOids, /* SET WITHOUT OIDS */
2476 AT_SetAccessMethod, /* SET ACCESS METHOD */
2477 AT_SetTableSpace, /* SET TABLESPACE */
2478 AT_SetRelOptions, /* SET (...) -- AM specific parameters */
2479 AT_ResetRelOptions, /* RESET (...) -- AM specific parameters */
2480 AT_ReplaceRelOptions, /* replace reloption list in its entirety */
2481 AT_EnableTrig, /* ENABLE TRIGGER name */
2482 AT_EnableAlwaysTrig, /* ENABLE ALWAYS TRIGGER name */
2483 AT_EnableReplicaTrig, /* ENABLE REPLICA TRIGGER name */
2484 AT_DisableTrig, /* DISABLE TRIGGER name */
2485 AT_EnableTrigAll, /* ENABLE TRIGGER ALL */
2486 AT_DisableTrigAll, /* DISABLE TRIGGER ALL */
2487 AT_EnableTrigUser, /* ENABLE TRIGGER USER */
2488 AT_DisableTrigUser, /* DISABLE TRIGGER USER */
2489 AT_EnableRule, /* ENABLE RULE name */
2490 AT_EnableAlwaysRule, /* ENABLE ALWAYS RULE name */
2491 AT_EnableReplicaRule, /* ENABLE REPLICA RULE name */
2492 AT_DisableRule, /* DISABLE RULE name */
2493 AT_AddInherit, /* INHERIT parent */
2494 AT_DropInherit, /* NO INHERIT parent */
2495 AT_AddOf, /* OF <type_name> */
2496 AT_DropOf, /* NOT OF */
2497 AT_ReplicaIdentity, /* REPLICA IDENTITY */
2498 AT_EnableRowSecurity, /* ENABLE ROW SECURITY */
2499 AT_DisableRowSecurity, /* DISABLE ROW SECURITY */
2500 AT_ForceRowSecurity, /* FORCE ROW SECURITY */
2501 AT_NoForceRowSecurity, /* NO FORCE ROW SECURITY */
2502 AT_GenericOptions, /* OPTIONS (...) */
2503 AT_AttachPartition, /* ATTACH PARTITION */
2504 AT_DetachPartition, /* DETACH PARTITION */
2505 AT_DetachPartitionFinalize, /* DETACH PARTITION FINALIZE */
2506 AT_SplitPartition, /* SPLIT PARTITION */
2507 AT_MergePartitions, /* MERGE PARTITIONS */
2508 AT_AddIdentity, /* ADD IDENTITY */
2509 AT_SetIdentity, /* SET identity column options */
2510 AT_DropIdentity, /* DROP IDENTITY */
2511 AT_ReAddStatistics, /* internal to commands/tablecmds.c */
2513
2514typedef struct AlterTableCmd /* one subcommand of an ALTER TABLE */
2515{
2517 AlterTableType subtype; /* Type of table alteration to apply */
2518 char *name; /* column, constraint, or trigger to act on,
2519 * or tablespace, access method */
2520 int16 num; /* attribute number for columns referenced by
2521 * number */
2523 Node *def; /* definition of new column, index,
2524 * constraint, or parent table */
2525 DropBehavior behavior; /* RESTRICT or CASCADE for DROP cases */
2526 bool missing_ok; /* skip error if missing? */
2527 bool recurse; /* exec-time recursion */
2529
2530/* Ad-hoc node for AT_AlterConstraint */
2531typedef struct ATAlterConstraint
2532{
2534 char *conname; /* Constraint name */
2535 bool alterEnforceability; /* changing enforceability properties? */
2536 bool is_enforced; /* ENFORCED? */
2537 bool alterDeferrability; /* changing deferrability properties? */
2538 bool deferrable; /* DEFERRABLE? */
2539 bool initdeferred; /* INITIALLY DEFERRED? */
2540 bool alterInheritability; /* changing inheritability properties */
2543
2544/* Ad-hoc node for AT_ReplicaIdentity */
2546{
2549 char *name;
2551
2552
2553/* ----------------------
2554 * Alter Collation
2555 * ----------------------
2556 */
2558{
2562
2563
2564/* ----------------------
2565 * Alter Domain
2566 *
2567 * The fields are used in different ways by the different variants of
2568 * this command.
2569 * ----------------------
2570 */
2572{
2573 AD_AlterDefault = 'T', /* SET|DROP DEFAULT */
2574 AD_DropNotNull = 'N', /* DROP NOT NULL */
2575 AD_SetNotNull = 'O', /* SET NOT NULL */
2576 AD_AddConstraint = 'C', /* ADD CONSTRAINT */
2577 AD_DropConstraint = 'X', /* DROP CONSTRAINT */
2578 AD_ValidateConstraint = 'V', /* VALIDATE CONSTRAINT */
2580
2581typedef struct AlterDomainStmt
2582{
2584 AlterDomainType subtype; /* subtype of command */
2585 List *typeName; /* domain to work on */
2586 char *name; /* column or constraint name to act on */
2587 Node *def; /* definition of default or constraint */
2588 DropBehavior behavior; /* RESTRICT or CASCADE for DROP cases */
2589 bool missing_ok; /* skip error if missing? */
2591
2592
2593/* ----------------------
2594 * Grant|Revoke Statement
2595 * ----------------------
2596 */
2598{
2599 ACL_TARGET_OBJECT, /* grant on specific named object(s) */
2600 ACL_TARGET_ALL_IN_SCHEMA, /* grant on all objects in given schema(s) */
2601 ACL_TARGET_DEFAULTS, /* ALTER DEFAULT PRIVILEGES */
2603
2604typedef struct GrantStmt
2605{
2607 bool is_grant; /* true = GRANT, false = REVOKE */
2608 GrantTargetType targtype; /* type of the grant target */
2609 ObjectType objtype; /* kind of object being operated on */
2610 List *objects; /* list of RangeVar nodes, ObjectWithArgs
2611 * nodes, or plain names (as String values) */
2612 List *privileges; /* list of AccessPriv nodes */
2613 /* privileges == NIL denotes ALL PRIVILEGES */
2614 List *grantees; /* list of RoleSpec nodes */
2615 bool grant_option; /* grant or revoke grant option */
2617 DropBehavior behavior; /* drop behavior (for REVOKE) */
2619
2620/*
2621 * ObjectWithArgs represents a function/procedure/operator name plus parameter
2622 * identification.
2623 *
2624 * objargs includes only the types of the input parameters of the object.
2625 * In some contexts, that will be all we have, and it's enough to look up
2626 * objects according to the traditional Postgres rules (i.e., when only input
2627 * arguments matter).
2628 *
2629 * objfuncargs, if not NIL, carries the full specification of the parameter
2630 * list, including parameter mode annotations.
2631 *
2632 * Some grammar productions can set args_unspecified = true instead of
2633 * providing parameter info. In this case, lookup will succeed only if
2634 * the object name is unique. Note that otherwise, NIL parameter lists
2635 * mean zero arguments.
2636 */
2637typedef struct ObjectWithArgs
2638{
2640 List *objname; /* qualified name of function/operator */
2641 List *objargs; /* list of Typename nodes (input args only) */
2642 List *objfuncargs; /* list of FunctionParameter nodes */
2643 bool args_unspecified; /* argument list was omitted? */
2645
2646/*
2647 * An access privilege, with optional list of column names
2648 * priv_name == NULL denotes ALL PRIVILEGES (only used with a column list)
2649 * cols == NIL denotes "all columns"
2650 * Note that simple "ALL PRIVILEGES" is represented as a NIL list, not
2651 * an AccessPriv with both fields null.
2652 */
2653typedef struct AccessPriv
2654{
2656 char *priv_name; /* string name of privilege */
2657 List *cols; /* list of String */
2659
2660/* ----------------------
2661 * Grant/Revoke Role Statement
2662 *
2663 * Note: because of the parsing ambiguity with the GRANT <privileges>
2664 * statement, granted_roles is a list of AccessPriv; the execution code
2665 * should complain if any column lists appear. grantee_roles is a list
2666 * of role names, as String values.
2667 * ----------------------
2668 */
2669typedef struct GrantRoleStmt
2670{
2672 List *granted_roles; /* list of roles to be granted/revoked */
2673 List *grantee_roles; /* list of member roles to add/delete */
2674 bool is_grant; /* true = GRANT, false = REVOKE */
2675 List *opt; /* options e.g. WITH GRANT OPTION */
2676 RoleSpec *grantor; /* set grantor to other than current role */
2677 DropBehavior behavior; /* drop behavior (for REVOKE) */
2679
2680/* ----------------------
2681 * Alter Default Privileges Statement
2682 * ----------------------
2683 */
2685{
2687 List *options; /* list of DefElem */
2688 GrantStmt *action; /* GRANT/REVOKE action (with objects=NIL) */
2690
2691/* ----------------------
2692 * Copy Statement
2693 *
2694 * We support "COPY relation FROM file", "COPY relation TO file", and
2695 * "COPY (query) TO file". In any given CopyStmt, exactly one of "relation"
2696 * and "query" must be non-NULL.
2697 * ----------------------
2698 */
2699typedef struct CopyStmt
2700{
2702 RangeVar *relation; /* the relation to copy */
2703 Node *query; /* the query (SELECT or DML statement with
2704 * RETURNING) to copy, as a raw parse tree */
2705 List *attlist; /* List of column names (as Strings), or NIL
2706 * for all columns */
2707 bool is_from; /* TO or FROM */
2708 bool is_program; /* is 'filename' a program to popen? */
2709 char *filename; /* filename, or NULL for STDIN/STDOUT */
2710 List *options; /* List of DefElem nodes */
2711 Node *whereClause; /* WHERE condition (or NULL) */
2713
2714/* ----------------------
2715 * SET Statement (includes RESET)
2716 *
2717 * "SET var TO DEFAULT" and "RESET var" are semantically equivalent, but we
2718 * preserve the distinction in VariableSetKind for CreateCommandTag().
2719 * ----------------------
2720 */
2722{
2723 VAR_SET_VALUE, /* SET var = value */
2724 VAR_SET_DEFAULT, /* SET var TO DEFAULT */
2725 VAR_SET_CURRENT, /* SET var FROM CURRENT */
2726 VAR_SET_MULTI, /* special case for SET TRANSACTION ... */
2727 VAR_RESET, /* RESET var */
2728 VAR_RESET_ALL, /* RESET ALL */
2730
2731typedef struct VariableSetStmt
2732{
2733 pg_node_attr(custom_query_jumble)
2734
2735 NodeTag type;
2737 /* variable to be set */
2738 char *name;
2739 /* List of A_Const nodes */
2741
2742 /*
2743 * True if arguments should be accounted for in query jumbling. We use a
2744 * separate flag rather than query_jumble_ignore on "args" as several
2745 * grammar flavors of SET rely on a list of values that are parsed
2746 * directly from the grammar's keywords.
2747 */
2749 /* SET LOCAL? */
2751 /* token location, or -1 if unknown */
2752 ParseLoc location pg_node_attr(query_jumble_location);
2754
2755/* ----------------------
2756 * Show Statement
2757 * ----------------------
2758 */
2759typedef struct VariableShowStmt
2760{
2762 char *name;
2764
2765/* ----------------------
2766 * Create Table Statement
2767 *
2768 * NOTE: in the raw gram.y output, ColumnDef and Constraint nodes are
2769 * intermixed in tableElts, and constraints and nnconstraints are NIL. After
2770 * parse analysis, tableElts contains just ColumnDefs, nnconstraints contains
2771 * Constraint nodes of CONSTR_NOTNULL type from various sources, and
2772 * constraints contains just CONSTR_CHECK Constraint nodes.
2773 * ----------------------
2774 */
2775
2776typedef struct CreateStmt
2777{
2779 RangeVar *relation; /* relation to create */
2780 List *tableElts; /* column definitions (list of ColumnDef) */
2781 List *inhRelations; /* relations to inherit from (list of
2782 * RangeVar) */
2783 PartitionBoundSpec *partbound; /* FOR VALUES clause */
2784 PartitionSpec *partspec; /* PARTITION BY clause */
2785 TypeName *ofTypename; /* OF typename */
2786 List *constraints; /* constraints (list of Constraint nodes) */
2787 List *nnconstraints; /* NOT NULL constraints (ditto) */
2788 List *options; /* options from WITH clause */
2789 OnCommitAction oncommit; /* what do we do at COMMIT? */
2790 char *tablespacename; /* table space to use, or NULL */
2791 char *accessMethod; /* table access method */
2792 bool if_not_exists; /* just do nothing if it already exists? */
2794
2795/* ----------
2796 * Definitions for constraints in CreateStmt
2797 *
2798 * Note that column defaults are treated as a type of constraint,
2799 * even though that's a bit odd semantically.
2800 *
2801 * For constraints that use expressions (CONSTR_CHECK, CONSTR_DEFAULT)
2802 * we may have the expression in either "raw" form (an untransformed
2803 * parse tree) or "cooked" form (the nodeToString representation of
2804 * an executable expression tree), depending on how this Constraint
2805 * node was created (by parsing, or by inheritance from an existing
2806 * relation). We should never have both in the same node!
2807 *
2808 * FKCONSTR_ACTION_xxx values are stored into pg_constraint.confupdtype
2809 * and pg_constraint.confdeltype columns; FKCONSTR_MATCH_xxx values are
2810 * stored into pg_constraint.confmatchtype. Changing the code values may
2811 * require an initdb!
2812 *
2813 * If skip_validation is true then we skip checking that the existing rows
2814 * in the table satisfy the constraint, and just install the catalog entries
2815 * for the constraint. A new FK constraint is marked as valid iff
2816 * initially_valid is true. (Usually skip_validation and initially_valid
2817 * are inverses, but we can set both true if the table is known empty.)
2818 *
2819 * Constraint attributes (DEFERRABLE etc) are initially represented as
2820 * separate Constraint nodes for simplicity of parsing. parse_utilcmd.c makes
2821 * a pass through the constraints list to insert the info into the appropriate
2822 * Constraint node.
2823 * ----------
2824 */
2825
2826typedef enum ConstrType /* types of constraints */
2827{
2828 CONSTR_NULL, /* not standard SQL, but a lot of people
2829 * expect it */
2839 CONSTR_ATTR_DEFERRABLE, /* attributes for previous constraint node */
2846
2847/* Foreign key action codes */
2848#define FKCONSTR_ACTION_NOACTION 'a'
2849#define FKCONSTR_ACTION_RESTRICT 'r'
2850#define FKCONSTR_ACTION_CASCADE 'c'
2851#define FKCONSTR_ACTION_SETNULL 'n'
2852#define FKCONSTR_ACTION_SETDEFAULT 'd'
2853
2854/* Foreign key matchtype codes */
2855#define FKCONSTR_MATCH_FULL 'f'
2856#define FKCONSTR_MATCH_PARTIAL 'p'
2857#define FKCONSTR_MATCH_SIMPLE 's'
2858
2859typedef struct Constraint
2860{
2862 ConstrType contype; /* see above */
2863 char *conname; /* Constraint name, or NULL if unnamed */
2864 bool deferrable; /* DEFERRABLE? */
2865 bool initdeferred; /* INITIALLY DEFERRED? */
2866 bool is_enforced; /* enforced constraint? */
2867 bool skip_validation; /* skip validation of existing rows? */
2868 bool initially_valid; /* mark the new constraint as valid? */
2869 bool is_no_inherit; /* is constraint non-inheritable? */
2870 Node *raw_expr; /* CHECK or DEFAULT expression, as
2871 * untransformed parse tree */
2872 char *cooked_expr; /* CHECK or DEFAULT expression, as
2873 * nodeToString representation */
2874 char generated_when; /* ALWAYS or BY DEFAULT */
2875 char generated_kind; /* STORED or VIRTUAL */
2876 bool nulls_not_distinct; /* null treatment for UNIQUE constraints */
2877 List *keys; /* String nodes naming referenced key
2878 * column(s); for UNIQUE/PK/NOT NULL */
2879 bool without_overlaps; /* WITHOUT OVERLAPS specified */
2880 List *including; /* String nodes naming referenced nonkey
2881 * column(s); for UNIQUE/PK */
2882 List *exclusions; /* list of (IndexElem, operator name) pairs;
2883 * for exclusion constraints */
2884 List *options; /* options from WITH clause */
2885 char *indexname; /* existing index to use; otherwise NULL */
2886 char *indexspace; /* index tablespace; NULL for default */
2887 bool reset_default_tblspc; /* reset default_tablespace prior to
2888 * creating the index */
2889 char *access_method; /* index access method; NULL for default */
2890 Node *where_clause; /* partial index predicate */
2891
2892 /* Fields used for FOREIGN KEY constraints: */
2893 RangeVar *pktable; /* Primary key table */
2894 List *fk_attrs; /* Attributes of foreign key */
2895 List *pk_attrs; /* Corresponding attrs in PK table */
2896 bool fk_with_period; /* Last attribute of FK uses PERIOD */
2897 bool pk_with_period; /* Last attribute of PK uses PERIOD */
2898 char fk_matchtype; /* FULL, PARTIAL, SIMPLE */
2899 char fk_upd_action; /* ON UPDATE action */
2900 char fk_del_action; /* ON DELETE action */
2901 List *fk_del_set_cols; /* ON DELETE SET NULL/DEFAULT (col1, col2) */
2902 List *old_conpfeqop; /* pg_constraint.conpfeqop of my former self */
2903 Oid old_pktable_oid; /* pg_constraint.confrelid of my former
2904 * self */
2905
2906 ParseLoc location; /* token location, or -1 if unknown */
2908
2909/* ----------------------
2910 * Create/Drop Table Space Statements
2911 * ----------------------
2912 */
2913
2915{
2922
2924{
2927 bool missing_ok; /* skip error if missing? */
2929
2931{
2937
2939{
2942 ObjectType objtype; /* Object type to move */
2943 List *roles; /* List of roles to move objects of */
2947
2948/* ----------------------
2949 * Create/Alter Extension Statements
2950 * ----------------------
2951 */
2952
2954{
2956 char *extname;
2957 bool if_not_exists; /* just do nothing if it already exists? */
2958 List *options; /* List of DefElem nodes */
2960
2961/* Only used for ALTER EXTENSION UPDATE; later might need an action field */
2963{
2965 char *extname;
2966 List *options; /* List of DefElem nodes */
2968
2970{
2972 char *extname; /* Extension's name */
2973 int action; /* +1 = add object, -1 = drop object */
2974 ObjectType objtype; /* Object's type */
2975 Node *object; /* Qualified name of the object */
2977
2978/* ----------------------
2979 * Create/Alter FOREIGN DATA WRAPPER Statements
2980 * ----------------------
2981 */
2982
2983typedef struct CreateFdwStmt
2984{
2986 char *fdwname; /* foreign-data wrapper name */
2987 List *func_options; /* HANDLER/VALIDATOR options */
2988 List *options; /* generic options to FDW */
2990
2991typedef struct AlterFdwStmt
2992{
2994 char *fdwname; /* foreign-data wrapper name */
2995 List *func_options; /* HANDLER/VALIDATOR options */
2996 List *options; /* generic options to FDW */
2998
2999/* ----------------------
3000 * Create/Alter FOREIGN SERVER Statements
3001 * ----------------------
3002 */
3003
3005{
3007 char *servername; /* server name */
3008 char *servertype; /* optional server type */
3009 char *version; /* optional server version */
3010 char *fdwname; /* FDW name */
3011 bool if_not_exists; /* just do nothing if it already exists? */
3012 List *options; /* generic options to server */
3014
3016{
3018 char *servername; /* server name */
3019 char *version; /* optional server version */
3020 List *options; /* generic options to server */
3021 bool has_version; /* version specified */
3023
3024/* ----------------------
3025 * Create FOREIGN TABLE Statement
3026 * ----------------------
3027 */
3028
3030{
3035
3036/* ----------------------
3037 * Create/Drop USER MAPPING Statements
3038 * ----------------------
3039 */
3040
3042{
3044 RoleSpec *user; /* user role */
3045 char *servername; /* server name */
3046 bool if_not_exists; /* just do nothing if it already exists? */
3047 List *options; /* generic options to server */
3049
3051{
3053 RoleSpec *user; /* user role */
3054 char *servername; /* server name */
3055 List *options; /* generic options to server */
3057
3059{
3061 RoleSpec *user; /* user role */
3062 char *servername; /* server name */
3063 bool missing_ok; /* ignore missing mappings */
3065
3066/* ----------------------
3067 * Import Foreign Schema Statement
3068 * ----------------------
3069 */
3070
3072{
3073 FDW_IMPORT_SCHEMA_ALL, /* all relations wanted */
3074 FDW_IMPORT_SCHEMA_LIMIT_TO, /* include only listed tables in import */
3075 FDW_IMPORT_SCHEMA_EXCEPT, /* exclude listed tables from import */
3077
3079{
3081 char *server_name; /* FDW server name */
3082 char *remote_schema; /* remote schema name to query */
3083 char *local_schema; /* local schema to create objects in */
3084 ImportForeignSchemaType list_type; /* type of table list */
3085 List *table_list; /* List of RangeVar */
3086 List *options; /* list of options to pass to FDW */
3088
3089/*----------------------
3090 * Create POLICY Statement
3091 *----------------------
3092 */
3093typedef struct CreatePolicyStmt
3094{
3096 char *policy_name; /* Policy's name */
3097 RangeVar *table; /* the table name the policy applies to */
3098 char *cmd_name; /* the command name the policy applies to */
3099 bool permissive; /* restrictive or permissive policy */
3100 List *roles; /* the roles associated with the policy */
3101 Node *qual; /* the policy's condition */
3102 Node *with_check; /* the policy's WITH CHECK condition. */
3104
3105/*----------------------
3106 * Alter POLICY Statement
3107 *----------------------
3108 */
3109typedef struct AlterPolicyStmt
3110{
3112 char *policy_name; /* Policy's name */
3113 RangeVar *table; /* the table name the policy applies to */
3114 List *roles; /* the roles associated with the policy */
3115 Node *qual; /* the policy's condition */
3116 Node *with_check; /* the policy's WITH CHECK condition. */
3118
3119/*----------------------
3120 * Create ACCESS METHOD Statement
3121 *----------------------
3122 */
3123typedef struct CreateAmStmt
3124{
3126 char *amname; /* access method name */
3127 List *handler_name; /* handler function name */
3128 char amtype; /* type of access method */
3130
3131/* ----------------------
3132 * Create TRIGGER Statement
3133 * ----------------------
3134 */
3135typedef struct CreateTrigStmt
3136{
3138 bool replace; /* replace trigger if already exists */
3139 bool isconstraint; /* This is a constraint trigger */
3140 char *trigname; /* TRIGGER's name */
3141 RangeVar *relation; /* relation trigger is on */
3142 List *funcname; /* qual. name of function to call */
3143 List *args; /* list of String or NIL */
3144 bool row; /* ROW/STATEMENT */
3145 /* timing uses the TRIGGER_TYPE bits defined in catalog/pg_trigger.h */
3146 int16 timing; /* BEFORE, AFTER, or INSTEAD */
3147 /* events uses the TRIGGER_TYPE bits defined in catalog/pg_trigger.h */
3148 int16 events; /* "OR" of INSERT/UPDATE/DELETE/TRUNCATE */
3149 List *columns; /* column names, or NIL for all columns */
3150 Node *whenClause; /* qual expression, or NULL if none */
3151 /* explicitly named transition data */
3152 List *transitionRels; /* TriggerTransition nodes, or NIL if none */
3153 /* The remaining fields are only used for constraint triggers */
3154 bool deferrable; /* [NOT] DEFERRABLE */
3155 bool initdeferred; /* INITIALLY {DEFERRED|IMMEDIATE} */
3156 RangeVar *constrrel; /* opposite relation, if RI trigger */
3158
3159/* ----------------------
3160 * Create EVENT TRIGGER Statement
3161 * ----------------------
3162 */
3164{
3166 char *trigname; /* TRIGGER's name */
3167 char *eventname; /* event's identifier */
3168 List *whenclause; /* list of DefElems indicating filtering */
3169 List *funcname; /* qual. name of function to call */
3171
3172/* ----------------------
3173 * Alter EVENT TRIGGER Statement
3174 * ----------------------
3175 */
3177{
3179 char *trigname; /* TRIGGER's name */
3180 char tgenabled; /* trigger's firing configuration WRT
3181 * session_replication_role */
3183
3184/* ----------------------
3185 * Create LANGUAGE Statements
3186 * ----------------------
3187 */
3188typedef struct CreatePLangStmt
3189{
3191 bool replace; /* T => replace if already exists */
3192 char *plname; /* PL name */
3193 List *plhandler; /* PL call handler function (qual. name) */
3194 List *plinline; /* optional inline function (qual. name) */
3195 List *plvalidator; /* optional validator function (qual. name) */
3196 bool pltrusted; /* PL is trusted */
3198
3199/* ----------------------
3200 * Create/Alter/Drop Role Statements
3201 *
3202 * Note: these node types are also used for the backwards-compatible
3203 * Create/Alter/Drop User/Group statements. In the ALTER and DROP cases
3204 * there's really no need to distinguish what the original spelling was,
3205 * but for CREATE we mark the type because the defaults vary.
3206 * ----------------------
3207 */
3208typedef enum RoleStmtType
3209{
3214
3215typedef struct CreateRoleStmt
3216{
3218 RoleStmtType stmt_type; /* ROLE/USER/GROUP */
3219 char *role; /* role name */
3220 List *options; /* List of DefElem nodes */
3222
3223typedef struct AlterRoleStmt
3224{
3226 RoleSpec *role; /* role */
3227 List *options; /* List of DefElem nodes */
3228 int action; /* +1 = add members, -1 = drop members */
3230
3231typedef struct AlterRoleSetStmt
3232{
3234 RoleSpec *role; /* role */
3235 char *database; /* database name, or NULL */
3236 VariableSetStmt *setstmt; /* SET or RESET subcommand */
3238
3239typedef struct DropRoleStmt
3240{
3242 List *roles; /* List of roles to remove */
3243 bool missing_ok; /* skip error if a role is missing? */
3245
3246/* ----------------------
3247 * {Create|Alter} SEQUENCE Statement
3248 * ----------------------
3249 */
3250
3251typedef struct CreateSeqStmt
3252{
3254 RangeVar *sequence; /* the sequence to create */
3256 Oid ownerId; /* ID of owner, or InvalidOid for default */
3258 bool if_not_exists; /* just do nothing if it already exists? */
3260
3261typedef struct AlterSeqStmt
3262{
3264 RangeVar *sequence; /* the sequence to alter */
3267 bool missing_ok; /* skip error if a role is missing? */
3269
3270/* ----------------------
3271 * Create {Aggregate|Operator|Type} Statement
3272 * ----------------------
3273 */
3274typedef struct DefineStmt
3275{
3277 ObjectType kind; /* aggregate, operator, type */
3278 bool oldstyle; /* hack to signal old CREATE AGG syntax */
3279 List *defnames; /* qualified name (list of String) */
3280 List *args; /* a list of TypeName (if needed) */
3281 List *definition; /* a list of DefElem */
3282 bool if_not_exists; /* just do nothing if it already exists? */
3283 bool replace; /* replace if already exists? */
3285
3286/* ----------------------
3287 * Create Domain Statement
3288 * ----------------------
3289 */
3290typedef struct CreateDomainStmt
3291{
3293 List *domainname; /* qualified name (list of String) */
3294 TypeName *typeName; /* the base type */
3295 CollateClause *collClause; /* untransformed COLLATE spec, if any */
3296 List *constraints; /* constraints (list of Constraint nodes) */
3298
3299/* ----------------------
3300 * Create Operator Class Statement
3301 * ----------------------
3302 */
3303typedef struct CreateOpClassStmt
3304{
3306 List *opclassname; /* qualified name (list of String) */
3307 List *opfamilyname; /* qualified name (ditto); NIL if omitted */
3308 char *amname; /* name of index AM opclass is for */
3309 TypeName *datatype; /* datatype of indexed column */
3310 List *items; /* List of CreateOpClassItem nodes */
3311 bool isDefault; /* Should be marked as default for type? */
3313
3314#define OPCLASS_ITEM_OPERATOR 1
3315#define OPCLASS_ITEM_FUNCTION 2
3316#define OPCLASS_ITEM_STORAGETYPE 3
3317
3318typedef struct CreateOpClassItem
3319{
3321 int itemtype; /* see codes above */
3322 ObjectWithArgs *name; /* operator or function name and args */
3323 int number; /* strategy num or support proc num */
3324 List *order_family; /* only used for ordering operators */
3325 List *class_args; /* amproclefttype/amprocrighttype or
3326 * amoplefttype/amoprighttype */
3327 /* fields used for a storagetype item: */
3328 TypeName *storedtype; /* datatype stored in index */
3330
3331/* ----------------------
3332 * Create Operator Family Statement
3333 * ----------------------
3334 */
3336{
3338 List *opfamilyname; /* qualified name (list of String) */
3339 char *amname; /* name of index AM opfamily is for */
3341
3342/* ----------------------
3343 * Alter Operator Family Statement
3344 * ----------------------
3345 */
3346typedef struct AlterOpFamilyStmt
3347{
3349 List *opfamilyname; /* qualified name (list of String) */
3350 char *amname; /* name of index AM opfamily is for */
3351 bool isDrop; /* ADD or DROP the items? */
3352 List *items; /* List of CreateOpClassItem nodes */
3354
3355/* ----------------------
3356 * Drop Table|Sequence|View|Index|Type|Domain|Conversion|Schema Statement
3357 * ----------------------
3358 */
3359
3360typedef struct DropStmt
3361{
3363 List *objects; /* list of names */
3364 ObjectType removeType; /* object type */
3365 DropBehavior behavior; /* RESTRICT or CASCADE behavior */
3366 bool missing_ok; /* skip error if object is missing? */
3367 bool concurrent; /* drop index concurrently? */
3369
3370/* ----------------------
3371 * Truncate Table Statement
3372 * ----------------------
3373 */
3374typedef struct TruncateStmt
3375{
3377 List *relations; /* relations (RangeVars) to be truncated */
3378 bool restart_seqs; /* restart owned sequences? */
3379 DropBehavior behavior; /* RESTRICT or CASCADE behavior */
3381
3382/* ----------------------
3383 * Comment On Statement
3384 * ----------------------
3385 */
3386typedef struct CommentStmt
3387{
3389 ObjectType objtype; /* Object's type */
3390 Node *object; /* Qualified name of the object */
3391 char *comment; /* Comment to insert, or NULL to remove */
3393
3394/* ----------------------
3395 * SECURITY LABEL Statement
3396 * ----------------------
3397 */
3398typedef struct SecLabelStmt
3399{
3401 ObjectType objtype; /* Object's type */
3402 Node *object; /* Qualified name of the object */
3403 char *provider; /* Label provider (or NULL) */
3404 char *label; /* New security label to be assigned */
3406
3407/* ----------------------
3408 * Declare Cursor Statement
3409 *
3410 * The "query" field is initially a raw parse tree, and is converted to a
3411 * Query node during parse analysis. Note that rewriting and planning
3412 * of the query are always postponed until execution.
3413 * ----------------------
3414 */
3415#define CURSOR_OPT_BINARY 0x0001 /* BINARY */
3416#define CURSOR_OPT_SCROLL 0x0002 /* SCROLL explicitly given */
3417#define CURSOR_OPT_NO_SCROLL 0x0004 /* NO SCROLL explicitly given */
3418#define CURSOR_OPT_INSENSITIVE 0x0008 /* INSENSITIVE */
3419#define CURSOR_OPT_ASENSITIVE 0x0010 /* ASENSITIVE */
3420#define CURSOR_OPT_HOLD 0x0020 /* WITH HOLD */
3421/* these planner-control flags do not correspond to any SQL grammar: */
3422#define CURSOR_OPT_FAST_PLAN 0x0100 /* prefer fast-start plan */
3423#define CURSOR_OPT_GENERIC_PLAN 0x0200 /* force use of generic plan */
3424#define CURSOR_OPT_CUSTOM_PLAN 0x0400 /* force use of custom plan */
3425#define CURSOR_OPT_PARALLEL_OK 0x0800 /* parallel mode OK */
3426
3427typedef struct DeclareCursorStmt
3428{
3430 char *portalname; /* name of the portal (cursor) */
3431 int options; /* bitmask of options (see above) */
3432 Node *query; /* the query (see comments above) */
3434
3435/* ----------------------
3436 * Close Portal Statement
3437 * ----------------------
3438 */
3439typedef struct ClosePortalStmt
3440{
3442 char *portalname; /* name of the portal (cursor) */
3443 /* NULL means CLOSE ALL */
3445
3446/* ----------------------
3447 * Fetch Statement (also Move)
3448 * ----------------------
3449 */
3450typedef enum FetchDirection
3451{
3452 /* for these, howMany is how many rows to fetch; FETCH_ALL means ALL */
3455 /* for these, howMany indicates a position; only one row is fetched */
3459
3461{
3475
3476#define FETCH_ALL LONG_MAX
3477
3478typedef struct FetchStmt
3479{
3481 FetchDirection direction; /* see above */
3482 /* number of rows, or position argument */
3483 long howMany pg_node_attr(query_jumble_ignore);
3484 /* name of portal (cursor) */
3486 /* true if MOVE */
3488
3489 /*
3490 * Set when a direction_keyword (e.g., FETCH FORWARD) is used, to
3491 * distinguish it from a numeric variant (e.g., FETCH 1) for the purpose
3492 * of query jumbling.
3493 */
3495
3496 /* token location, or -1 if unknown */
3497 ParseLoc location pg_node_attr(query_jumble_location);
3499
3500/* ----------------------
3501 * Create Index Statement
3502 *
3503 * This represents creation of an index and/or an associated constraint.
3504 * If isconstraint is true, we should create a pg_constraint entry along
3505 * with the index. But if indexOid isn't InvalidOid, we are not creating an
3506 * index, just a UNIQUE/PKEY constraint using an existing index. isconstraint
3507 * must always be true in this case, and the fields describing the index
3508 * properties are empty.
3509 * ----------------------
3510 */
3511typedef struct IndexStmt
3512{
3514 char *idxname; /* name of new index, or NULL for default */
3515 RangeVar *relation; /* relation to build index on */
3516 char *accessMethod; /* name of access method (eg. btree) */
3517 char *tableSpace; /* tablespace, or NULL for default */
3518 List *indexParams; /* columns to index: a list of IndexElem */
3519 List *indexIncludingParams; /* additional columns to index: a list
3520 * of IndexElem */
3521 List *options; /* WITH clause options: a list of DefElem */
3522 Node *whereClause; /* qualification (partial-index predicate) */
3523 List *excludeOpNames; /* exclusion operator names, or NIL if none */
3524 char *idxcomment; /* comment to apply to index, or NULL */
3525 Oid indexOid; /* OID of an existing index, if any */
3526 RelFileNumber oldNumber; /* relfilenumber of existing storage, if any */
3527 SubTransactionId oldCreateSubid; /* rd_createSubid of oldNumber */
3528 SubTransactionId oldFirstRelfilelocatorSubid; /* rd_firstRelfilelocatorSubid
3529 * of oldNumber */
3530 bool unique; /* is index unique? */
3531 bool nulls_not_distinct; /* null treatment for UNIQUE constraints */
3532 bool primary; /* is index a primary key? */
3533 bool isconstraint; /* is it for a pkey/unique constraint? */
3534 bool iswithoutoverlaps; /* is the constraint WITHOUT OVERLAPS? */
3535 bool deferrable; /* is the constraint DEFERRABLE? */
3536 bool initdeferred; /* is the constraint INITIALLY DEFERRED? */
3537 bool transformed; /* true when transformIndexStmt is finished */
3538 bool concurrent; /* should this be a concurrent index build? */
3539 bool if_not_exists; /* just do nothing if index already exists? */
3540 bool reset_default_tblspc; /* reset default_tablespace prior to
3541 * executing */
3543
3544/* ----------------------
3545 * Create Statistics Statement
3546 * ----------------------
3547 */
3548typedef struct CreateStatsStmt
3549{
3551 List *defnames; /* qualified name (list of String) */
3552 List *stat_types; /* stat types (list of String) */
3553 List *exprs; /* expressions to build statistics on */
3554 List *relations; /* rels to build stats on (list of RangeVar) */
3555 char *stxcomment; /* comment to apply to stats, or NULL */
3556 bool transformed; /* true when transformStatsStmt is finished */
3557 bool if_not_exists; /* do nothing if stats name already exists */
3559
3560/*
3561 * StatsElem - statistics parameters (used in CREATE STATISTICS)
3562 *
3563 * For a plain attribute, 'name' is the name of the referenced table column
3564 * and 'expr' is NULL. For an expression, 'name' is NULL and 'expr' is the
3565 * expression tree.
3566 */
3567typedef struct StatsElem
3568{
3570 char *name; /* name of attribute to index, or NULL */
3571 Node *expr; /* expression to index, or NULL */
3573
3574
3575/* ----------------------
3576 * Alter Statistics Statement
3577 * ----------------------
3578 */
3579typedef struct AlterStatsStmt
3580{
3582 List *defnames; /* qualified name (list of String) */
3583 Node *stxstattarget; /* statistics target */
3584 bool missing_ok; /* skip error if statistics object is missing */
3586
3587/* ----------------------
3588 * Create Function Statement
3589 * ----------------------
3590 */
3592{
3594 bool is_procedure; /* it's really CREATE PROCEDURE */
3595 bool replace; /* T => replace if already exists */
3596 List *funcname; /* qualified name of function to create */
3597 List *parameters; /* a list of FunctionParameter */
3598 TypeName *returnType; /* the return type */
3599 List *options; /* a list of DefElem */
3602
3604{
3605 /* the assigned enum values appear in pg_proc, don't change 'em! */
3606 FUNC_PARAM_IN = 'i', /* input only */
3607 FUNC_PARAM_OUT = 'o', /* output only */
3608 FUNC_PARAM_INOUT = 'b', /* both */
3609 FUNC_PARAM_VARIADIC = 'v', /* variadic (always input) */
3610 FUNC_PARAM_TABLE = 't', /* table function output column */
3611 /* this is not used in pg_proc: */
3612 FUNC_PARAM_DEFAULT = 'd', /* default; effectively same as IN */
3614
3615typedef struct FunctionParameter
3616{
3618 char *name; /* parameter name, or NULL if not given */
3619 TypeName *argType; /* TypeName for parameter type */
3620 FunctionParameterMode mode; /* IN/OUT/etc */
3621 Node *defexpr; /* raw default expr, or NULL if not given */
3622 ParseLoc location; /* token location, or -1 if unknown */
3624
3625typedef struct AlterFunctionStmt
3626{
3629 ObjectWithArgs *func; /* name and args of function */
3630 List *actions; /* list of DefElem */
3632
3633/* ----------------------
3634 * DO Statement
3635 *
3636 * DoStmt is the raw parser output, InlineCodeBlock is the execution-time API
3637 * ----------------------
3638 */
3639typedef struct DoStmt
3640{
3642 List *args; /* List of DefElem nodes */
3644
3645typedef struct InlineCodeBlock
3646{
3647 pg_node_attr(nodetag_only) /* this is not a member of parse trees */
3648
3649 NodeTag type;
3650 char *source_text; /* source text of anonymous code block */
3651 Oid langOid; /* OID of selected language */
3652 bool langIsTrusted; /* trusted property of the language */
3653 bool atomic; /* atomic execution context */
3655
3656/* ----------------------
3657 * CALL statement
3658 *
3659 * OUT-mode arguments are removed from the transformed funcexpr. The outargs
3660 * list contains copies of the expressions for all output arguments, in the
3661 * order of the procedure's declared arguments. (outargs is never evaluated,
3662 * but is useful to the caller as a reference for what to assign to.)
3663 * The transformed call state is not relevant in the query jumbling, only the
3664 * function call is.
3665 * ----------------------
3666 */
3667typedef struct CallStmt
3668{
3670 /* from the parser */
3671 FuncCall *funccall pg_node_attr(query_jumble_ignore);
3672 /* transformed call, with only input args */
3674 /* transformed output-argument expressions */
3677
3678typedef struct CallContext
3679{
3680 pg_node_attr(nodetag_only) /* this is not a member of parse trees */
3681
3682 NodeTag type;
3685
3686/* ----------------------
3687 * Alter Object Rename Statement
3688 * ----------------------
3689 */
3690typedef struct RenameStmt
3691{
3693 ObjectType renameType; /* OBJECT_TABLE, OBJECT_COLUMN, etc */
3694 ObjectType relationType; /* if column name, associated relation type */
3695 RangeVar *relation; /* in case it's a table */
3696 Node *object; /* in case it's some other object */
3697 char *subname; /* name of contained object (column, rule,
3698 * trigger, etc) */
3699 char *newname; /* the new name */
3700 DropBehavior behavior; /* RESTRICT or CASCADE behavior */
3701 bool missing_ok; /* skip error if missing? */
3703
3704/* ----------------------
3705 * ALTER object DEPENDS ON EXTENSION extname
3706 * ----------------------
3707 */
3709{
3711 ObjectType objectType; /* OBJECT_FUNCTION, OBJECT_TRIGGER, etc */
3712 RangeVar *relation; /* in case a table is involved */
3713 Node *object; /* name of the object */
3714 String *extname; /* extension name */
3715 bool remove; /* set true to remove dep rather than add */
3717
3718/* ----------------------
3719 * ALTER object SET SCHEMA Statement
3720 * ----------------------
3721 */
3723{
3725 ObjectType objectType; /* OBJECT_TABLE, OBJECT_TYPE, etc */
3726 RangeVar *relation; /* in case it's a table */
3727 Node *object; /* in case it's some other object */
3728 char *newschema; /* the new schema */
3729 bool missing_ok; /* skip error if missing? */
3731
3732/* ----------------------
3733 * Alter Object Owner Statement
3734 * ----------------------
3735 */
3736typedef struct AlterOwnerStmt
3737{
3739 ObjectType objectType; /* OBJECT_TABLE, OBJECT_TYPE, etc */
3740 RangeVar *relation; /* in case it's a table */
3741 Node *object; /* in case it's some other object */
3742 RoleSpec *newowner; /* the new owner */
3744
3745/* ----------------------
3746 * Alter Operator Set ( this-n-that )
3747 * ----------------------
3748 */
3749typedef struct AlterOperatorStmt
3750{
3752 ObjectWithArgs *opername; /* operator name and argument types */
3753 List *options; /* List of DefElem nodes */
3755
3756/* ------------------------
3757 * Alter Type Set ( this-n-that )
3758 * ------------------------
3759 */
3760typedef struct AlterTypeStmt
3761{
3763 List *typeName; /* type name (possibly qualified) */
3764 List *options; /* List of DefElem nodes */
3766
3767/* ----------------------
3768 * Create Rule Statement
3769 * ----------------------
3770 */
3771typedef struct RuleStmt
3772{
3774 RangeVar *relation; /* relation the rule is for */
3775 char *rulename; /* name of the rule */
3776 Node *whereClause; /* qualifications */
3777 CmdType event; /* SELECT, INSERT, etc */
3778 bool instead; /* is a 'do instead'? */
3779 List *actions; /* the action statements */
3780 bool replace; /* OR REPLACE */
3782
3783/* ----------------------
3784 * Notify Statement
3785 * ----------------------
3786 */
3787typedef struct NotifyStmt
3788{
3790 char *conditionname; /* condition name to notify */
3791 char *payload; /* the payload string, or NULL if none */
3793
3794/* ----------------------
3795 * Listen Statement
3796 * ----------------------
3797 */
3798typedef struct ListenStmt
3799{
3801 char *conditionname; /* condition name to listen on */
3803
3804/* ----------------------
3805 * Unlisten Statement
3806 * ----------------------
3807 */
3808typedef struct UnlistenStmt
3809{
3811 char *conditionname; /* name to unlisten on, or NULL for all */
3813
3814/* ----------------------
3815 * {Begin|Commit|Rollback} Transaction Statement
3816 * ----------------------
3817 */
3819{
3821 TRANS_STMT_START, /* semantically identical to BEGIN */
3831
3832typedef struct TransactionStmt
3833{
3835 TransactionStmtKind kind; /* see above */
3836 List *options; /* for BEGIN/START commands */
3837 /* for savepoint commands */
3838 char *savepoint_name pg_node_attr(query_jumble_ignore);
3839 /* for two-phase-commit related commands */
3840 char *gid pg_node_attr(query_jumble_ignore);
3841 bool chain; /* AND CHAIN option */
3842 /* token location, or -1 if unknown */
3843 ParseLoc location pg_node_attr(query_jumble_location);
3845
3846/* ----------------------
3847 * Create Type Statement, composite types
3848 * ----------------------
3849 */
3850typedef struct CompositeTypeStmt
3851{
3853 RangeVar *typevar; /* the composite type to be created */
3854 List *coldeflist; /* list of ColumnDef nodes */
3856
3857/* ----------------------
3858 * Create Type Statement, enum types
3859 * ----------------------
3860 */
3861typedef struct CreateEnumStmt
3862{
3864 List *typeName; /* qualified name (list of String) */
3865 List *vals; /* enum values (list of String) */
3867
3868/* ----------------------
3869 * Create Type Statement, range types
3870 * ----------------------
3871 */
3872typedef struct CreateRangeStmt
3873{
3875 List *typeName; /* qualified name (list of String) */
3876 List *params; /* range parameters (list of DefElem) */
3878
3879/* ----------------------
3880 * Alter Type Statement, enum types
3881 * ----------------------
3882 */
3883typedef struct AlterEnumStmt
3884{
3886 List *typeName; /* qualified name (list of String) */
3887 char *oldVal; /* old enum value's name, if renaming */
3888 char *newVal; /* new enum value's name */
3889 char *newValNeighbor; /* neighboring enum value, if specified */
3890 bool newValIsAfter; /* place new enum value after neighbor? */
3891 bool skipIfNewValExists; /* no error if new already exists? */
3893
3894/* ----------------------
3895 * Create View Statement
3896 * ----------------------
3897 */
3899{
3904
3905typedef struct ViewStmt
3906{
3908 RangeVar *view; /* the view to be created */
3909 List *aliases; /* target column names */
3910 Node *query; /* the SELECT query (as a raw parse tree) */
3911 bool replace; /* replace an existing view? */
3912 List *options; /* options from WITH clause */
3913 ViewCheckOption withCheckOption; /* WITH CHECK OPTION */
3915
3916/* ----------------------
3917 * Load Statement
3918 * ----------------------
3919 */
3920typedef struct LoadStmt
3921{
3923 char *filename; /* file to load */
3925
3926/* ----------------------
3927 * Createdb Statement
3928 * ----------------------
3929 */
3930typedef struct CreatedbStmt
3931{
3933 char *dbname; /* name of database to create */
3934 List *options; /* List of DefElem nodes */
3936
3937/* ----------------------
3938 * Alter Database
3939 * ----------------------
3940 */
3941typedef struct AlterDatabaseStmt
3942{
3944 char *dbname; /* name of database to alter */
3945 List *options; /* List of DefElem nodes */
3947
3949{
3951 char *dbname;
3953
3955{
3957 char *dbname; /* database name */
3958 VariableSetStmt *setstmt; /* SET or RESET subcommand */
3960
3961/* ----------------------
3962 * Dropdb Statement
3963 * ----------------------
3964 */
3965typedef struct DropdbStmt
3966{
3968 char *dbname; /* database to drop */
3969 bool missing_ok; /* skip error if db is missing? */
3970 List *options; /* currently only FORCE is supported */
3972
3973/* ----------------------
3974 * Alter System Statement
3975 * ----------------------
3976 */
3977typedef struct AlterSystemStmt
3978{
3980 VariableSetStmt *setstmt; /* SET subcommand */
3982
3983/* ----------------------
3984 * Cluster Statement (support pbrown's cluster index implementation)
3985 * ----------------------
3986 */
3987typedef struct ClusterStmt
3988{
3990 RangeVar *relation; /* relation being indexed, or NULL if all */
3991 char *indexname; /* original index defined */
3992 List *params; /* list of DefElem nodes */
3994
3995/* ----------------------
3996 * Vacuum and Analyze Statements
3997 *
3998 * Even though these are nominally two statements, it's convenient to use
3999 * just one node type for both.
4000 * ----------------------
4001 */
4002typedef struct VacuumStmt
4003{
4005 List *options; /* list of DefElem nodes */
4006 List *rels; /* list of VacuumRelation, or NIL for all */
4007 bool is_vacuumcmd; /* true for VACUUM, false for ANALYZE */
4009
4010/*
4011 * Info about a single target table of VACUUM/ANALYZE.
4012 *
4013 * If the OID field is set, it always identifies the table to process.
4014 * Then the relation field can be NULL; if it isn't, it's used only to report
4015 * failure to open/lock the relation.
4016 */
4017typedef struct VacuumRelation
4018{
4020 RangeVar *relation; /* table name to process, or NULL */
4021 Oid oid; /* table's OID; InvalidOid if not looked up */
4022 List *va_cols; /* list of column names, or NIL for all */
4024
4025/* ----------------------
4026 * Explain Statement
4027 *
4028 * The "query" field is initially a raw parse tree, and is converted to a
4029 * Query node during parse analysis. Note that rewriting and planning
4030 * of the query are always postponed until execution.
4031 * ----------------------
4032 */
4033typedef struct ExplainStmt
4034{
4036 Node *query; /* the query (see comments above) */
4037 List *options; /* list of DefElem nodes */
4039
4040/* ----------------------
4041 * CREATE TABLE AS Statement (a/k/a SELECT INTO)
4042 *
4043 * A query written as CREATE TABLE AS will produce this node type natively.
4044 * A query written as SELECT ... INTO will be transformed to this form during
4045 * parse analysis.
4046 * A query written as CREATE MATERIALIZED view will produce this node type,
4047 * during parse analysis, since it needs all the same data.
4048 *
4049 * The "query" field is handled similarly to EXPLAIN, though note that it
4050 * can be a SELECT or an EXECUTE, but not other DML statements.
4051 * ----------------------
4052 */
4053typedef struct CreateTableAsStmt
4054{
4056 Node *query; /* the query (see comments above) */
4057 IntoClause *into; /* destination table */
4058 ObjectType objtype; /* OBJECT_TABLE or OBJECT_MATVIEW */
4059 bool is_select_into; /* it was written as SELECT INTO */
4060 bool if_not_exists; /* just do nothing if it already exists? */
4062
4063/* ----------------------
4064 * REFRESH MATERIALIZED VIEW Statement
4065 * ----------------------
4066 */
4068{
4070 bool concurrent; /* allow concurrent access? */
4071 bool skipData; /* true for WITH NO DATA */
4072 RangeVar *relation; /* relation to insert into */
4074
4075/* ----------------------
4076 * Checkpoint Statement
4077 * ----------------------
4078 */
4079typedef struct CheckPointStmt
4080{
4082 List *options; /* list of DefElem nodes */
4084
4085/* ----------------------
4086 * Discard Statement
4087 * ----------------------
4088 */
4089
4090typedef enum DiscardMode
4091{
4097
4098typedef struct DiscardStmt
4099{
4103
4104/* ----------------------
4105 * LOCK Statement
4106 * ----------------------
4107 */
4108typedef struct LockStmt
4109{
4111 List *relations; /* relations to lock */
4112 int mode; /* lock mode */
4113 bool nowait; /* no wait mode */
4115
4116/* ----------------------
4117 * SET CONSTRAINTS Statement
4118 * ----------------------
4119 */
4121{
4123 List *constraints; /* List of names as RangeVars */
4126
4127/* ----------------------
4128 * REINDEX Statement
4129 * ----------------------
4130 */
4132{
4134 REINDEX_OBJECT_TABLE, /* table or materialized view */
4136 REINDEX_OBJECT_SYSTEM, /* system catalogs */
4139
4140typedef struct ReindexStmt
4141{
4143 ReindexObjectType kind; /* REINDEX_OBJECT_INDEX, REINDEX_OBJECT_TABLE,
4144 * etc. */
4145 RangeVar *relation; /* Table or index to reindex */
4146 const char *name; /* name of database to reindex */
4147 List *params; /* list of DefElem nodes */
4149
4150/* ----------------------
4151 * CREATE CONVERSION Statement
4152 * ----------------------
4153 */
4155{
4157 List *conversion_name; /* Name of the conversion */
4158 char *for_encoding_name; /* source encoding name */
4159 char *to_encoding_name; /* destination encoding name */
4160 List *func_name; /* qualified conversion function name */
4161 bool def; /* is this a default conversion? */
4163
4164/* ----------------------
4165 * CREATE CAST Statement
4166 * ----------------------
4167 */
4168typedef struct CreateCastStmt
4169{
4175 bool inout;
4177
4178/* ----------------------
4179 * CREATE TRANSFORM Statement
4180 * ----------------------
4181 */
4183{
4187 char *lang;
4191
4192/* ----------------------
4193 * PREPARE Statement
4194 * ----------------------
4195 */
4196typedef struct PrepareStmt
4197{
4199 char *name; /* Name of plan, arbitrary */
4200 List *argtypes; /* Types of parameters (List of TypeName) */
4201 Node *query; /* The query itself (as a raw parsetree) */
4203
4204
4205/* ----------------------
4206 * EXECUTE Statement
4207 * ----------------------
4208 */
4209
4210typedef struct ExecuteStmt
4211{
4213 char *name; /* The name of the plan to execute */
4214 List *params; /* Values to assign to parameters */
4216
4217
4218/* ----------------------
4219 * DEALLOCATE Statement
4220 * ----------------------
4221 */
4222typedef struct DeallocateStmt
4223{
4225 /* The name of the plan to remove, NULL if DEALLOCATE ALL */
4226 char *name pg_node_attr(query_jumble_ignore);
4227
4228 /*
4229 * True if DEALLOCATE ALL. This is redundant with "name == NULL", but we
4230 * make it a separate field so that exactly this condition (and not the
4231 * precise name) will be accounted for in query jumbling.
4232 */
4233 bool isall;
4234 /* token location, or -1 if unknown */
4235 ParseLoc location pg_node_attr(query_jumble_location);
4237
4238/*
4239 * DROP OWNED statement
4240 */
4241typedef struct DropOwnedStmt
4242{
4247
4248/*
4249 * REASSIGN OWNED statement
4250 */
4251typedef struct ReassignOwnedStmt
4252{
4257
4258/*
4259 * TS Dictionary stmts: DefineStmt, RenameStmt and DropStmt are default
4260 */
4262{
4264 List *dictname; /* qualified name (list of String) */
4265 List *options; /* List of DefElem nodes */
4267
4268/*
4269 * TS Configuration stmts: DefineStmt, RenameStmt and DropStmt are default
4270 */
4272{
4279
4281{
4283 AlterTSConfigType kind; /* ALTER_TSCONFIG_ADD_MAPPING, etc */
4284 List *cfgname; /* qualified name (list of String) */
4285
4286 /*
4287 * dicts will be non-NIL if ADD/ALTER MAPPING was specified. If dicts is
4288 * NIL, but tokentype isn't, DROP MAPPING was specified.
4289 */
4290 List *tokentype; /* list of String */
4291 List *dicts; /* list of list of String */
4292 bool override; /* if true - remove old variant */
4293 bool replace; /* if true - replace dictionary by another */
4294 bool missing_ok; /* for DROP - skip error if missing? */
4296
4297typedef struct PublicationTable
4298{
4300 RangeVar *relation; /* relation to be published */
4301 Node *whereClause; /* qualifications */
4302 List *columns; /* List of columns in a publication table */
4304
4305/*
4306 * Publication object type
4307 */
4309{
4311 PUBLICATIONOBJ_TABLES_IN_SCHEMA, /* All tables in schema */
4312 PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA, /* All tables in first element of
4313 * search_path */
4314 PUBLICATIONOBJ_CONTINUATION, /* Continuation of previous type */
4316
4318{
4320 PublicationObjSpecType pubobjtype; /* type of this publication object */
4321 char *name;
4323 ParseLoc location; /* token location, or -1 if unknown */
4325
4326/*
4327 * Types of objects supported by FOR ALL publications
4328 */
4330{
4334
4336{
4338 PublicationAllObjType pubobjtype; /* type of this publication object */
4339 ParseLoc location; /* token location, or -1 if unknown */
4341
4343{
4345 char *pubname; /* Name of the publication */
4346 List *options; /* List of DefElem nodes */
4347 List *pubobjects; /* Optional list of publication objects */
4348 bool for_all_tables; /* Special publication for all tables in db */
4349 bool for_all_sequences; /* Special publication for all sequences
4350 * in db */
4352
4354{
4355 AP_AddObjects, /* add objects to publication */
4356 AP_DropObjects, /* remove objects from publication */
4357 AP_SetObjects, /* set list of objects */
4359
4361{
4363 char *pubname; /* Name of the publication */
4364
4365 /* parameters used for ALTER PUBLICATION ... WITH */
4366 List *options; /* List of DefElem nodes */
4367
4368 /*
4369 * Parameters used for ALTER PUBLICATION ... ADD/DROP/SET publication
4370 * objects.
4371 */
4372 List *pubobjects; /* Optional list of publication objects */
4373 AlterPublicationAction action; /* What action to perform with the given
4374 * objects */
4376
4378{
4380 char *subname; /* Name of the subscription */
4381 char *conninfo; /* Connection string to publisher */
4382 List *publication; /* One or more publication to subscribe to */
4383 List *options; /* List of DefElem nodes */
4385
4387{
4398
4400{
4402 AlterSubscriptionType kind; /* ALTER_SUBSCRIPTION_OPTIONS, etc */
4403 char *subname; /* Name of the subscription */
4404 char *conninfo; /* Connection string to publisher */
4405 List *publication; /* One or more publication to subscribe to */
4406 List *options; /* List of DefElem nodes */
4408
4410{
4412 char *subname; /* Name of the subscription */
4413 bool missing_ok; /* Skip error if missing? */
4414 DropBehavior behavior; /* RESTRICT or CASCADE behavior */
4416
4417typedef struct WaitStmt
4418{
4420 char *lsn_literal; /* LSN string from grammar */
4421 List *options; /* List of DefElem nodes */
4423
4424
4425#endif /* PARSENODES_H */
#define PG_INT32_MAX
Definition: c.h:608
uint32 SubTransactionId
Definition: c.h:675
int64_t int64
Definition: c.h:549
int16_t int16
Definition: c.h:547
uint32 bits32
Definition: c.h:561
int32_t int32
Definition: c.h:548
uint64_t uint64
Definition: c.h:553
unsigned int Index
Definition: c.h:633
LockWaitPolicy
Definition: lockoptions.h:37
LockClauseStrength
Definition: lockoptions.h:22
OnConflictAction
Definition: nodes.h:427
double Cardinality
Definition: nodes.h:262
CmdType
Definition: nodes.h:273
NodeTag
Definition: nodes.h:27
LimitOption
Definition: nodes.h:440
int ParseLoc
Definition: nodes.h:250
JoinType
Definition: nodes.h:298
struct AlterDatabaseRefreshCollStmt AlterDatabaseRefreshCollStmt
struct LoadStmt LoadStmt
RoleSpecType
Definition: parsenodes.h:418
@ ROLESPEC_CURRENT_USER
Definition: parsenodes.h:421
@ ROLESPEC_CSTRING
Definition: parsenodes.h:419
@ ROLESPEC_SESSION_USER
Definition: parsenodes.h:422
@ ROLESPEC_CURRENT_ROLE
Definition: parsenodes.h:420
@ ROLESPEC_PUBLIC
Definition: parsenodes.h:423
struct DropSubscriptionStmt DropSubscriptionStmt
struct CreateEnumStmt CreateEnumStmt
struct RoleSpec RoleSpec
struct CreateFunctionStmt CreateFunctionStmt
struct AlterOwnerStmt AlterOwnerStmt
struct ReturnStmt ReturnStmt
struct CreateAmStmt CreateAmStmt
AlterSubscriptionType
Definition: parsenodes.h:4387
@ ALTER_SUBSCRIPTION_REFRESH_PUBLICATION
Definition: parsenodes.h:4393
@ ALTER_SUBSCRIPTION_ENABLED
Definition: parsenodes.h:4395
@ ALTER_SUBSCRIPTION_DROP_PUBLICATION
Definition: parsenodes.h:4392
@ ALTER_SUBSCRIPTION_SET_PUBLICATION
Definition: parsenodes.h:4390
@ ALTER_SUBSCRIPTION_REFRESH_SEQUENCES
Definition: parsenodes.h:4394
@ ALTER_SUBSCRIPTION_SKIP
Definition: parsenodes.h:4396
@ ALTER_SUBSCRIPTION_OPTIONS
Definition: parsenodes.h:4388
@ ALTER_SUBSCRIPTION_CONNECTION
Definition: parsenodes.h:4389
@ ALTER_SUBSCRIPTION_ADD_PUBLICATION
Definition: parsenodes.h:4391
struct TableLikeClause TableLikeClause
PublicationAllObjType
Definition: parsenodes.h:4330
@ PUBLICATION_ALL_TABLES
Definition: parsenodes.h:4331
@ PUBLICATION_ALL_SEQUENCES
Definition: parsenodes.h:4332
struct AlterSystemStmt AlterSystemStmt
struct CopyStmt CopyStmt
AlterDomainType
Definition: parsenodes.h:2572
@ AD_AddConstraint
Definition: parsenodes.h:2576
@ AD_DropConstraint
Definition: parsenodes.h:2577
@ AD_AlterDefault
Definition: parsenodes.h:2573
@ AD_DropNotNull
Definition: parsenodes.h:2574
@ AD_ValidateConstraint
Definition: parsenodes.h:2578
@ AD_SetNotNull
Definition: parsenodes.h:2575
TransactionStmtKind
Definition: parsenodes.h:3819
@ TRANS_STMT_ROLLBACK_TO
Definition: parsenodes.h:3826
@ TRANS_STMT_START
Definition: parsenodes.h:3821
@ TRANS_STMT_SAVEPOINT
Definition: parsenodes.h:3824
@ TRANS_STMT_BEGIN
Definition: parsenodes.h:3820
@ TRANS_STMT_ROLLBACK
Definition: parsenodes.h:3823
@ TRANS_STMT_COMMIT_PREPARED
Definition: parsenodes.h:3828
@ TRANS_STMT_COMMIT
Definition: parsenodes.h:3822
@ TRANS_STMT_ROLLBACK_PREPARED
Definition: parsenodes.h:3829
@ TRANS_STMT_PREPARE
Definition: parsenodes.h:3827
@ TRANS_STMT_RELEASE
Definition: parsenodes.h:3825
struct GrantRoleStmt GrantRoleStmt
struct AlterTSDictionaryStmt AlterTSDictionaryStmt
struct OnConflictClause OnConflictClause
struct JsonTablePathSpec JsonTablePathSpec
struct AlterOperatorStmt AlterOperatorStmt
WCOKind
Definition: parsenodes.h:1416
@ WCO_RLS_MERGE_UPDATE_CHECK
Definition: parsenodes.h:1421
@ WCO_RLS_CONFLICT_CHECK
Definition: parsenodes.h:1420
@ WCO_RLS_INSERT_CHECK
Definition: parsenodes.h:1418
@ WCO_VIEW_CHECK
Definition: parsenodes.h:1417
@ WCO_RLS_UPDATE_CHECK
Definition: parsenodes.h:1419
@ WCO_RLS_MERGE_DELETE_CHECK
Definition: parsenodes.h:1422
struct RangeTblFunction RangeTblFunction
struct JsonScalarExpr JsonScalarExpr
JsonTableColumnType
Definition: parsenodes.h:1932
@ JTC_FORMATTED
Definition: parsenodes.h:1936
@ JTC_FOR_ORDINALITY
Definition: parsenodes.h:1933
@ JTC_NESTED
Definition: parsenodes.h:1937
@ JTC_EXISTS
Definition: parsenodes.h:1935
@ JTC_REGULAR
Definition: parsenodes.h:1934
struct JsonArrayAgg JsonArrayAgg
struct A_Indirection A_Indirection
struct XmlSerialize XmlSerialize
SortByNulls
Definition: parsenodes.h:53
@ SORTBY_NULLS_DEFAULT
Definition: parsenodes.h:54
@ SORTBY_NULLS_LAST
Definition: parsenodes.h:56
@ SORTBY_NULLS_FIRST
Definition: parsenodes.h:55
struct DeallocateStmt DeallocateStmt
struct CreateSeqStmt CreateSeqStmt
struct DropTableSpaceStmt DropTableSpaceStmt
struct CreateExtensionStmt CreateExtensionStmt
struct A_Indices A_Indices
struct CreateTableSpaceStmt CreateTableSpaceStmt
GroupingSetKind
Definition: parsenodes.h:1556
@ GROUPING_SET_CUBE
Definition: parsenodes.h:1560
@ GROUPING_SET_SIMPLE
Definition: parsenodes.h:1558
@ GROUPING_SET_ROLLUP
Definition: parsenodes.h:1559
@ GROUPING_SET_SETS
Definition: parsenodes.h:1561
@ GROUPING_SET_EMPTY
Definition: parsenodes.h:1557
struct ReassignOwnedStmt ReassignOwnedStmt
struct ParamRef ParamRef
struct VacuumStmt VacuumStmt
struct NotifyStmt NotifyStmt
SetOperation
Definition: parsenodes.h:2202
@ SETOP_INTERSECT
Definition: parsenodes.h:2205
@ SETOP_UNION
Definition: parsenodes.h:2204
@ SETOP_EXCEPT
Definition: parsenodes.h:2206
@ SETOP_NONE
Definition: parsenodes.h:2203
struct TriggerTransition TriggerTransition
struct ClusterStmt ClusterStmt
struct MergeStmt MergeStmt
struct SelectStmt SelectStmt
struct DropdbStmt DropdbStmt
uint64 AclMode
Definition: parsenodes.h:74
struct WaitStmt WaitStmt
struct FunctionParameter FunctionParameter
struct UnlistenStmt UnlistenStmt
struct InsertStmt InsertStmt
struct AlterFunctionStmt AlterFunctionStmt
struct StatsElem StatsElem
struct AlterRoleSetStmt AlterRoleSetStmt
struct CreateOpFamilyStmt CreateOpFamilyStmt
struct CreatePublicationStmt CreatePublicationStmt
struct InlineCodeBlock InlineCodeBlock
struct CreateDomainStmt CreateDomainStmt
struct AlterDomainStmt AlterDomainStmt
struct AlterDefaultPrivilegesStmt AlterDefaultPrivilegesStmt
struct CreateStatsStmt CreateStatsStmt
JsonQuotes
Definition: parsenodes.h:1867
@ JS_QUOTES_KEEP
Definition: parsenodes.h:1869
@ JS_QUOTES_UNSPEC
Definition: parsenodes.h:1868
@ JS_QUOTES_OMIT
Definition: parsenodes.h:1870
struct JsonOutput JsonOutput
struct UpdateStmt UpdateStmt
struct AlterObjectDependsStmt AlterObjectDependsStmt
struct IndexElem IndexElem
struct AlterCollationStmt AlterCollationStmt
A_Expr_Kind
Definition: parsenodes.h:329
@ AEXPR_BETWEEN
Definition: parsenodes.h:340
@ AEXPR_NULLIF
Definition: parsenodes.h:335
@ AEXPR_NOT_DISTINCT
Definition: parsenodes.h:334
@ AEXPR_BETWEEN_SYM
Definition: parsenodes.h:342
@ AEXPR_NOT_BETWEEN_SYM
Definition: parsenodes.h:343
@ AEXPR_ILIKE
Definition: parsenodes.h:338
@ AEXPR_IN
Definition: parsenodes.h:336
@ AEXPR_NOT_BETWEEN
Definition: parsenodes.h:341
@ AEXPR_DISTINCT
Definition: parsenodes.h:333
@ AEXPR_SIMILAR
Definition: parsenodes.h:339
@ AEXPR_LIKE
Definition: parsenodes.h:337
@ AEXPR_OP
Definition: parsenodes.h:330
@ AEXPR_OP_ANY
Definition: parsenodes.h:331
@ AEXPR_OP_ALL
Definition: parsenodes.h:332
FunctionParameterMode
Definition: parsenodes.h:3604
@ FUNC_PARAM_IN
Definition: parsenodes.h:3606
@ FUNC_PARAM_DEFAULT
Definition: parsenodes.h:3612
@ FUNC_PARAM_OUT
Definition: parsenodes.h:3607
@ FUNC_PARAM_INOUT
Definition: parsenodes.h:3608
@ FUNC_PARAM_TABLE
Definition: parsenodes.h:3610
@ FUNC_PARAM_VARIADIC
Definition: parsenodes.h:3609
struct CreateForeignTableStmt CreateForeignTableStmt
struct CreateOpClassStmt CreateOpClassStmt
struct PublicationAllObjSpec PublicationAllObjSpec
struct JsonObjectConstructor JsonObjectConstructor
AlterTSConfigType
Definition: parsenodes.h:4272
@ ALTER_TSCONFIG_ALTER_MAPPING_FOR_TOKEN
Definition: parsenodes.h:4274
@ ALTER_TSCONFIG_REPLACE_DICT_FOR_TOKEN
Definition: parsenodes.h:4276
@ ALTER_TSCONFIG_REPLACE_DICT
Definition: parsenodes.h:4275
@ ALTER_TSCONFIG_ADD_MAPPING
Definition: parsenodes.h:4273
@ ALTER_TSCONFIG_DROP_MAPPING
Definition: parsenodes.h:4277
struct AlterForeignServerStmt AlterForeignServerStmt
struct ColumnDef ColumnDef
struct CreatedbStmt CreatedbStmt
struct RTEPermissionInfo RTEPermissionInfo
struct AlterEventTrigStmt AlterEventTrigStmt
struct IndexStmt IndexStmt
struct PartitionCmd PartitionCmd
PublicationObjSpecType
Definition: parsenodes.h:4309
@ PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA
Definition: parsenodes.h:4312
@ PUBLICATIONOBJ_TABLES_IN_SCHEMA
Definition: parsenodes.h:4311
@ PUBLICATIONOBJ_TABLE
Definition: parsenodes.h:4310
@ PUBLICATIONOBJ_CONTINUATION
Definition: parsenodes.h:4314
struct JsonArrayConstructor JsonArrayConstructor
PartitionStrategy
Definition: parsenodes.h:900
@ PARTITION_STRATEGY_HASH
Definition: parsenodes.h:903
@ PARTITION_STRATEGY_LIST
Definition: parsenodes.h:901
@ PARTITION_STRATEGY_RANGE
Definition: parsenodes.h:902
ImportForeignSchemaType
Definition: parsenodes.h:3072
@ FDW_IMPORT_SCHEMA_LIMIT_TO
Definition: parsenodes.h:3074
@ FDW_IMPORT_SCHEMA_ALL
Definition: parsenodes.h:3073
@ FDW_IMPORT_SCHEMA_EXCEPT
Definition: parsenodes.h:3075
struct AlterRoleStmt AlterRoleStmt
struct MergeWhenClause MergeWhenClause
struct WindowDef WindowDef
struct CommentStmt CommentStmt
AlterPublicationAction
Definition: parsenodes.h:4354
@ AP_DropObjects
Definition: parsenodes.h:4356
@ AP_SetObjects
Definition: parsenodes.h:4357
@ AP_AddObjects
Definition: parsenodes.h:4355
struct JsonArgument JsonArgument
struct Query Query
struct JsonArrayQueryConstructor JsonArrayQueryConstructor
QuerySource
Definition: parsenodes.h:35
@ QSRC_NON_INSTEAD_RULE
Definition: parsenodes.h:40
@ QSRC_PARSER
Definition: parsenodes.h:37
@ QSRC_QUAL_INSTEAD_RULE
Definition: parsenodes.h:39
@ QSRC_ORIGINAL
Definition: parsenodes.h:36
@ QSRC_INSTEAD_RULE
Definition: parsenodes.h:38
struct WithClause WithClause
struct AlterObjectSchemaStmt AlterObjectSchemaStmt
struct SinglePartitionSpec SinglePartitionSpec
struct MultiAssignRef MultiAssignRef
struct ImportForeignSchemaStmt ImportForeignSchemaStmt
struct ReturningOption ReturningOption
struct ReindexStmt ReindexStmt
struct CreateSubscriptionStmt CreateSubscriptionStmt
struct JsonTableColumn JsonTableColumn
struct A_Const A_Const
struct DeleteStmt DeleteStmt
RTEKind
Definition: parsenodes.h:1069
@ RTE_JOIN
Definition: parsenodes.h:1072
@ RTE_CTE
Definition: parsenodes.h:1076
@ RTE_NAMEDTUPLESTORE
Definition: parsenodes.h:1077
@ RTE_VALUES
Definition: parsenodes.h:1075
@ RTE_SUBQUERY
Definition: parsenodes.h:1071
@ RTE_RESULT
Definition: parsenodes.h:1078
@ RTE_FUNCTION
Definition: parsenodes.h:1073
@ RTE_TABLEFUNC
Definition: parsenodes.h:1074
@ RTE_GROUP
Definition: parsenodes.h:1081
@ RTE_RELATION
Definition: parsenodes.h:1070
struct AlterSubscriptionStmt AlterSubscriptionStmt
struct AlterStatsStmt AlterStatsStmt
struct AlterPublicationStmt AlterPublicationStmt
struct RangeFunction RangeFunction
struct PLAssignStmt PLAssignStmt
DefElemAction
Definition: parsenodes.h:833
@ DEFELEM_UNSPEC
Definition: parsenodes.h:834
@ DEFELEM_DROP
Definition: parsenodes.h:837
@ DEFELEM_SET
Definition: parsenodes.h:835
@ DEFELEM_ADD
Definition: parsenodes.h:836
struct ColumnRef ColumnRef
ConstrType
Definition: parsenodes.h:2827
@ CONSTR_ATTR_ENFORCED
Definition: parsenodes.h:2843
@ CONSTR_FOREIGN
Definition: parsenodes.h:2838
@ CONSTR_ATTR_DEFERRED
Definition: parsenodes.h:2841
@ CONSTR_IDENTITY
Definition: parsenodes.h:2832
@ CONSTR_UNIQUE
Definition: parsenodes.h:2836
@ CONSTR_ATTR_NOT_DEFERRABLE
Definition: parsenodes.h:2840
@ CONSTR_DEFAULT
Definition: parsenodes.h:2831
@ CONSTR_NOTNULL
Definition: parsenodes.h:2830
@ CONSTR_ATTR_IMMEDIATE
Definition: parsenodes.h:2842
@ CONSTR_CHECK
Definition: parsenodes.h:2834
@ CONSTR_NULL
Definition: parsenodes.h:2828
@ CONSTR_GENERATED
Definition: parsenodes.h:2833
@ CONSTR_EXCLUSION
Definition: parsenodes.h:2837
@ CONSTR_ATTR_DEFERRABLE
Definition: parsenodes.h:2839
@ CONSTR_ATTR_NOT_ENFORCED
Definition: parsenodes.h:2844
@ CONSTR_PRIMARY
Definition: parsenodes.h:2835
PartitionRangeDatumKind
Definition: parsenodes.h:952
@ PARTITION_RANGE_DATUM_MAXVALUE
Definition: parsenodes.h:955
@ PARTITION_RANGE_DATUM_VALUE
Definition: parsenodes.h:954
@ PARTITION_RANGE_DATUM_MINVALUE
Definition: parsenodes.h:953
struct GroupingSet GroupingSet
struct CreatePolicyStmt CreatePolicyStmt
FetchDirection
Definition: parsenodes.h:3451
@ FETCH_RELATIVE
Definition: parsenodes.h:3457
@ FETCH_ABSOLUTE
Definition: parsenodes.h:3456
@ FETCH_FORWARD
Definition: parsenodes.h:3453
@ FETCH_BACKWARD
Definition: parsenodes.h:3454
VariableSetKind
Definition: parsenodes.h:2722
@ VAR_SET_DEFAULT
Definition: parsenodes.h:2724
@ VAR_RESET
Definition: parsenodes.h:2727
@ VAR_SET_MULTI
Definition: parsenodes.h:2726
@ VAR_SET_VALUE
Definition: parsenodes.h:2723
@ VAR_SET_CURRENT
Definition: parsenodes.h:2725
@ VAR_RESET_ALL
Definition: parsenodes.h:2728
DropBehavior
Definition: parsenodes.h:2424
@ DROP_CASCADE
Definition: parsenodes.h:2426
@ DROP_RESTRICT
Definition: parsenodes.h:2425
ObjectType
Definition: parsenodes.h:2351
@ OBJECT_EVENT_TRIGGER
Definition: parsenodes.h:2366
@ OBJECT_FDW
Definition: parsenodes.h:2368
@ OBJECT_TSPARSER
Definition: parsenodes.h:2399
@ OBJECT_COLLATION
Definition: parsenodes.h:2359
@ OBJECT_USER_MAPPING
Definition: parsenodes.h:2402
@ OBJECT_ACCESS_METHOD
Definition: parsenodes.h:2352
@ OBJECT_OPCLASS
Definition: parsenodes.h:2376
@ OBJECT_DEFACL
Definition: parsenodes.h:2363
@ OBJECT_AGGREGATE
Definition: parsenodes.h:2353
@ OBJECT_MATVIEW
Definition: parsenodes.h:2375
@ OBJECT_SCHEMA
Definition: parsenodes.h:2388
@ OBJECT_POLICY
Definition: parsenodes.h:2380
@ OBJECT_OPERATOR
Definition: parsenodes.h:2377
@ OBJECT_FOREIGN_TABLE
Definition: parsenodes.h:2370
@ OBJECT_TSCONFIGURATION
Definition: parsenodes.h:2397
@ OBJECT_OPFAMILY
Definition: parsenodes.h:2378
@ OBJECT_DOMAIN
Definition: parsenodes.h:2364
@ OBJECT_COLUMN
Definition: parsenodes.h:2358
@ OBJECT_TABLESPACE
Definition: parsenodes.h:2394
@ OBJECT_ROLE
Definition: parsenodes.h:2385
@ OBJECT_ROUTINE
Definition: parsenodes.h:2386
@ OBJECT_LARGEOBJECT
Definition: parsenodes.h:2374
@ OBJECT_PUBLICATION_NAMESPACE
Definition: parsenodes.h:2383
@ OBJECT_PROCEDURE
Definition: parsenodes.h:2381
@ OBJECT_EXTENSION
Definition: parsenodes.h:2367
@ OBJECT_INDEX
Definition: parsenodes.h:2372
@ OBJECT_DEFAULT
Definition: parsenodes.h:2362
@ OBJECT_DATABASE
Definition: parsenodes.h:2361
@ OBJECT_SEQUENCE
Definition: parsenodes.h:2389
@ OBJECT_TSTEMPLATE
Definition: parsenodes.h:2400
@ OBJECT_LANGUAGE
Definition: parsenodes.h:2373
@ OBJECT_AMOP
Definition: parsenodes.h:2354
@ OBJECT_PUBLICATION_REL
Definition: parsenodes.h:2384
@ OBJECT_FOREIGN_SERVER
Definition: parsenodes.h:2369
@ OBJECT_TSDICTIONARY
Definition: parsenodes.h:2398
@ OBJECT_ATTRIBUTE
Definition: parsenodes.h:2356
@ OBJECT_PUBLICATION
Definition: parsenodes.h:2382
@ OBJECT_RULE
Definition: parsenodes.h:2387
@ OBJECT_CONVERSION
Definition: parsenodes.h:2360
@ OBJECT_AMPROC
Definition: parsenodes.h:2355
@ OBJECT_TABLE
Definition: parsenodes.h:2393
@ OBJECT_VIEW
Definition: parsenodes.h:2403
@ OBJECT_PARAMETER_ACL
Definition: parsenodes.h:2379
@ OBJECT_TYPE
Definition: parsenodes.h:2401
@ OBJECT_FUNCTION
Definition: parsenodes.h:2371
@ OBJECT_TABCONSTRAINT
Definition: parsenodes.h:2392
@ OBJECT_DOMCONSTRAINT
Definition: parsenodes.h:2365
@ OBJECT_SUBSCRIPTION
Definition: parsenodes.h:2390
@ OBJECT_STATISTIC_EXT
Definition: parsenodes.h:2391
@ OBJECT_CAST
Definition: parsenodes.h:2357
@ OBJECT_TRIGGER
Definition: parsenodes.h:2396
@ OBJECT_TRANSFORM
Definition: parsenodes.h:2395
struct ListenStmt ListenStmt
struct A_Star A_Star
struct PublicationObjSpec PublicationObjSpec
struct AlterTableSpaceOptionsStmt AlterTableSpaceOptionsStmt
struct CreateRoleStmt CreateRoleStmt
struct AlterTableCmd AlterTableCmd
struct RangeTableSample RangeTableSample
struct DropUserMappingStmt DropUserMappingStmt
ReindexObjectType
Definition: parsenodes.h:4132
@ REINDEX_OBJECT_DATABASE
Definition: parsenodes.h:4137
@ REINDEX_OBJECT_INDEX
Definition: parsenodes.h:4133
@ REINDEX_OBJECT_SCHEMA
Definition: parsenodes.h:4135
@ REINDEX_OBJECT_SYSTEM
Definition: parsenodes.h:4136
@ REINDEX_OBJECT_TABLE
Definition: parsenodes.h:4134
struct CreateForeignServerStmt CreateForeignServerStmt
struct LockingClause LockingClause
AlterTableType
Definition: parsenodes.h:2443
@ AT_AddIndexConstraint
Definition: parsenodes.h:2465
@ AT_MergePartitions
Definition: parsenodes.h:2507
@ AT_DropOf
Definition: parsenodes.h:2496
@ AT_SetOptions
Definition: parsenodes.h:2453
@ AT_DropIdentity
Definition: parsenodes.h:2510
@ AT_DisableTrigUser
Definition: parsenodes.h:2488
@ AT_DropNotNull
Definition: parsenodes.h:2448
@ AT_AddOf
Definition: parsenodes.h:2495
@ AT_ResetOptions
Definition: parsenodes.h:2454
@ AT_ReplicaIdentity
Definition: parsenodes.h:2497
@ AT_ReplaceRelOptions
Definition: parsenodes.h:2480
@ AT_EnableRowSecurity
Definition: parsenodes.h:2498
@ AT_AddColumnToView
Definition: parsenodes.h:2445
@ AT_ResetRelOptions
Definition: parsenodes.h:2479
@ AT_EnableReplicaTrig
Definition: parsenodes.h:2483
@ AT_DropOids
Definition: parsenodes.h:2475
@ AT_SetIdentity
Definition: parsenodes.h:2509
@ AT_ReAddStatistics
Definition: parsenodes.h:2511
@ AT_SetUnLogged
Definition: parsenodes.h:2474
@ AT_DisableTrig
Definition: parsenodes.h:2484
@ AT_SetCompression
Definition: parsenodes.h:2456
@ AT_DropExpression
Definition: parsenodes.h:2451
@ AT_AddIndex
Definition: parsenodes.h:2458
@ AT_EnableReplicaRule
Definition: parsenodes.h:2491
@ AT_ReAddIndex
Definition: parsenodes.h:2459
@ AT_DropConstraint
Definition: parsenodes.h:2466
@ AT_SetNotNull
Definition: parsenodes.h:2449
@ AT_ClusterOn
Definition: parsenodes.h:2471
@ AT_AddIdentity
Definition: parsenodes.h:2508
@ AT_ForceRowSecurity
Definition: parsenodes.h:2500
@ AT_EnableAlwaysRule
Definition: parsenodes.h:2490
@ AT_SetAccessMethod
Definition: parsenodes.h:2476
@ AT_AlterColumnType
Definition: parsenodes.h:2468
@ AT_DetachPartitionFinalize
Definition: parsenodes.h:2505
@ AT_AddInherit
Definition: parsenodes.h:2493
@ AT_ReAddDomainConstraint
Definition: parsenodes.h:2462
@ AT_EnableTrig
Definition: parsenodes.h:2481
@ AT_DropColumn
Definition: parsenodes.h:2457
@ AT_ReAddComment
Definition: parsenodes.h:2467
@ AT_AlterColumnGenericOptions
Definition: parsenodes.h:2469
@ AT_DisableTrigAll
Definition: parsenodes.h:2486
@ AT_EnableRule
Definition: parsenodes.h:2489
@ AT_NoForceRowSecurity
Definition: parsenodes.h:2501
@ AT_DetachPartition
Definition: parsenodes.h:2504
@ AT_SetStatistics
Definition: parsenodes.h:2452
@ AT_AttachPartition
Definition: parsenodes.h:2503
@ AT_AddConstraint
Definition: parsenodes.h:2460
@ AT_DropInherit
Definition: parsenodes.h:2494
@ AT_EnableAlwaysTrig
Definition: parsenodes.h:2482
@ AT_SetLogged
Definition: parsenodes.h:2473
@ AT_SetStorage
Definition: parsenodes.h:2455
@ AT_DisableRule
Definition: parsenodes.h:2492
@ AT_DisableRowSecurity
Definition: parsenodes.h:2499
@ AT_SetRelOptions
Definition: parsenodes.h:2478
@ AT_ChangeOwner
Definition: parsenodes.h:2470
@ AT_EnableTrigUser
Definition: parsenodes.h:2487
@ AT_SetExpression
Definition: parsenodes.h:2450
@ AT_ReAddConstraint
Definition: parsenodes.h:2461
@ AT_SetTableSpace
Definition: parsenodes.h:2477
@ AT_GenericOptions
Definition: parsenodes.h:2502
@ AT_ColumnDefault
Definition: parsenodes.h:2446
@ AT_CookedColumnDefault
Definition: parsenodes.h:2447
@ AT_AlterConstraint
Definition: parsenodes.h:2463
@ AT_EnableTrigAll
Definition: parsenodes.h:2485
@ AT_SplitPartition
Definition: parsenodes.h:2506
@ AT_DropCluster
Definition: parsenodes.h:2472
@ AT_ValidateConstraint
Definition: parsenodes.h:2464
@ AT_AddColumn
Definition: parsenodes.h:2444
struct WithCheckOption WithCheckOption
struct LockStmt LockStmt
GrantTargetType
Definition: parsenodes.h:2598
@ ACL_TARGET_DEFAULTS
Definition: parsenodes.h:2601
@ ACL_TARGET_OBJECT
Definition: parsenodes.h:2599
@ ACL_TARGET_ALL_IN_SCHEMA
Definition: parsenodes.h:2600
struct CreateEventTrigStmt CreateEventTrigStmt
struct JsonObjectAgg JsonObjectAgg
struct DropOwnedStmt DropOwnedStmt
struct VariableShowStmt VariableShowStmt
struct CreateTransformStmt CreateTransformStmt
struct AlterUserMappingStmt AlterUserMappingStmt
struct PartitionRangeDatum PartitionRangeDatum
struct A_ArrayExpr A_ArrayExpr
FetchDirectionKeywords
Definition: parsenodes.h:3461
@ FETCH_KEYWORD_LAST
Definition: parsenodes.h:3466
@ FETCH_KEYWORD_RELATIVE
Definition: parsenodes.h:3468
@ FETCH_KEYWORD_PRIOR
Definition: parsenodes.h:3464
@ FETCH_KEYWORD_FIRST
Definition: parsenodes.h:3465
@ FETCH_KEYWORD_NEXT
Definition: parsenodes.h:3463
@ FETCH_KEYWORD_FORWARD_ALL
Definition: parsenodes.h:3471
@ FETCH_KEYWORD_NONE
Definition: parsenodes.h:3462
@ FETCH_KEYWORD_ABSOLUTE
Definition: parsenodes.h:3467
@ FETCH_KEYWORD_FORWARD
Definition: parsenodes.h:3470
@ FETCH_KEYWORD_BACKWARD
Definition: parsenodes.h:3472
@ FETCH_KEYWORD_ALL
Definition: parsenodes.h:3469
@ FETCH_KEYWORD_BACKWARD_ALL
Definition: parsenodes.h:3473
struct JsonFuncExpr JsonFuncExpr
struct RangeTableFunc RangeTableFunc
struct InferClause InferClause
struct RangeSubselect RangeSubselect
struct DropStmt DropStmt
struct CreateOpClassItem CreateOpClassItem
struct PrepareStmt PrepareStmt
struct AlterOpFamilyStmt AlterOpFamilyStmt
struct ConstraintsSetStmt ConstraintsSetStmt
struct JsonParseExpr JsonParseExpr
struct GrantStmt GrantStmt
struct A_Expr A_Expr
struct SetOperationStmt SetOperationStmt
struct SortBy SortBy
struct ViewStmt ViewStmt
struct CreateTrigStmt CreateTrigStmt
struct CTECycleClause CTECycleClause
struct VacuumRelation VacuumRelation
struct RenameStmt RenameStmt
struct DefineStmt DefineStmt
struct CreateStmt CreateStmt
struct CreateSchemaStmt CreateSchemaStmt
DiscardMode
Definition: parsenodes.h:4091
@ DISCARD_ALL
Definition: parsenodes.h:4092
@ DISCARD_PLANS
Definition: parsenodes.h:4093
@ DISCARD_SEQUENCES
Definition: parsenodes.h:4094
@ DISCARD_TEMP
Definition: parsenodes.h:4095
struct VariableSetStmt VariableSetStmt
struct JsonAggConstructor JsonAggConstructor
struct RawStmt RawStmt
struct CommonTableExpr CommonTableExpr
struct TableSampleClause TableSampleClause
struct AlterPolicyStmt AlterPolicyStmt
struct CreateConversionStmt CreateConversionStmt
struct ResTarget ResTarget
struct DropRoleStmt DropRoleStmt
struct DiscardStmt DiscardStmt
struct ReturningClause ReturningClause
struct JsonKeyValue JsonKeyValue
struct AlterExtensionStmt AlterExtensionStmt
ReturningOptionKind
Definition: parsenodes.h:1794
@ RETURNING_OPTION_NEW
Definition: parsenodes.h:1796
@ RETURNING_OPTION_OLD
Definition: parsenodes.h:1795
struct AlterTableStmt AlterTableStmt
struct TypeCast TypeCast
struct PartitionElem PartitionElem
struct ClosePortalStmt ClosePortalStmt
struct AccessPriv AccessPriv
struct Constraint Constraint
struct CreatePLangStmt CreatePLangStmt
struct CreateRangeStmt CreateRangeStmt
struct CreateUserMappingStmt CreateUserMappingStmt
SortByDir
Definition: parsenodes.h:45
@ SORTBY_USING
Definition: parsenodes.h:49
@ SORTBY_DESC
Definition: parsenodes.h:48
@ SORTBY_ASC
Definition: parsenodes.h:47
@ SORTBY_DEFAULT
Definition: parsenodes.h:46
struct AlterDatabaseSetStmt AlterDatabaseSetStmt
struct AlterTableMoveAllStmt AlterTableMoveAllStmt
struct AlterSeqStmt AlterSeqStmt
struct PublicationTable PublicationTable
struct RowMarkClause RowMarkClause
struct CreateTableAsStmt CreateTableAsStmt
struct TransactionStmt TransactionStmt
struct CreateFdwStmt CreateFdwStmt
struct DeclareCursorStmt DeclareCursorStmt
struct ExecuteStmt ExecuteStmt
struct WindowClause WindowClause
RoleStmtType
Definition: parsenodes.h:3209
@ ROLESTMT_ROLE
Definition: parsenodes.h:3210
@ ROLESTMT_USER
Definition: parsenodes.h:3211
@ ROLESTMT_GROUP
Definition: parsenodes.h:3212
struct RuleStmt RuleStmt
struct SecLabelStmt SecLabelStmt
struct AlterTSConfigurationStmt AlterTSConfigurationStmt
struct AlterDatabaseStmt AlterDatabaseStmt
struct AlterExtensionContentsStmt AlterExtensionContentsStmt
TableLikeOption
Definition: parsenodes.h:788
@ CREATE_TABLE_LIKE_COMMENTS
Definition: parsenodes.h:789
@ CREATE_TABLE_LIKE_GENERATED
Definition: parsenodes.h:793
@ CREATE_TABLE_LIKE_IDENTITY
Definition: parsenodes.h:794
@ CREATE_TABLE_LIKE_COMPRESSION
Definition: parsenodes.h:790
@ CREATE_TABLE_LIKE_STORAGE
Definition: parsenodes.h:797
@ CREATE_TABLE_LIKE_ALL
Definition: parsenodes.h:798
@ CREATE_TABLE_LIKE_INDEXES
Definition: parsenodes.h:795
@ CREATE_TABLE_LIKE_DEFAULTS
Definition: parsenodes.h:792
@ CREATE_TABLE_LIKE_STATISTICS
Definition: parsenodes.h:796
@ CREATE_TABLE_LIKE_CONSTRAINTS
Definition: parsenodes.h:791
struct TypeName TypeName
struct AlterEnumStmt AlterEnumStmt
struct CreateCastStmt CreateCastStmt
struct CheckPointStmt CheckPointStmt
struct RefreshMatViewStmt RefreshMatViewStmt
struct CallStmt CallStmt
struct TruncateStmt TruncateStmt
struct DefElem DefElem
struct AlterFdwStmt AlterFdwStmt
struct RangeTblEntry RangeTblEntry
SetQuantifier
Definition: parsenodes.h:61
@ SET_QUANTIFIER_ALL
Definition: parsenodes.h:63
@ SET_QUANTIFIER_DISTINCT
Definition: parsenodes.h:64
@ SET_QUANTIFIER_DEFAULT
Definition: parsenodes.h:62
ViewCheckOption
Definition: parsenodes.h:3899
@ NO_CHECK_OPTION
Definition: parsenodes.h:3900
@ CASCADED_CHECK_OPTION
Definition: parsenodes.h:3902
@ LOCAL_CHECK_OPTION
Definition: parsenodes.h:3901
struct FuncCall FuncCall
struct RangeTableFuncCol RangeTableFuncCol
struct SortGroupClause SortGroupClause
struct CollateClause CollateClause
struct ExplainStmt ExplainStmt
struct AlterTypeStmt AlterTypeStmt
CTEMaterialize
Definition: parsenodes.h:1695
@ CTEMaterializeNever
Definition: parsenodes.h:1698
@ CTEMaterializeAlways
Definition: parsenodes.h:1697
@ CTEMaterializeDefault
Definition: parsenodes.h:1696
struct CallContext CallContext
struct ObjectWithArgs ObjectWithArgs
struct ReplicaIdentityStmt ReplicaIdentityStmt
struct DoStmt DoStmt
struct ATAlterConstraint ATAlterConstraint
struct CompositeTypeStmt CompositeTypeStmt
struct JsonTable JsonTable
struct FetchStmt FetchStmt
struct JsonSerializeExpr JsonSerializeExpr
struct PartitionSpec PartitionSpec
struct CTESearchClause CTESearchClause
unsigned int Oid
Definition: postgres_ext.h:32
XmlOptionType
Definition: primnodes.h:1616
JsonWrapper
Definition: primnodes.h:1774
OnCommitAction
Definition: primnodes.h:57
JsonExprOp
Definition: primnodes.h:1826
CoercionForm
Definition: primnodes.h:765
OverridingKind
Definition: primnodes.h:27
MergeMatchKind
Definition: primnodes.h:2020
CoercionContext
Definition: primnodes.h:745
Oid RelFileNumber
Definition: relpath.h:25
NodeTag type
Definition: parsenodes.h:517
List * elements
Definition: parsenodes.h:518
ParseLoc list_start
Definition: parsenodes.h:519
ParseLoc list_end
Definition: parsenodes.h:520
ParseLoc location
Definition: parsenodes.h:521
bool isnull
Definition: parsenodes.h:388
union ValUnion val
Definition: parsenodes.h:387
ParseLoc location
Definition: parsenodes.h:389
pg_node_attr(custom_copy_equal, custom_read_write, custom_query_jumble) NodeTag type
ParseLoc location
Definition: parsenodes.h:363
ParseLoc rexpr_list_end
Definition: parsenodes.h:362
Node * lexpr
Definition: parsenodes.h:353
ParseLoc rexpr_list_start
Definition: parsenodes.h:361
pg_node_attr(custom_read_write) NodeTag type
List * name
Definition: parsenodes.h:352
A_Expr_Kind kind
Definition: parsenodes.h:351
Node * rexpr
Definition: parsenodes.h:354
bool is_slice
Definition: parsenodes.h:485
Node * uidx
Definition: parsenodes.h:487
NodeTag type
Definition: parsenodes.h:484
Node * lidx
Definition: parsenodes.h:486
NodeTag type
Definition: parsenodes.h:507
List * indirection
Definition: parsenodes.h:509
NodeTag type
Definition: parsenodes.h:473
char * priv_name
Definition: parsenodes.h:2656
NodeTag type
Definition: parsenodes.h:2655
List * cols
Definition: parsenodes.h:2657
VariableSetStmt * setstmt
Definition: parsenodes.h:3958
AlterDomainType subtype
Definition: parsenodes.h:2584
DropBehavior behavior
Definition: parsenodes.h:2588
char * newValNeighbor
Definition: parsenodes.h:3889
List * typeName
Definition: parsenodes.h:3886
bool skipIfNewValExists
Definition: parsenodes.h:3891
bool newValIsAfter
Definition: parsenodes.h:3890
NodeTag type
Definition: parsenodes.h:3885
List * func_options
Definition: parsenodes.h:2995
List * options
Definition: parsenodes.h:2996
char * fdwname
Definition: parsenodes.h:2994
NodeTag type
Definition: parsenodes.h:2993
ObjectWithArgs * func
Definition: parsenodes.h:3629
ObjectType objtype
Definition: parsenodes.h:3628
ObjectWithArgs * opername
Definition: parsenodes.h:3752
RangeVar * relation
Definition: parsenodes.h:3740
RoleSpec * newowner
Definition: parsenodes.h:3742
ObjectType objectType
Definition: parsenodes.h:3739
char * policy_name
Definition: parsenodes.h:3112
RangeVar * table
Definition: parsenodes.h:3113
AlterPublicationAction action
Definition: parsenodes.h:4373
RoleSpec * role
Definition: parsenodes.h:3234
VariableSetStmt * setstmt
Definition: parsenodes.h:3236
List * options
Definition: parsenodes.h:3227
NodeTag type
Definition: parsenodes.h:3225
RoleSpec * role
Definition: parsenodes.h:3226
List * options
Definition: parsenodes.h:3265
RangeVar * sequence
Definition: parsenodes.h:3264
bool for_identity
Definition: parsenodes.h:3266
NodeTag type
Definition: parsenodes.h:3263
Node * stxstattarget
Definition: parsenodes.h:3583
AlterSubscriptionType kind
Definition: parsenodes.h:4402
VariableSetStmt * setstmt
Definition: parsenodes.h:3980
AlterTSConfigType kind
Definition: parsenodes.h:4283
NodeTag type
Definition: parsenodes.h:2516
RoleSpec * newowner
Definition: parsenodes.h:2522
DropBehavior behavior
Definition: parsenodes.h:2525
AlterTableType subtype
Definition: parsenodes.h:2517
RangeVar * relation
Definition: parsenodes.h:2436
ObjectType objtype
Definition: parsenodes.h:2438
List * options
Definition: parsenodes.h:3764
List * typeName
Definition: parsenodes.h:3763
NodeTag type
Definition: parsenodes.h:3762
Definition: value.h:56
char * cycle_path_column
Definition: parsenodes.h:1717
ParseLoc location
Definition: parsenodes.h:1718
Node * cycle_mark_default
Definition: parsenodes.h:1716
Oid cycle_mark_collation
Definition: parsenodes.h:1722
List * cycle_col_list
Definition: parsenodes.h:1713
char * cycle_mark_column
Definition: parsenodes.h:1714
Node * cycle_mark_value
Definition: parsenodes.h:1715
ParseLoc location
Definition: parsenodes.h:1707
char * search_seq_column
Definition: parsenodes.h:1706
bool search_breadth_first
Definition: parsenodes.h:1705
List * search_col_list
Definition: parsenodes.h:1704
pg_node_attr(nodetag_only) NodeTag type
FuncExpr * funcexpr
Definition: parsenodes.h:3673
NodeTag type
Definition: parsenodes.h:3669
List * outargs
Definition: parsenodes.h:3675
FuncCall *funccall pg_node_attr(query_jumble_ignore)
char * indexname
Definition: parsenodes.h:3991
RangeVar * relation
Definition: parsenodes.h:3990
NodeTag type
Definition: parsenodes.h:3989
List * params
Definition: parsenodes.h:3992
List * collname
Definition: parsenodes.h:410
ParseLoc location
Definition: parsenodes.h:411
NodeTag type
Definition: parsenodes.h:408
bool is_not_null
Definition: parsenodes.h:759
CollateClause * collClause
Definition: parsenodes.h:769
char identity
Definition: parsenodes.h:765
RangeVar * identitySequence
Definition: parsenodes.h:766
List * constraints
Definition: parsenodes.h:771
Node * cooked_default
Definition: parsenodes.h:764
char * storage_name
Definition: parsenodes.h:762
char * colname
Definition: parsenodes.h:754
TypeName * typeName
Definition: parsenodes.h:755
char generated
Definition: parsenodes.h:768
NodeTag type
Definition: parsenodes.h:753
bool is_from_type
Definition: parsenodes.h:760
List * fdwoptions
Definition: parsenodes.h:772
Node * raw_default
Definition: parsenodes.h:763
char storage
Definition: parsenodes.h:761
Oid collOid
Definition: parsenodes.h:770
bool is_local
Definition: parsenodes.h:758
int16 inhcount
Definition: parsenodes.h:757
char * compression
Definition: parsenodes.h:756
ParseLoc location
Definition: parsenodes.h:773
ParseLoc location
Definition: parsenodes.h:312
List * fields
Definition: parsenodes.h:311
NodeTag type
Definition: parsenodes.h:310
char * comment
Definition: parsenodes.h:3391
ObjectType objtype
Definition: parsenodes.h:3389
NodeTag type
Definition: parsenodes.h:3388
Node * object
Definition: parsenodes.h:3390
int cterefcount pg_node_attr(query_jumble_ignore)
List *aliascolnames pg_node_attr(query_jumble_ignore)
List *ctecoltypes pg_node_attr(query_jumble_ignore)
CTECycleClause *cycle_clause pg_node_attr(query_jumble_ignore)
List *ctecoltypmods pg_node_attr(query_jumble_ignore)
CTESearchClause *search_clause pg_node_attr(query_jumble_ignore)
CTEMaterialize ctematerialized
Definition: parsenodes.h:1737
List *ctecolnames pg_node_attr(query_jumble_ignore)
List *ctecolcollations pg_node_attr(query_jumble_ignore)
ParseLoc location
Definition: parsenodes.h:1742
bool cterecursive pg_node_attr(query_jumble_ignore)
RangeVar * typevar
Definition: parsenodes.h:3853
bool initdeferred
Definition: parsenodes.h:2865
List * exclusions
Definition: parsenodes.h:2882
ParseLoc location
Definition: parsenodes.h:2906
bool reset_default_tblspc
Definition: parsenodes.h:2887
List * keys
Definition: parsenodes.h:2877
List * pk_attrs
Definition: parsenodes.h:2895
List * fk_del_set_cols
Definition: parsenodes.h:2901
bool fk_with_period
Definition: parsenodes.h:2896
Node * where_clause
Definition: parsenodes.h:2890
char * indexname
Definition: parsenodes.h:2885
char generated_kind
Definition: parsenodes.h:2875
char * indexspace
Definition: parsenodes.h:2886
ConstrType contype
Definition: parsenodes.h:2862
char * access_method
Definition: parsenodes.h:2889
Oid old_pktable_oid
Definition: parsenodes.h:2903
bool is_no_inherit
Definition: parsenodes.h:2869
List * options
Definition: parsenodes.h:2884
char fk_upd_action
Definition: parsenodes.h:2899
List * old_conpfeqop
Definition: parsenodes.h:2902
bool is_enforced
Definition: parsenodes.h:2866
char fk_matchtype
Definition: parsenodes.h:2898
bool nulls_not_distinct
Definition: parsenodes.h:2876
bool pk_with_period
Definition: parsenodes.h:2897
char * cooked_expr
Definition: parsenodes.h:2872
bool initially_valid
Definition: parsenodes.h:2868
bool skip_validation
Definition: parsenodes.h:2867
bool without_overlaps
Definition: parsenodes.h:2879
bool deferrable
Definition: parsenodes.h:2864
NodeTag type
Definition: parsenodes.h:2861
Node * raw_expr
Definition: parsenodes.h:2870
char * conname
Definition: parsenodes.h:2863
char generated_when
Definition: parsenodes.h:2874
RangeVar * pktable
Definition: parsenodes.h:2893
List * including
Definition: parsenodes.h:2880
char fk_del_action
Definition: parsenodes.h:2900
List * fk_attrs
Definition: parsenodes.h:2894
bool is_program
Definition: parsenodes.h:2708
RangeVar * relation
Definition: parsenodes.h:2702
List * options
Definition: parsenodes.h:2710
bool is_from
Definition: parsenodes.h:2707
char * filename
Definition: parsenodes.h:2709
NodeTag type
Definition: parsenodes.h:2701
List * attlist
Definition: parsenodes.h:2705
Node * whereClause
Definition: parsenodes.h:2711
Node * query
Definition: parsenodes.h:2703
NodeTag type
Definition: parsenodes.h:3125
List * handler_name
Definition: parsenodes.h:3127
char * amname
Definition: parsenodes.h:3126
TypeName * sourcetype
Definition: parsenodes.h:4171
TypeName * targettype
Definition: parsenodes.h:4172
CoercionContext context
Definition: parsenodes.h:4174
ObjectWithArgs * func
Definition: parsenodes.h:4173
TypeName * typeName
Definition: parsenodes.h:3294
CollateClause * collClause
Definition: parsenodes.h:3295
NodeTag type
Definition: parsenodes.h:2985
List * func_options
Definition: parsenodes.h:2987
char * fdwname
Definition: parsenodes.h:2986
List * options
Definition: parsenodes.h:2988
TypeName * returnType
Definition: parsenodes.h:3598
ObjectWithArgs * name
Definition: parsenodes.h:3322
TypeName * storedtype
Definition: parsenodes.h:3328
TypeName * datatype
Definition: parsenodes.h:3309
List * plvalidator
Definition: parsenodes.h:3195
RangeVar * table
Definition: parsenodes.h:3097
RoleStmtType stmt_type
Definition: parsenodes.h:3218
RoleSpec * authrole
Definition: parsenodes.h:2418
bool if_not_exists
Definition: parsenodes.h:3258
List * options
Definition: parsenodes.h:3255
NodeTag type
Definition: parsenodes.h:3253
RangeVar * sequence
Definition: parsenodes.h:3254
List * tableElts
Definition: parsenodes.h:2780
List * nnconstraints
Definition: parsenodes.h:2787
TypeName * ofTypename
Definition: parsenodes.h:2785
OnCommitAction oncommit
Definition: parsenodes.h:2789
List * options
Definition: parsenodes.h:2788
bool if_not_exists
Definition: parsenodes.h:2792
List * inhRelations
Definition: parsenodes.h:2781
RangeVar * relation
Definition: parsenodes.h:2779
char * tablespacename
Definition: parsenodes.h:2790
PartitionSpec * partspec
Definition: parsenodes.h:2784
NodeTag type
Definition: parsenodes.h:2778
PartitionBoundSpec * partbound
Definition: parsenodes.h:2783
char * accessMethod
Definition: parsenodes.h:2791
List * constraints
Definition: parsenodes.h:2786
IntoClause * into
Definition: parsenodes.h:4057
ObjectType objtype
Definition: parsenodes.h:4058
ObjectWithArgs * tosql
Definition: parsenodes.h:4189
TypeName * type_name
Definition: parsenodes.h:4186
ObjectWithArgs * fromsql
Definition: parsenodes.h:4188
Node * whenClause
Definition: parsenodes.h:3150
List * transitionRels
Definition: parsenodes.h:3152
RangeVar * constrrel
Definition: parsenodes.h:3156
RangeVar * relation
Definition: parsenodes.h:3141
NodeTag type
Definition: parsenodes.h:3932
List * options
Definition: parsenodes.h:3934
char * dbname
Definition: parsenodes.h:3933
char *name pg_node_attr(query_jumble_ignore)
ParseLoc location pg_node_attr(query_jumble_location)
char * defnamespace
Definition: parsenodes.h:843
NodeTag type
Definition: parsenodes.h:842
DefElemAction defaction
Definition: parsenodes.h:847
char * defname
Definition: parsenodes.h:844
ParseLoc location
Definition: parsenodes.h:848
Node * arg
Definition: parsenodes.h:845
bool oldstyle
Definition: parsenodes.h:3278
List * definition
Definition: parsenodes.h:3281
List * defnames
Definition: parsenodes.h:3279
List * args
Definition: parsenodes.h:3280
NodeTag type
Definition: parsenodes.h:3276
ObjectType kind
Definition: parsenodes.h:3277
bool replace
Definition: parsenodes.h:3283
bool if_not_exists
Definition: parsenodes.h:3282
ReturningClause * returningClause
Definition: parsenodes.h:2154
WithClause * withClause
Definition: parsenodes.h:2155
Node * whereClause
Definition: parsenodes.h:2153
RangeVar * relation
Definition: parsenodes.h:2151
List * usingClause
Definition: parsenodes.h:2152
NodeTag type
Definition: parsenodes.h:2150
NodeTag type
Definition: parsenodes.h:4100
DiscardMode target
Definition: parsenodes.h:4101
NodeTag type
Definition: parsenodes.h:3641
List * args
Definition: parsenodes.h:3642
DropBehavior behavior
Definition: parsenodes.h:4245
NodeTag type
Definition: parsenodes.h:4243
NodeTag type
Definition: parsenodes.h:3241
List * roles
Definition: parsenodes.h:3242
bool missing_ok
Definition: parsenodes.h:3366
List * objects
Definition: parsenodes.h:3363
ObjectType removeType
Definition: parsenodes.h:3364
bool concurrent
Definition: parsenodes.h:3367
DropBehavior behavior
Definition: parsenodes.h:3365
NodeTag type
Definition: parsenodes.h:3362
DropBehavior behavior
Definition: parsenodes.h:4414
List * options
Definition: parsenodes.h:3970
char * dbname
Definition: parsenodes.h:3968
bool missing_ok
Definition: parsenodes.h:3969
NodeTag type
Definition: parsenodes.h:3967
List * params
Definition: parsenodes.h:4214
NodeTag type
Definition: parsenodes.h:4212
char * name
Definition: parsenodes.h:4213
NodeTag type
Definition: parsenodes.h:4035
Node * query
Definition: parsenodes.h:4036
List * options
Definition: parsenodes.h:4037
bool ismove
Definition: parsenodes.h:3487
long howMany pg_node_attr(query_jumble_ignore)
ParseLoc location pg_node_attr(query_jumble_location)
FetchDirection direction
Definition: parsenodes.h:3481
char * portalname
Definition: parsenodes.h:3485
FetchDirectionKeywords direction_keyword
Definition: parsenodes.h:3494
NodeTag type
Definition: parsenodes.h:3480
Definition: value.h:48
bool agg_within_group
Definition: parsenodes.h:457
CoercionForm funcformat
Definition: parsenodes.h:461
Node * agg_filter
Definition: parsenodes.h:454
List * agg_order
Definition: parsenodes.h:453
List * funcname
Definition: parsenodes.h:451
List * args
Definition: parsenodes.h:452
bool agg_star
Definition: parsenodes.h:458
int ignore_nulls
Definition: parsenodes.h:456
bool agg_distinct
Definition: parsenodes.h:459
NodeTag type
Definition: parsenodes.h:450
ParseLoc location
Definition: parsenodes.h:462
bool func_variadic
Definition: parsenodes.h:460
struct WindowDef * over
Definition: parsenodes.h:455
TypeName * argType
Definition: parsenodes.h:3619
FunctionParameterMode mode
Definition: parsenodes.h:3620
DropBehavior behavior
Definition: parsenodes.h:2677
NodeTag type
Definition: parsenodes.h:2671
RoleSpec * grantor
Definition: parsenodes.h:2676
List * grantee_roles
Definition: parsenodes.h:2673
List * granted_roles
Definition: parsenodes.h:2672
ObjectType objtype
Definition: parsenodes.h:2609
bool is_grant
Definition: parsenodes.h:2607
List * objects
Definition: parsenodes.h:2610
bool grant_option
Definition: parsenodes.h:2615
List * grantees
Definition: parsenodes.h:2614
List * privileges
Definition: parsenodes.h:2612
GrantTargetType targtype
Definition: parsenodes.h:2608
NodeTag type
Definition: parsenodes.h:2606
DropBehavior behavior
Definition: parsenodes.h:2617
RoleSpec * grantor
Definition: parsenodes.h:2616
NodeTag type
Definition: parsenodes.h:1566
List * content
Definition: parsenodes.h:1568
GroupingSetKind kind pg_node_attr(query_jumble_ignore)
ParseLoc location
Definition: parsenodes.h:1569
ImportForeignSchemaType list_type
Definition: parsenodes.h:3084
Node * expr
Definition: parsenodes.h:812
SortByDir ordering
Definition: parsenodes.h:817
List * opclassopts
Definition: parsenodes.h:816
NodeTag type
Definition: parsenodes.h:810
char * indexcolname
Definition: parsenodes.h:813
ParseLoc location
Definition: parsenodes.h:819
SortByNulls nulls_ordering
Definition: parsenodes.h:818
List * opclass
Definition: parsenodes.h:815
char * name
Definition: parsenodes.h:811
List * collation
Definition: parsenodes.h:814
bool unique
Definition: parsenodes.h:3530
bool reset_default_tblspc
Definition: parsenodes.h:3540
NodeTag type
Definition: parsenodes.h:3513
bool deferrable
Definition: parsenodes.h:3535
List * indexParams
Definition: parsenodes.h:3518
Oid indexOid
Definition: parsenodes.h:3525
bool initdeferred
Definition: parsenodes.h:3536
RangeVar * relation
Definition: parsenodes.h:3515
SubTransactionId oldFirstRelfilelocatorSubid
Definition: parsenodes.h:3528
bool iswithoutoverlaps
Definition: parsenodes.h:3534
bool transformed
Definition: parsenodes.h:3537
List * options
Definition: parsenodes.h:3521
char * tableSpace
Definition: parsenodes.h:3517
SubTransactionId oldCreateSubid
Definition: parsenodes.h:3527
bool isconstraint
Definition: parsenodes.h:3533
List * excludeOpNames
Definition: parsenodes.h:3523
bool nulls_not_distinct
Definition: parsenodes.h:3531
bool concurrent
Definition: parsenodes.h:3538
char * idxname
Definition: parsenodes.h:3514
Node * whereClause
Definition: parsenodes.h:3522
bool if_not_exists
Definition: parsenodes.h:3539
char * accessMethod
Definition: parsenodes.h:3516
char * idxcomment
Definition: parsenodes.h:3524
RelFileNumber oldNumber
Definition: parsenodes.h:3526
bool primary
Definition: parsenodes.h:3532
List * indexIncludingParams
Definition: parsenodes.h:3519
NodeTag type
Definition: parsenodes.h:1666
ParseLoc location
Definition: parsenodes.h:1670
char * conname
Definition: parsenodes.h:1669
List * indexElems
Definition: parsenodes.h:1667
Node * whereClause
Definition: parsenodes.h:1668
pg_node_attr(nodetag_only) NodeTag type
char * source_text
Definition: parsenodes.h:3650
OnConflictClause * onConflictClause
Definition: parsenodes.h:2138
Node * selectStmt
Definition: parsenodes.h:2137
ReturningClause * returningClause
Definition: parsenodes.h:2139
WithClause * withClause
Definition: parsenodes.h:2140
NodeTag type
Definition: parsenodes.h:2134
RangeVar * relation
Definition: parsenodes.h:2135
List * cols
Definition: parsenodes.h:2136
Definition: value.h:29
struct WindowDef * over
Definition: parsenodes.h:2061
JsonOutput * output
Definition: parsenodes.h:2058
JsonValueExpr * val
Definition: parsenodes.h:1858
NodeTag type
Definition: parsenodes.h:1857
bool absent_on_null
Definition: parsenodes.h:2087
NodeTag type
Definition: parsenodes.h:2084
JsonValueExpr * arg
Definition: parsenodes.h:2086
JsonAggConstructor * constructor
Definition: parsenodes.h:2085
JsonOutput * output
Definition: parsenodes.h:2031
JsonOutput * output
Definition: parsenodes.h:1887
char * column_name
Definition: parsenodes.h:1882
JsonWrapper wrapper
Definition: parsenodes.h:1890
JsonQuotes quotes
Definition: parsenodes.h:1891
JsonExprOp op
Definition: parsenodes.h:1881
List * passing
Definition: parsenodes.h:1886
JsonBehavior * on_empty
Definition: parsenodes.h:1888
ParseLoc location
Definition: parsenodes.h:1892
NodeTag type
Definition: parsenodes.h:1880
Node * pathspec
Definition: parsenodes.h:1885
JsonBehavior * on_error
Definition: parsenodes.h:1889
JsonValueExpr * context_item
Definition: parsenodes.h:1884
JsonValueExpr * value
Definition: parsenodes.h:1969
NodeTag type
Definition: parsenodes.h:1967
NodeTag type
Definition: parsenodes.h:2071
JsonAggConstructor * constructor
Definition: parsenodes.h:2072
JsonKeyValue * arg
Definition: parsenodes.h:2073
bool absent_on_null
Definition: parsenodes.h:2074
JsonOutput * output
Definition: parsenodes.h:2017
JsonReturning * returning
Definition: parsenodes.h:1848
TypeName * typeName
Definition: parsenodes.h:1847
NodeTag type
Definition: parsenodes.h:1846
JsonValueExpr * expr
Definition: parsenodes.h:1979
ParseLoc location
Definition: parsenodes.h:1982
JsonOutput * output
Definition: parsenodes.h:1980
NodeTag type
Definition: parsenodes.h:1978
ParseLoc location
Definition: parsenodes.h:1994
JsonOutput * output
Definition: parsenodes.h:1993
JsonOutput * output
Definition: parsenodes.h:2005
JsonValueExpr * expr
Definition: parsenodes.h:2004
ParseLoc location
Definition: parsenodes.h:1957
JsonTableColumnType coltype
Definition: parsenodes.h:1947
JsonBehavior * on_empty
Definition: parsenodes.h:1955
JsonWrapper wrapper
Definition: parsenodes.h:1952
JsonBehavior * on_error
Definition: parsenodes.h:1956
JsonQuotes quotes
Definition: parsenodes.h:1953
JsonFormat * format
Definition: parsenodes.h:1951
TypeName * typeName
Definition: parsenodes.h:1949
JsonTablePathSpec * pathspec
Definition: parsenodes.h:1950
ParseLoc name_location
Definition: parsenodes.h:1906
JsonBehavior * on_error
Definition: parsenodes.h:1921
List * columns
Definition: parsenodes.h:1920
JsonTablePathSpec * pathspec
Definition: parsenodes.h:1918
Alias * alias
Definition: parsenodes.h:1922
NodeTag type
Definition: parsenodes.h:1916
bool lateral
Definition: parsenodes.h:1923
List * passing
Definition: parsenodes.h:1919
JsonValueExpr * context_item
Definition: parsenodes.h:1917
ParseLoc location
Definition: parsenodes.h:1924
Definition: pg_list.h:54
NodeTag type
Definition: parsenodes.h:3800
char * conditionname
Definition: parsenodes.h:3801
NodeTag type
Definition: parsenodes.h:3922
char * filename
Definition: parsenodes.h:3923
NodeTag type
Definition: parsenodes.h:4110
bool nowait
Definition: parsenodes.h:4113
List * relations
Definition: parsenodes.h:4111
List * lockedRels
Definition: parsenodes.h:863
LockClauseStrength strength
Definition: parsenodes.h:864
LockWaitPolicy waitPolicy
Definition: parsenodes.h:865
NodeTag type
Definition: parsenodes.h:862
ReturningClause * returningClause
Definition: parsenodes.h:2184
Node * sourceRelation
Definition: parsenodes.h:2181
List * mergeWhenClauses
Definition: parsenodes.h:2183
RangeVar * relation
Definition: parsenodes.h:2180
Node * joinCondition
Definition: parsenodes.h:2182
WithClause * withClause
Definition: parsenodes.h:2185
NodeTag type
Definition: parsenodes.h:2179
CmdType commandType
Definition: parsenodes.h:1779
MergeMatchKind matchKind
Definition: parsenodes.h:1778
NodeTag type
Definition: parsenodes.h:562
Definition: nodes.h:135
char * payload
Definition: parsenodes.h:3791
char * conditionname
Definition: parsenodes.h:3790
NodeTag type
Definition: parsenodes.h:3789
List * objfuncargs
Definition: parsenodes.h:2642
bool args_unspecified
Definition: parsenodes.h:2643
InferClause * infer
Definition: parsenodes.h:1683
OnConflictAction action
Definition: parsenodes.h:1682
ParseLoc location
Definition: parsenodes.h:1686
NodeTag type
Definition: parsenodes.h:2320
SelectStmt * val
Definition: parsenodes.h:2325
ParseLoc location
Definition: parsenodes.h:2326
List * indirection
Definition: parsenodes.h:2323
ParseLoc location
Definition: parsenodes.h:322
int number
Definition: parsenodes.h:321
NodeTag type
Definition: parsenodes.h:320
PartitionBoundSpec * bound
Definition: parsenodes.h:993
List * partlist
Definition: parsenodes.h:1001
RangeVar * name
Definition: parsenodes.h:990
NodeTag type
Definition: parsenodes.h:987
List * collation
Definition: parsenodes.h:894
ParseLoc location
Definition: parsenodes.h:896
NodeTag type
Definition: parsenodes.h:891
List * opclass
Definition: parsenodes.h:895
PartitionRangeDatumKind kind
Definition: parsenodes.h:962
List * partParams
Definition: parsenodes.h:915
NodeTag type
Definition: parsenodes.h:913
ParseLoc location
Definition: parsenodes.h:916
PartitionStrategy strategy
Definition: parsenodes.h:914
List * argtypes
Definition: parsenodes.h:4200
NodeTag type
Definition: parsenodes.h:4198
char * name
Definition: parsenodes.h:4199
Node * query
Definition: parsenodes.h:4201
PublicationAllObjType pubobjtype
Definition: parsenodes.h:4338
PublicationObjSpecType pubobjtype
Definition: parsenodes.h:4320
PublicationTable * pubtable
Definition: parsenodes.h:4322
RangeVar * relation
Definition: parsenodes.h:4300
List * rowMarks
Definition: parsenodes.h:234
int mergeTargetRelation pg_node_attr(query_jumble_ignore)
bool hasAggs pg_node_attr(query_jumble_ignore)
bool groupDistinct
Definition: parsenodes.h:217
bool hasRecursive pg_node_attr(query_jumble_ignore)
Node * mergeJoinCondition
Definition: parsenodes.h:196
Node * limitCount
Definition: parsenodes.h:231
FromExpr * jointree
Definition: parsenodes.h:182
List * returningList
Definition: parsenodes.h:214
bool canSetTag pg_node_attr(query_jumble_ignore)
Node * setOperations
Definition: parsenodes.h:236
bool hasSubLinks pg_node_attr(query_jumble_ignore)
List * cteList
Definition: parsenodes.h:173
OnConflictExpr * onConflict
Definition: parsenodes.h:203
char *returningOldAlias pg_node_attr(query_jumble_ignore)
OverridingKind override pg_node_attr(query_jumble_ignore)
List * groupClause
Definition: parsenodes.h:216
List *rteperminfos pg_node_attr(query_jumble_ignore)
bool hasTargetSRFs pg_node_attr(query_jumble_ignore)
bool hasGroupRTE pg_node_attr(query_jumble_ignore)
int resultRelation pg_node_attr(query_jumble_ignore)
Node * havingQual
Definition: parsenodes.h:222
List * rtable
Definition: parsenodes.h:175
List *withCheckOptions pg_node_attr(query_jumble_ignore)
ParseLoc stmt_len pg_node_attr(query_jumble_ignore)
bool hasDistinctOn pg_node_attr(query_jumble_ignore)
Node * limitOffset
Definition: parsenodes.h:230
List *constraintDeps pg_node_attr(query_jumble_ignore)
bool isReturn pg_node_attr(query_jumble_ignore)
bool hasWindowFuncs pg_node_attr(query_jumble_ignore)
CmdType commandType
Definition: parsenodes.h:121
LimitOption limitOption
Definition: parsenodes.h:232
Node * utilityStmt
Definition: parsenodes.h:141
List * mergeActionList
Definition: parsenodes.h:185
bool hasModifyingCTE pg_node_attr(query_jumble_ignore)
NodeTag type
Definition: parsenodes.h:119
List * windowClause
Definition: parsenodes.h:224
List * targetList
Definition: parsenodes.h:198
List * groupingSets
Definition: parsenodes.h:220
bool groupByAll
Definition: parsenodes.h:218
List * distinctClause
Definition: parsenodes.h:226
bool hasForUpdate pg_node_attr(query_jumble_ignore)
List * sortClause
Definition: parsenodes.h:228
char *returningNewAlias pg_node_attr(query_jumble_ignore)
ParseLoc stmt_location
Definition: parsenodes.h:255
int64 queryId pg_node_attr(equal_ignore, query_jumble_ignore, read_write_ignore, read_as(0))
bool hasRowSecurity pg_node_attr(query_jumble_ignore)
QuerySource querySource pg_node_attr(query_jumble_ignore)
Bitmapset * selectedCols
Definition: parsenodes.h:1351
AclMode requiredPerms
Definition: parsenodes.h:1349
Bitmapset * insertedCols
Definition: parsenodes.h:1352
Bitmapset * updatedCols
Definition: parsenodes.h:1353
Alias * alias
Definition: parsenodes.h:672
bool is_rowsfrom
Definition: parsenodes.h:670
List * coldeflist
Definition: parsenodes.h:673
List * functions
Definition: parsenodes.h:671
NodeTag type
Definition: parsenodes.h:667
Node * subquery
Definition: parsenodes.h:647
NodeTag type
Definition: parsenodes.h:645
Alias * alias
Definition: parsenodes.h:648
ParseLoc location
Definition: parsenodes.h:710
TypeName * typeName
Definition: parsenodes.h:705
List * namespaces
Definition: parsenodes.h:689
Node * docexpr
Definition: parsenodes.h:687
ParseLoc location
Definition: parsenodes.h:692
Node * rowexpr
Definition: parsenodes.h:688
List * columns
Definition: parsenodes.h:690
NodeTag type
Definition: parsenodes.h:685
Alias * alias
Definition: parsenodes.h:691
ParseLoc location
Definition: parsenodes.h:730
List *colcollations pg_node_attr(query_jumble_ignore)
List *joinrightcols pg_node_attr(query_jumble_ignore)
Cardinality enrtuples pg_node_attr(query_jumble_ignore)
char * ctename
Definition: parsenodes.h:1254
TableFunc * tablefunc
Definition: parsenodes.h:1242
Alias *alias pg_node_attr(query_jumble_ignore)
List *groupexprs pg_node_attr(query_jumble_ignore)
List *joinleftcols pg_node_attr(query_jumble_ignore)
Index ctelevelsup
Definition: parsenodes.h:1256
bool inFromCl pg_node_attr(query_jumble_ignore)
bool lateral pg_node_attr(query_jumble_ignore)
List *joinaliasvars pg_node_attr(query_jumble_ignore)
bool security_barrier pg_node_attr(query_jumble_ignore)
bool funcordinality
Definition: parsenodes.h:1237
struct TableSampleClause * tablesample
Definition: parsenodes.h:1156
Alias *eref pg_node_attr(custom_query_jumble)
Query * subquery
Definition: parsenodes.h:1162
List *coltypmods pg_node_attr(query_jumble_ignore)
List * values_lists
Definition: parsenodes.h:1248
char * enrname
Definition: parsenodes.h:1289
List *securityQuals pg_node_attr(query_jumble_ignore)
JoinType jointype
Definition: parsenodes.h:1209
int rellockmode pg_node_attr(query_jumble_ignore)
pg_node_attr(custom_read_write) NodeTag type
char relkind pg_node_attr(query_jumble_ignore)
List * functions
Definition: parsenodes.h:1235
int joinmergedcols pg_node_attr(query_jumble_ignore)
Index perminfoindex pg_node_attr(query_jumble_ignore)
bool self_reference pg_node_attr(query_jumble_ignore)
List *coltypes pg_node_attr(query_jumble_ignore)
Oid relid pg_node_attr(query_jumble_ignore)
RTEKind rtekind
Definition: parsenodes.h:1105
Alias *join_using_alias pg_node_attr(query_jumble_ignore)
List *funccolcollations pg_node_attr(query_jumble_ignore)
Bitmapset *funcparams pg_node_attr(query_jumble_ignore)
List *funccolnames pg_node_attr(query_jumble_ignore)
int funccolcount pg_node_attr(query_jumble_ignore)
List *funccoltypes pg_node_attr(query_jumble_ignore)
List *funccoltypmods pg_node_attr(query_jumble_ignore)
ParseLoc stmt_location
Definition: parsenodes.h:2116
ParseLoc stmt_len
Definition: parsenodes.h:2117
pg_node_attr(no_query_jumble) NodeTag type
Node * stmt
Definition: parsenodes.h:2115
RoleSpec * newrole
Definition: parsenodes.h:4255
RangeVar * relation
Definition: parsenodes.h:4072
const char * name
Definition: parsenodes.h:4146
ReindexObjectType kind
Definition: parsenodes.h:4143
RangeVar * relation
Definition: parsenodes.h:4145
List * params
Definition: parsenodes.h:4147
NodeTag type
Definition: parsenodes.h:4142
RangeVar * relation
Definition: parsenodes.h:3695
bool missing_ok
Definition: parsenodes.h:3701
ObjectType relationType
Definition: parsenodes.h:3694
DropBehavior behavior
Definition: parsenodes.h:3700
ObjectType renameType
Definition: parsenodes.h:3693
NodeTag type
Definition: parsenodes.h:3692
char * newname
Definition: parsenodes.h:3699
char * subname
Definition: parsenodes.h:3697
Node * object
Definition: parsenodes.h:3696
Node * val
Definition: parsenodes.h:547
ParseLoc location
Definition: parsenodes.h:548
List * indirection
Definition: parsenodes.h:546
char * name
Definition: parsenodes.h:545
NodeTag type
Definition: parsenodes.h:544
NodeTag type
Definition: parsenodes.h:2306
Node * returnval
Definition: parsenodes.h:2307
ReturningOptionKind option
Definition: parsenodes.h:1806
ParseLoc location
Definition: parsenodes.h:1808
ParseLoc location
Definition: parsenodes.h:431
RoleSpecType roletype
Definition: parsenodes.h:429
NodeTag type
Definition: parsenodes.h:428
char * rolename
Definition: parsenodes.h:430
NodeTag type
Definition: parsenodes.h:1636
LockClauseStrength strength
Definition: parsenodes.h:1638
LockWaitPolicy waitPolicy
Definition: parsenodes.h:1639
char * rulename
Definition: parsenodes.h:3775
Node * whereClause
Definition: parsenodes.h:3776
bool instead
Definition: parsenodes.h:3778
RangeVar * relation
Definition: parsenodes.h:3774
bool replace
Definition: parsenodes.h:3780
CmdType event
Definition: parsenodes.h:3777
List * actions
Definition: parsenodes.h:3779
NodeTag type
Definition: parsenodes.h:3773
ObjectType objtype
Definition: parsenodes.h:3401
NodeTag type
Definition: parsenodes.h:3400
Node * object
Definition: parsenodes.h:3402
char * provider
Definition: parsenodes.h:3403
char * label
Definition: parsenodes.h:3404
LimitOption limitOption
Definition: parsenodes.h:2245
List * sortClause
Definition: parsenodes.h:2242
List * targetList
Definition: parsenodes.h:2219
IntoClause * intoClause
Definition: parsenodes.h:2218
Node * limitOffset
Definition: parsenodes.h:2243
bool groupDistinct
Definition: parsenodes.h:2223
List * fromClause
Definition: parsenodes.h:2220
bool groupByAll
Definition: parsenodes.h:2224
NodeTag type
Definition: parsenodes.h:2211
List * groupClause
Definition: parsenodes.h:2222
Node * havingClause
Definition: parsenodes.h:2225
List * lockingClause
Definition: parsenodes.h:2246
Node * limitCount
Definition: parsenodes.h:2244
List * windowClause
Definition: parsenodes.h:2226
List * distinctClause
Definition: parsenodes.h:2216
List * valuesLists
Definition: parsenodes.h:2236
struct SelectStmt * larg
Definition: parsenodes.h:2254
struct SelectStmt * rarg
Definition: parsenodes.h:2255
Node * whereClause
Definition: parsenodes.h:2221
SetOperation op
Definition: parsenodes.h:2252
WithClause * withClause
Definition: parsenodes.h:2247
List *colCollations pg_node_attr(query_jumble_ignore)
List *colTypes pg_node_attr(query_jumble_ignore)
List *groupClauses pg_node_attr(query_jumble_ignore)
List *colTypmods pg_node_attr(query_jumble_ignore)
SetOperation op
Definition: parsenodes.h:2282
PartitionBoundSpec * bound
Definition: parsenodes.h:978
SortByNulls sortby_nulls
Definition: parsenodes.h:576
Node * node
Definition: parsenodes.h:574
NodeTag type
Definition: parsenodes.h:573
List * useOp
Definition: parsenodes.h:577
SortByDir sortby_dir
Definition: parsenodes.h:575
ParseLoc location
Definition: parsenodes.h:578
bool hashable pg_node_attr(query_jumble_ignore)
Index tleSortGroupRef
Definition: parsenodes.h:1496
NodeTag type
Definition: parsenodes.h:3569
char * name
Definition: parsenodes.h:3570
Node * expr
Definition: parsenodes.h:3571
Definition: value.h:64
RangeVar * relation
Definition: parsenodes.h:782
TransactionStmtKind kind
Definition: parsenodes.h:3835
ParseLoc location pg_node_attr(query_jumble_location)
char *savepoint_name pg_node_attr(query_jumble_ignore)
char *gid pg_node_attr(query_jumble_ignore)
List * relations
Definition: parsenodes.h:3377
DropBehavior behavior
Definition: parsenodes.h:3379
bool restart_seqs
Definition: parsenodes.h:3378
NodeTag type
Definition: parsenodes.h:3376
TypeName * typeName
Definition: parsenodes.h:399
ParseLoc location
Definition: parsenodes.h:400
Node * arg
Definition: parsenodes.h:398
NodeTag type
Definition: parsenodes.h:397
bool setof
Definition: parsenodes.h:287
Oid typeOid
Definition: parsenodes.h:286
bool pct_type
Definition: parsenodes.h:288
List * names
Definition: parsenodes.h:285
NodeTag type
Definition: parsenodes.h:284
List * arrayBounds
Definition: parsenodes.h:291
int32 typemod
Definition: parsenodes.h:290
ParseLoc location
Definition: parsenodes.h:292
List * typmods
Definition: parsenodes.h:289
NodeTag type
Definition: parsenodes.h:3810
char * conditionname
Definition: parsenodes.h:3811
List * targetList
Definition: parsenodes.h:2166
List * fromClause
Definition: parsenodes.h:2168
NodeTag type
Definition: parsenodes.h:2164
Node * whereClause
Definition: parsenodes.h:2167
ReturningClause * returningClause
Definition: parsenodes.h:2169
RangeVar * relation
Definition: parsenodes.h:2165
WithClause * withClause
Definition: parsenodes.h:2170
RangeVar * relation
Definition: parsenodes.h:4020
NodeTag type
Definition: parsenodes.h:4004
List * options
Definition: parsenodes.h:4005
bool is_vacuumcmd
Definition: parsenodes.h:4007
List * rels
Definition: parsenodes.h:4006
ParseLoc location pg_node_attr(query_jumble_location)
VariableSetKind kind
Definition: parsenodes.h:2736
pg_node_attr(custom_query_jumble) NodeTag type
bool replace
Definition: parsenodes.h:3911
List * options
Definition: parsenodes.h:3912
Node * query
Definition: parsenodes.h:3910
List * aliases
Definition: parsenodes.h:3909
RangeVar * view
Definition: parsenodes.h:3908
NodeTag type
Definition: parsenodes.h:3907
ViewCheckOption withCheckOption
Definition: parsenodes.h:3913
NodeTag type
Definition: parsenodes.h:4419
List * options
Definition: parsenodes.h:4421
char * lsn_literal
Definition: parsenodes.h:4420
bool inRangeNullsFirst pg_node_attr(query_jumble_ignore)
bool inRangeAsc pg_node_attr(query_jumble_ignore)
Node * startOffset
Definition: parsenodes.h:1605
Oid inRangeColl pg_node_attr(query_jumble_ignore)
List * partitionClause
Definition: parsenodes.h:1601
NodeTag type
Definition: parsenodes.h:1596
bool copiedOrder pg_node_attr(query_jumble_ignore)
char *refname pg_node_attr(query_jumble_ignore)
Oid startInRangeFunc pg_node_attr(query_jumble_ignore)
Oid endInRangeFunc pg_node_attr(query_jumble_ignore)
char *name pg_node_attr(query_jumble_ignore)
Node * endOffset
Definition: parsenodes.h:1606
List * orderClause
Definition: parsenodes.h:1603
List * orderClause
Definition: parsenodes.h:595
ParseLoc location
Definition: parsenodes.h:599
NodeTag type
Definition: parsenodes.h:591
List * partitionClause
Definition: parsenodes.h:594
Node * startOffset
Definition: parsenodes.h:597
char * refname
Definition: parsenodes.h:593
Node * endOffset
Definition: parsenodes.h:598
int frameOptions
Definition: parsenodes.h:596
char * name
Definition: parsenodes.h:592
List * ctes
Definition: parsenodes.h:1653
NodeTag type
Definition: parsenodes.h:1652
ParseLoc location
Definition: parsenodes.h:1655
bool recursive
Definition: parsenodes.h:1654
ParseLoc location
Definition: parsenodes.h:878
TypeName * typeName
Definition: parsenodes.h:876
Node * expr
Definition: parsenodes.h:875
NodeTag type
Definition: parsenodes.h:873
XmlOptionType xmloption
Definition: parsenodes.h:874
BitString bsval
Definition: parsenodes.h:379
Node node
Definition: parsenodes.h:374
Float fval
Definition: parsenodes.h:376
String sval
Definition: parsenodes.h:378
Boolean boolval
Definition: parsenodes.h:377
Integer ival
Definition: parsenodes.h:375
const char * type
const char * name