#ifndef PARSENODES_H
#define PARSENODES_H
#include "common/relpath.h"
#include "nodes/bitmapset.h"
#include "nodes/lockoptions.h"
#include "nodes/primnodes.h"
#include "nodes/value.h"
#include "partitioning/partdefs.h"
typedef enum QuerySource
{
QSRC_ORIGINAL,
QSRC_PARSER,
QSRC_INSTEAD_RULE,
QSRC_QUAL_INSTEAD_RULE,
QSRC_NON_INSTEAD_RULE,
} QuerySource;
typedef enum SortByDir
{
SORTBY_DEFAULT,
SORTBY_ASC,
SORTBY_DESC,
SORTBY_USING,
} SortByDir;
typedef enum SortByNulls
{
SORTBY_NULLS_DEFAULT,
SORTBY_NULLS_FIRST,
SORTBY_NULLS_LAST,
} SortByNulls;
typedef enum SetQuantifier
{
SET_QUANTIFIER_DEFAULT,
SET_QUANTIFIER_ALL,
SET_QUANTIFIER_DISTINCT,
} SetQuantifier;
typedef uint64 AclMode;
#define ACL_INSERT (1<<0)
#define ACL_SELECT (1<<1)
#define ACL_UPDATE (1<<2)
#define ACL_DELETE (1<<3)
#define ACL_TRUNCATE (1<<4)
#define ACL_REFERENCES (1<<5)
#define ACL_TRIGGER (1<<6)
#define ACL_EXECUTE (1<<7)
#define ACL_USAGE (1<<8)
#define ACL_CREATE (1<<9)
#define ACL_CREATE_TEMP (1<<10)
#define ACL_CONNECT (1<<11)
#define ACL_SET (1<<12)
#define ACL_ALTER_SYSTEM (1<<13)
#define ACL_MAINTAIN (1<<14)
#define N_ACL_RIGHTS 15
#define ACL_NO_RIGHTS 0
#define ACL_SELECT_FOR_UPDATE ACL_UPDATE
typedef struct Query
{
NodeTag type;
CmdType commandType;
QuerySource querySource pg_node_attr(query_jumble_ignore);
uint64 queryId pg_node_attr(equal_ignore, query_jumble_ignore, read_write_ignore, read_as(0));
bool canSetTag pg_node_attr(query_jumble_ignore);
Node *utilityStmt;
int resultRelation pg_node_attr(query_jumble_ignore);
bool hasAggs pg_node_attr(query_jumble_ignore);
bool hasWindowFuncs pg_node_attr(query_jumble_ignore);
bool hasTargetSRFs pg_node_attr(query_jumble_ignore);
bool hasSubLinks pg_node_attr(query_jumble_ignore);
bool hasDistinctOn pg_node_attr(query_jumble_ignore);
bool hasRecursive pg_node_attr(query_jumble_ignore);
bool hasModifyingCTE pg_node_attr(query_jumble_ignore);
bool hasForUpdate pg_node_attr(query_jumble_ignore);
bool hasRowSecurity pg_node_attr(query_jumble_ignore);
bool isReturn pg_node_attr(query_jumble_ignore);
List *cteList;
List *rtable;
List *rteperminfos pg_node_attr(query_jumble_ignore);
FromExpr *jointree;
List *mergeActionList;
int mergeTargetRelation pg_node_attr(query_jumble_ignore);
Node *mergeJoinCondition;
List *targetList;
OverridingKind override pg_node_attr(query_jumble_ignore);
OnConflictExpr *onConflict;
List *returningList;
List *groupClause;
bool groupDistinct;
List *groupingSets;
Node *havingQual;
List *windowClause;
List *distinctClause;
List *sortClause;
Node *limitOffset;
Node *limitCount;
LimitOption limitOption;
List *rowMarks;
Node *setOperations;
List *constraintDeps pg_node_attr(query_jumble_ignore);
List *withCheckOptions pg_node_attr(query_jumble_ignore);
ParseLoc stmt_location;
ParseLoc stmt_len pg_node_attr(query_jumble_ignore);
} Query;
typedef struct TypeName
{
NodeTag type;
List *names;
Oid typeOid;
bool setof;
bool pct_type;
List *typmods;
int32 typemod;
List *arrayBounds;
ParseLoc location;
} TypeName;
typedef struct ColumnRef
{
NodeTag type;
List *fields;
ParseLoc location;
} ColumnRef;
typedef struct ParamRef
{
NodeTag type;
int number;
ParseLoc location;
} ParamRef;
typedef enum A_Expr_Kind
{
AEXPR_OP,
AEXPR_OP_ANY,
AEXPR_OP_ALL,
AEXPR_DISTINCT,
AEXPR_NOT_DISTINCT,
AEXPR_NULLIF,
AEXPR_IN,
AEXPR_LIKE,
AEXPR_ILIKE,
AEXPR_SIMILAR,
AEXPR_BETWEEN,
AEXPR_NOT_BETWEEN,
AEXPR_BETWEEN_SYM,
AEXPR_NOT_BETWEEN_SYM,
} A_Expr_Kind;
typedef struct A_Expr
{
pg_node_attr(custom_read_write)
NodeTag type;
A_Expr_Kind kind;
List *name;
Node *lexpr;
Node *rexpr;
ParseLoc location;
} A_Expr;
union ValUnion
{
Node node;
Integer ival;
Float fval;
Boolean boolval;
String sval;
BitString bsval;
};
typedef struct A_Const
{
pg_node_attr(custom_copy_equal, custom_read_write, custom_query_jumble)
NodeTag type;
union ValUnion val;
bool isnull;
ParseLoc location;
} A_Const;
typedef struct TypeCast
{
NodeTag type;
Node *arg;
TypeName *typeName;
ParseLoc location;
} TypeCast;
typedef struct CollateClause
{
NodeTag type;
Node *arg;
List *collname;
ParseLoc location;
} CollateClause;
typedef enum RoleSpecType
{
ROLESPEC_CSTRING,
ROLESPEC_CURRENT_ROLE,
ROLESPEC_CURRENT_USER,
ROLESPEC_SESSION_USER,
ROLESPEC_PUBLIC,
} RoleSpecType;
typedef struct RoleSpec
{
NodeTag type;
RoleSpecType roletype;
char *rolename;
ParseLoc location;
} RoleSpec;
typedef struct FuncCall
{
NodeTag type;
List *funcname;
List *args;
List *agg_order;
Node *agg_filter;
struct WindowDef *over;
bool agg_within_group;
bool agg_star;
bool agg_distinct;
bool func_variadic;
CoercionForm funcformat;
ParseLoc location;
} FuncCall;
typedef struct A_Star
{
NodeTag type;
} A_Star;
typedef struct A_Indices
{
NodeTag type;
bool is_slice;
Node *lidx;
Node *uidx;
} A_Indices;
typedef struct A_Indirection
{
NodeTag type;
Node *arg;
List *indirection;
} A_Indirection;
typedef struct A_ArrayExpr
{
NodeTag type;
List *elements;
ParseLoc location;
} A_ArrayExpr;
typedef struct ResTarget
{
NodeTag type;
char *name;
List *indirection;
Node *val;
ParseLoc location;
} ResTarget;
typedef struct MultiAssignRef
{
NodeTag type;
Node *source;
int colno;
int ncolumns;
} MultiAssignRef;
typedef struct SortBy
{
NodeTag type;
Node *node;
SortByDir sortby_dir;
SortByNulls sortby_nulls;
List *useOp;
ParseLoc location;
} SortBy;
typedef struct WindowDef
{
NodeTag type;
char *name;
char *refname;
List *partitionClause;
List *orderClause;
int frameOptions;
Node *startOffset;
Node *endOffset;
ParseLoc location;
} WindowDef;
#define FRAMEOPTION_NONDEFAULT 0x00001
#define FRAMEOPTION_RANGE 0x00002
#define FRAMEOPTION_ROWS 0x00004
#define FRAMEOPTION_GROUPS 0x00008
#define FRAMEOPTION_BETWEEN 0x00010
#define FRAMEOPTION_START_UNBOUNDED_PRECEDING 0x00020
#define FRAMEOPTION_END_UNBOUNDED_PRECEDING 0x00040
#define FRAMEOPTION_START_UNBOUNDED_FOLLOWING 0x00080
#define FRAMEOPTION_END_UNBOUNDED_FOLLOWING 0x00100
#define FRAMEOPTION_START_CURRENT_ROW 0x00200
#define FRAMEOPTION_END_CURRENT_ROW 0x00400
#define FRAMEOPTION_START_OFFSET_PRECEDING 0x00800
#define FRAMEOPTION_END_OFFSET_PRECEDING 0x01000
#define FRAMEOPTION_START_OFFSET_FOLLOWING 0x02000
#define FRAMEOPTION_END_OFFSET_FOLLOWING 0x04000
#define FRAMEOPTION_EXCLUDE_CURRENT_ROW 0x08000
#define FRAMEOPTION_EXCLUDE_GROUP 0x10000
#define FRAMEOPTION_EXCLUDE_TIES 0x20000
#define FRAMEOPTION_START_OFFSET \
(FRAMEOPTION_START_OFFSET_PRECEDING | FRAMEOPTION_START_OFFSET_FOLLOWING)
#define FRAMEOPTION_END_OFFSET \
(FRAMEOPTION_END_OFFSET_PRECEDING | FRAMEOPTION_END_OFFSET_FOLLOWING)
#define FRAMEOPTION_EXCLUSION \
(FRAMEOPTION_EXCLUDE_CURRENT_ROW | FRAMEOPTION_EXCLUDE_GROUP | \
FRAMEOPTION_EXCLUDE_TIES)
#define FRAMEOPTION_DEFAULTS \
(FRAMEOPTION_RANGE | FRAMEOPTION_START_UNBOUNDED_PRECEDING | \
FRAMEOPTION_END_CURRENT_ROW)
typedef struct RangeSubselect
{
NodeTag type;
bool lateral;
Node *subquery;
Alias *alias;
} RangeSubselect;
typedef struct RangeFunction
{
NodeTag type;
bool lateral;
bool ordinality;
bool is_rowsfrom;
List *functions;
Alias *alias;
List *coldeflist;
} RangeFunction;
typedef struct RangeTableFunc
{
NodeTag type;
bool lateral;
Node *docexpr;
Node *rowexpr;
List *namespaces;
List *columns;
Alias *alias;
ParseLoc location;
} RangeTableFunc;
typedef struct RangeTableFuncCol
{
NodeTag type;
char *colname;
TypeName *typeName;
bool for_ordinality;
bool is_not_null;
Node *colexpr;
Node *coldefexpr;
ParseLoc location;
} RangeTableFuncCol;
typedef struct RangeTableSample
{
NodeTag type;
Node *relation;
List *method;
List *args;
Node *repeatable;
ParseLoc location;
} RangeTableSample;
typedef struct ColumnDef
{
NodeTag type;
char *colname;
TypeName *typeName;
char *compression;
int inhcount;
bool is_local;
bool is_not_null;
bool is_from_type;
char storage;
char *storage_name;
Node *raw_default;
Node *cooked_default;
char identity;
RangeVar *identitySequence;
char generated;
CollateClause *collClause;
Oid collOid;
List *constraints;
List *fdwoptions;
ParseLoc location;
} ColumnDef;
typedef struct TableLikeClause
{
NodeTag type;
RangeVar *relation;
bits32 options;
Oid relationOid;
} TableLikeClause;
typedef enum TableLikeOption
{
CREATE_TABLE_LIKE_COMMENTS = 1 << 0,
CREATE_TABLE_LIKE_COMPRESSION = 1 << 1,
CREATE_TABLE_LIKE_CONSTRAINTS = 1 << 2,
CREATE_TABLE_LIKE_DEFAULTS = 1 << 3,
CREATE_TABLE_LIKE_GENERATED = 1 << 4,
CREATE_TABLE_LIKE_IDENTITY = 1 << 5,
CREATE_TABLE_LIKE_INDEXES = 1 << 6,
CREATE_TABLE_LIKE_STATISTICS = 1 << 7,
CREATE_TABLE_LIKE_STORAGE = 1 << 8,
CREATE_TABLE_LIKE_ALL = PG_INT32_MAX
} TableLikeOption;
typedef struct IndexElem
{
NodeTag type;
char *name;
Node *expr;
char *indexcolname;
List *collation;
List *opclass;
List *opclassopts;
SortByDir ordering;
SortByNulls nulls_ordering;
} IndexElem;
typedef enum DefElemAction
{
DEFELEM_UNSPEC,
DEFELEM_SET,
DEFELEM_ADD,
DEFELEM_DROP,
} DefElemAction;
typedef struct DefElem
{
NodeTag type;
char *defnamespace;
char *defname;
Node *arg;
DefElemAction defaction;
ParseLoc location;
} DefElem;
typedef struct LockingClause
{
NodeTag type;
List *lockedRels;
LockClauseStrength strength;
LockWaitPolicy waitPolicy;
} LockingClause;
typedef struct XmlSerialize
{
NodeTag type;
XmlOptionType xmloption;
Node *expr;
TypeName *typeName;
bool indent;
ParseLoc location;
} XmlSerialize;
typedef struct PartitionElem
{
NodeTag type;
char *name;
Node *expr;
List *collation;
List *opclass;
ParseLoc location;
} PartitionElem;
typedef enum PartitionStrategy
{
PARTITION_STRATEGY_LIST = 'l',
PARTITION_STRATEGY_RANGE = 'r',
PARTITION_STRATEGY_HASH = 'h',
} PartitionStrategy;
typedef struct PartitionSpec
{
NodeTag type;
PartitionStrategy strategy;
List *partParams;
ParseLoc location;
} PartitionSpec;
struct PartitionBoundSpec
{
NodeTag type;
char strategy;
bool is_default;
int modulus;
int remainder;
List *listdatums;
List *lowerdatums;
List *upperdatums;
ParseLoc location;
};
typedef enum PartitionRangeDatumKind
{
PARTITION_RANGE_DATUM_MINVALUE = -1,
PARTITION_RANGE_DATUM_VALUE = 0,
PARTITION_RANGE_DATUM_MAXVALUE = 1,
} PartitionRangeDatumKind;
typedef struct PartitionRangeDatum
{
NodeTag type;
PartitionRangeDatumKind kind;
Node *value;
ParseLoc location;
} PartitionRangeDatum;
typedef struct SinglePartitionSpec
{
NodeTag type;
} SinglePartitionSpec;
typedef struct PartitionCmd
{
NodeTag type;
RangeVar *name;
PartitionBoundSpec *bound;
bool concurrent;
} PartitionCmd;
typedef enum RTEKind
{
RTE_RELATION,
RTE_SUBQUERY,
RTE_JOIN,
RTE_FUNCTION,
RTE_TABLEFUNC,
RTE_VALUES,
RTE_CTE,
RTE_NAMEDTUPLESTORE,
RTE_RESULT,
} RTEKind;
typedef struct RangeTblEntry
{
pg_node_attr(custom_read_write)
NodeTag type;
Alias *alias pg_node_attr(query_jumble_ignore);
Alias *eref pg_node_attr(query_jumble_ignore);
RTEKind rtekind;
Oid relid;
bool inh;
char relkind pg_node_attr(query_jumble_ignore);
int rellockmode pg_node_attr(query_jumble_ignore);
Index perminfoindex pg_node_attr(query_jumble_ignore);
struct TableSampleClause *tablesample;
Query *subquery;
bool security_barrier pg_node_attr(query_jumble_ignore);
JoinType jointype;
int joinmergedcols pg_node_attr(query_jumble_ignore);
List *joinaliasvars pg_node_attr(query_jumble_ignore);
List *joinleftcols pg_node_attr(query_jumble_ignore);
List *joinrightcols pg_node_attr(query_jumble_ignore);
Alias *join_using_alias pg_node_attr(query_jumble_ignore);
List *functions;
bool funcordinality;
TableFunc *tablefunc;
List *values_lists;
char *ctename;
Index ctelevelsup;
bool self_reference pg_node_attr(query_jumble_ignore);
List *coltypes pg_node_attr(query_jumble_ignore);
List *coltypmods pg_node_attr(query_jumble_ignore);
List *colcollations pg_node_attr(query_jumble_ignore);
char *enrname;
Cardinality enrtuples pg_node_attr(query_jumble_ignore);
bool lateral pg_node_attr(query_jumble_ignore);
bool inFromCl pg_node_attr(query_jumble_ignore);
List *securityQuals pg_node_attr(query_jumble_ignore);
} RangeTblEntry;
typedef struct RTEPermissionInfo
{
NodeTag type;
Oid relid;
bool inh;
AclMode requiredPerms;
Oid checkAsUser;
Bitmapset *selectedCols;
Bitmapset *insertedCols;
Bitmapset *updatedCols;
} RTEPermissionInfo;
typedef struct RangeTblFunction
{
NodeTag type;
Node *funcexpr;
int funccolcount pg_node_attr(query_jumble_ignore);
List *funccolnames pg_node_attr(query_jumble_ignore);
List *funccoltypes pg_node_attr(query_jumble_ignore);
List *funccoltypmods pg_node_attr(query_jumble_ignore);
List *funccolcollations pg_node_attr(query_jumble_ignore);
Bitmapset *funcparams pg_node_attr(query_jumble_ignore);
} RangeTblFunction;
typedef struct TableSampleClause
{
NodeTag type;
Oid tsmhandler;
List *args;
Expr *repeatable;
} TableSampleClause;
typedef enum WCOKind
{
WCO_VIEW_CHECK,
WCO_RLS_INSERT_CHECK,
WCO_RLS_UPDATE_CHECK,
WCO_RLS_CONFLICT_CHECK,
WCO_RLS_MERGE_UPDATE_CHECK,
WCO_RLS_MERGE_DELETE_CHECK,
} WCOKind;
typedef struct WithCheckOption
{
NodeTag type;
WCOKind kind;
char *relname;
char *polname;
Node *qual;
bool cascaded;
} WithCheckOption;
typedef struct SortGroupClause
{
NodeTag type;
Index tleSortGroupRef;
Oid eqop;
Oid sortop;
bool nulls_first;
bool hashable pg_node_attr(query_jumble_ignore);
} SortGroupClause;
typedef enum GroupingSetKind
{
GROUPING_SET_EMPTY,
GROUPING_SET_SIMPLE,
GROUPING_SET_ROLLUP,
GROUPING_SET_CUBE,
GROUPING_SET_SETS,
} GroupingSetKind;
typedef struct GroupingSet
{
NodeTag type;
GroupingSetKind kind pg_node_attr(query_jumble_ignore);
List *content;
ParseLoc location;
} GroupingSet;
typedef struct WindowClause
{
NodeTag type;
char *name pg_node_attr(query_jumble_ignore);
char *refname pg_node_attr(query_jumble_ignore);
List *partitionClause;
List *orderClause;
int frameOptions;
Node *startOffset;
Node *endOffset;
Oid startInRangeFunc pg_node_attr(query_jumble_ignore);
Oid endInRangeFunc pg_node_attr(query_jumble_ignore);
Oid inRangeColl pg_node_attr(query_jumble_ignore);
bool inRangeAsc pg_node_attr(query_jumble_ignore);
bool inRangeNullsFirst pg_node_attr(query_jumble_ignore);
Index winref;
bool copiedOrder pg_node_attr(query_jumble_ignore);
} WindowClause;
typedef struct RowMarkClause
{
NodeTag type;
Index rti;
LockClauseStrength strength;
LockWaitPolicy waitPolicy;
bool pushedDown;
} RowMarkClause;
typedef struct WithClause
{
NodeTag type;
List *ctes;
bool recursive;
ParseLoc location;
} WithClause;
typedef struct InferClause
{
NodeTag type;
List *indexElems;
Node *whereClause;
char *conname;
ParseLoc location;
} InferClause;
typedef struct OnConflictClause
{
NodeTag type;
OnConflictAction action;
InferClause *infer;
List *targetList;
Node *whereClause;
ParseLoc location;
} OnConflictClause;
typedef enum CTEMaterialize
{
CTEMaterializeDefault,
CTEMaterializeAlways,
CTEMaterializeNever,
} CTEMaterialize;
typedef struct CTESearchClause
{
NodeTag type;
List *search_col_list;
bool search_breadth_first;
char *search_seq_column;
ParseLoc location;
} CTESearchClause;
typedef struct CTECycleClause
{
NodeTag type;
List *cycle_col_list;
char *cycle_mark_column;
Node *cycle_mark_value;
Node *cycle_mark_default;
char *cycle_path_column;
ParseLoc location;
Oid cycle_mark_type;
int cycle_mark_typmod;
Oid cycle_mark_collation;
Oid cycle_mark_neop;
} CTECycleClause;
typedef struct CommonTableExpr
{
NodeTag type;
char *ctename;
List *aliascolnames pg_node_attr(query_jumble_ignore);
CTEMaterialize ctematerialized;
Node *ctequery;
CTESearchClause *search_clause pg_node_attr(query_jumble_ignore);
CTECycleClause *cycle_clause pg_node_attr(query_jumble_ignore);
ParseLoc location;
bool cterecursive pg_node_attr(query_jumble_ignore);
int cterefcount pg_node_attr(query_jumble_ignore);
List *ctecolnames pg_node_attr(query_jumble_ignore);
List *ctecoltypes pg_node_attr(query_jumble_ignore);
List *ctecoltypmods pg_node_attr(query_jumble_ignore);
List *ctecolcollations pg_node_attr(query_jumble_ignore);
} CommonTableExpr;
#define GetCTETargetList(cte) \
(AssertMacro(IsA((cte)->ctequery, Query)), \
((Query *) (cte)->ctequery)->commandType == CMD_SELECT ? \
((Query *) (cte)->ctequery)->targetList : \
((Query *) (cte)->ctequery)->returningList)
typedef struct MergeWhenClause
{
NodeTag type;
MergeMatchKind matchKind;
CmdType commandType;
OverridingKind override;
Node *condition;
List *targetList;
List *values;
} MergeWhenClause;
typedef struct TriggerTransition
{
NodeTag type;
char *name;
bool isNew;
bool isTable;
} TriggerTransition;
typedef struct JsonOutput
{
NodeTag type;
TypeName *typeName;
JsonReturning *returning;
} JsonOutput;
typedef struct JsonArgument
{
NodeTag type;
JsonValueExpr *val;
char *name;
} JsonArgument;
typedef enum JsonQuotes
{
JS_QUOTES_UNSPEC,
JS_QUOTES_KEEP,
JS_QUOTES_OMIT,
} JsonQuotes;
typedef struct JsonFuncExpr
{
NodeTag type;
JsonExprOp op;
char *column_name;
JsonValueExpr *context_item;
Node *pathspec;
List *passing;
JsonOutput *output;
JsonBehavior *on_empty;
JsonBehavior *on_error;
JsonWrapper wrapper;
JsonQuotes quotes;
ParseLoc location;
} JsonFuncExpr;
typedef struct JsonTablePathSpec
{
NodeTag type;
Node *string;
char *name;
ParseLoc name_location;
ParseLoc location;
} JsonTablePathSpec;
typedef struct JsonTable
{
NodeTag type;
JsonValueExpr *context_item;
JsonTablePathSpec *pathspec;
List *passing;
List *columns;
JsonBehavior *on_error;
Alias *alias;
bool lateral;
ParseLoc location;
} JsonTable;
typedef enum JsonTableColumnType
{
JTC_FOR_ORDINALITY,
JTC_REGULAR,
JTC_EXISTS,
JTC_FORMATTED,
JTC_NESTED,
} JsonTableColumnType;
typedef struct JsonTableColumn
{
NodeTag type;
JsonTableColumnType coltype;
char *name;
TypeName *typeName;
JsonTablePathSpec *pathspec;
JsonFormat *format;
JsonWrapper wrapper;
JsonQuotes quotes;
List *columns;
JsonBehavior *on_empty;
JsonBehavior *on_error;
ParseLoc location;
} JsonTableColumn;
typedef struct JsonKeyValue
{
NodeTag type;
Expr *key;
JsonValueExpr *value;
} JsonKeyValue;
typedef struct JsonParseExpr
{
NodeTag type;
JsonValueExpr *expr;
JsonOutput *output;
bool unique_keys;
ParseLoc location;
} JsonParseExpr;
typedef struct JsonScalarExpr
{
NodeTag type;
Expr *expr;
JsonOutput *output;
ParseLoc location;
} JsonScalarExpr;
typedef struct JsonSerializeExpr
{
NodeTag type;
JsonValueExpr *expr;
JsonOutput *output;
ParseLoc location;
} JsonSerializeExpr;
typedef struct JsonObjectConstructor
{
NodeTag type;
List *exprs;
JsonOutput *output;
bool absent_on_null;
bool unique;
ParseLoc location;
} JsonObjectConstructor;
typedef struct JsonArrayConstructor
{
NodeTag type;
List *exprs;
JsonOutput *output;
bool absent_on_null;
ParseLoc location;
} JsonArrayConstructor;
typedef struct JsonArrayQueryConstructor
{
NodeTag type;
Node *query;
JsonOutput *output;
JsonFormat *format;
bool absent_on_null;
ParseLoc location;
} JsonArrayQueryConstructor;
typedef struct JsonAggConstructor
{
NodeTag type;
JsonOutput *output;
Node *agg_filter;
List *agg_order;
struct WindowDef *over;
ParseLoc location;
} JsonAggConstructor;
typedef struct JsonObjectAgg
{
NodeTag type;
JsonAggConstructor *constructor;
JsonKeyValue *arg;
bool absent_on_null;
bool unique;
} JsonObjectAgg;
typedef struct JsonArrayAgg
{
NodeTag type;
JsonAggConstructor *constructor;
JsonValueExpr *arg;
bool absent_on_null;
} JsonArrayAgg;
typedef struct RawStmt
{
pg_node_attr(no_query_jumble)
NodeTag type;
Node *stmt;
ParseLoc stmt_location;
ParseLoc stmt_len;
} RawStmt;
typedef struct InsertStmt
{
NodeTag type;
RangeVar *relation;
List *cols;
Node *selectStmt;
OnConflictClause *onConflictClause;
List *returningList;
WithClause *withClause;
OverridingKind override;
} InsertStmt;
typedef struct DeleteStmt
{
NodeTag type;
RangeVar *relation;
List *usingClause;
Node *whereClause;
List *returningList;
WithClause *withClause;
} DeleteStmt;
typedef struct UpdateStmt
{
NodeTag type;
RangeVar *relation;
List *targetList;
Node *whereClause;
List *fromClause;
List *returningList;
WithClause *withClause;
} UpdateStmt;
typedef struct MergeStmt
{
NodeTag type;
RangeVar *relation;
Node *sourceRelation;
Node *joinCondition;
List *mergeWhenClauses;
List *returningList;
WithClause *withClause;
} MergeStmt;
typedef enum SetOperation
{
SETOP_NONE = 0,
SETOP_UNION,
SETOP_INTERSECT,
SETOP_EXCEPT,
} SetOperation;
typedef struct SelectStmt
{
NodeTag type;
List *distinctClause;
IntoClause *intoClause;
List *targetList;
List *fromClause;
Node *whereClause;
List *groupClause;
bool groupDistinct;
Node *havingClause;
List *windowClause;
List *valuesLists;
List *sortClause;
Node *limitOffset;
Node *limitCount;
LimitOption limitOption;
List *lockingClause;
WithClause *withClause;
SetOperation op;
bool all;
struct SelectStmt *larg;
struct SelectStmt *rarg;
} SelectStmt;
typedef struct SetOperationStmt
{
NodeTag type;
SetOperation op;
bool all;
Node *larg;
Node *rarg;
List *colTypes pg_node_attr(query_jumble_ignore);
List *colTypmods pg_node_attr(query_jumble_ignore);
List *colCollations pg_node_attr(query_jumble_ignore);
List *groupClauses pg_node_attr(query_jumble_ignore);
} SetOperationStmt;
typedef struct ReturnStmt
{
NodeTag type;
Node *returnval;
} ReturnStmt;
typedef struct PLAssignStmt
{
NodeTag type;
char *name;
List *indirection;
int nnames;
SelectStmt *val;
ParseLoc location;
} PLAssignStmt;
typedef enum ObjectType
{
OBJECT_ACCESS_METHOD,
OBJECT_AGGREGATE,
OBJECT_AMOP,
OBJECT_AMPROC,
OBJECT_ATTRIBUTE,
OBJECT_CAST,
OBJECT_COLUMN,
OBJECT_COLLATION,
OBJECT_CONVERSION,
OBJECT_DATABASE,
OBJECT_DEFAULT,
OBJECT_DEFACL,
OBJECT_DOMAIN,
OBJECT_DOMCONSTRAINT,
OBJECT_EVENT_TRIGGER,
OBJECT_EXTENSION,
OBJECT_FDW,
OBJECT_FOREIGN_SERVER,
OBJECT_FOREIGN_TABLE,
OBJECT_FUNCTION,
OBJECT_INDEX,
OBJECT_LANGUAGE,
OBJECT_LARGEOBJECT,
OBJECT_MATVIEW,
OBJECT_OPCLASS,
OBJECT_OPERATOR,
OBJECT_OPFAMILY,
OBJECT_PARAMETER_ACL,
OBJECT_POLICY,
OBJECT_PROCEDURE,
OBJECT_PUBLICATION,
OBJECT_PUBLICATION_NAMESPACE,
OBJECT_PUBLICATION_REL,
OBJECT_ROLE,
OBJECT_ROUTINE,
OBJECT_RULE,
OBJECT_SCHEMA,
OBJECT_SEQUENCE,
OBJECT_SUBSCRIPTION,
OBJECT_STATISTIC_EXT,
OBJECT_TABCONSTRAINT,
OBJECT_TABLE,
OBJECT_TABLESPACE,
OBJECT_TRANSFORM,
OBJECT_TRIGGER,
OBJECT_TSCONFIGURATION,
OBJECT_TSDICTIONARY,
OBJECT_TSPARSER,
OBJECT_TSTEMPLATE,
OBJECT_TYPE,
OBJECT_USER_MAPPING,
OBJECT_VIEW,
} ObjectType;
typedef struct CreateSchemaStmt
{
NodeTag type;
char *schemaname;
RoleSpec *authrole;
List *schemaElts;
bool if_not_exists;
} CreateSchemaStmt;
typedef enum DropBehavior
{
DROP_RESTRICT,
DROP_CASCADE,
} DropBehavior;
typedef struct AlterTableStmt
{
NodeTag type;
RangeVar *relation;
List *cmds;
ObjectType objtype;
bool missing_ok;
} AlterTableStmt;
typedef enum AlterTableType
{
AT_AddColumn,
AT_AddColumnToView,
AT_ColumnDefault,
AT_CookedColumnDefault,
AT_DropNotNull,
AT_SetNotNull,
AT_SetExpression,
AT_DropExpression,
AT_CheckNotNull,
AT_SetStatistics,
AT_SetOptions,
AT_ResetOptions,
AT_SetStorage,
AT_SetCompression,
AT_DropColumn,
AT_AddIndex,
AT_ReAddIndex,
AT_AddConstraint,
AT_ReAddConstraint,
AT_ReAddDomainConstraint,
AT_AlterConstraint,
AT_ValidateConstraint,
AT_AddIndexConstraint,
AT_DropConstraint,
AT_ReAddComment,
AT_AlterColumnType,
AT_AlterColumnGenericOptions,
AT_ChangeOwner,
AT_ClusterOn,
AT_DropCluster,
AT_SetLogged,
AT_SetUnLogged,
AT_DropOids,
AT_SetAccessMethod,
AT_SetTableSpace,
AT_SetRelOptions,
AT_ResetRelOptions,
AT_ReplaceRelOptions,
AT_EnableTrig,
AT_EnableAlwaysTrig,
AT_EnableReplicaTrig,
AT_DisableTrig,
AT_EnableTrigAll,
AT_DisableTrigAll,
AT_EnableTrigUser,
AT_DisableTrigUser,
AT_EnableRule,
AT_EnableAlwaysRule,
AT_EnableReplicaRule,
AT_DisableRule,
AT_AddInherit,
AT_DropInherit,
AT_AddOf,
AT_DropOf,
AT_ReplicaIdentity,
AT_EnableRowSecurity,
AT_DisableRowSecurity,
AT_ForceRowSecurity,
AT_NoForceRowSecurity,
AT_GenericOptions,
AT_AttachPartition,
AT_DetachPartition,
AT_DetachPartitionFinalize,
AT_AddIdentity,
AT_SetIdentity,
AT_DropIdentity,
AT_ReAddStatistics,
} AlterTableType;
typedef struct ReplicaIdentityStmt
{
NodeTag type;
char identity_type;
char *name;
} ReplicaIdentityStmt;
typedef struct AlterTableCmd
{
NodeTag type;
AlterTableType subtype;
char *name;
int16 num;
RoleSpec *newowner;
Node *def;
DropBehavior behavior;
bool missing_ok;
bool recurse;
} AlterTableCmd;
typedef struct AlterCollationStmt
{
NodeTag type;
List *collname;
} AlterCollationStmt;
typedef struct AlterDomainStmt
{
NodeTag type;
char subtype;
List *typeName;
char *name;
Node *def;
DropBehavior behavior;
bool missing_ok;
} AlterDomainStmt;
typedef enum GrantTargetType
{
ACL_TARGET_OBJECT,
ACL_TARGET_ALL_IN_SCHEMA,
ACL_TARGET_DEFAULTS,
} GrantTargetType;
typedef struct GrantStmt
{
NodeTag type;
bool is_grant;
GrantTargetType targtype;
ObjectType objtype;
List *objects;
List *privileges;
List *grantees;
bool grant_option;
RoleSpec *grantor;
DropBehavior behavior;
} GrantStmt;
typedef struct ObjectWithArgs
{
NodeTag type;
List *objname;
List *objargs;
List *objfuncargs;
bool args_unspecified;
} ObjectWithArgs;
typedef struct AccessPriv
{
NodeTag type;
char *priv_name;
List *cols;
} AccessPriv;
typedef struct GrantRoleStmt
{
NodeTag type;
List *granted_roles;
List *grantee_roles;
bool is_grant;
List *opt;
RoleSpec *grantor;
DropBehavior behavior;
} GrantRoleStmt;
typedef struct AlterDefaultPrivilegesStmt
{
NodeTag type;
List *options;
GrantStmt *action;
} AlterDefaultPrivilegesStmt;
typedef struct CopyStmt
{
NodeTag type;
RangeVar *relation;
Node *query;
List *attlist;
bool is_from;
bool is_program;
char *filename;
List *options;
Node *whereClause;
} CopyStmt;
typedef enum VariableSetKind
{
VAR_SET_VALUE,
VAR_SET_DEFAULT,
VAR_SET_CURRENT,
VAR_SET_MULTI,
VAR_RESET,
VAR_RESET_ALL,
} VariableSetKind;
typedef struct VariableSetStmt
{
NodeTag type;
VariableSetKind kind;
char *name;
List *args;
bool is_local;
} VariableSetStmt;
typedef struct VariableShowStmt
{
NodeTag type;
char *name;
} VariableShowStmt;
typedef struct CreateStmt
{
NodeTag type;
RangeVar *relation;
List *tableElts;
List *inhRelations;
PartitionBoundSpec *partbound;
PartitionSpec *partspec;
TypeName *ofTypename;
List *constraints;
List *options;
OnCommitAction oncommit;
char *tablespacename;
char *accessMethod;
bool if_not_exists;
} CreateStmt;
typedef enum ConstrType
{
CONSTR_NULL,
CONSTR_NOTNULL,
CONSTR_DEFAULT,
CONSTR_IDENTITY,
CONSTR_GENERATED,
CONSTR_CHECK,
CONSTR_PRIMARY,
CONSTR_UNIQUE,
CONSTR_EXCLUSION,
CONSTR_FOREIGN,
CONSTR_ATTR_DEFERRABLE,
CONSTR_ATTR_NOT_DEFERRABLE,
CONSTR_ATTR_DEFERRED,
CONSTR_ATTR_IMMEDIATE,
} ConstrType;
#define FKCONSTR_ACTION_NOACTION 'a'
#define FKCONSTR_ACTION_RESTRICT 'r'
#define FKCONSTR_ACTION_CASCADE 'c'
#define FKCONSTR_ACTION_SETNULL 'n'
#define FKCONSTR_ACTION_SETDEFAULT 'd'
#define FKCONSTR_MATCH_FULL 'f'
#define FKCONSTR_MATCH_PARTIAL 'p'
#define FKCONSTR_MATCH_SIMPLE 's'
typedef struct Constraint
{
NodeTag type;
ConstrType contype;
char *conname;
bool deferrable;
bool initdeferred;
bool skip_validation;
bool initially_valid;
bool is_no_inherit;
Node *raw_expr;
char *cooked_expr;
char generated_when;
int inhcount;
bool nulls_not_distinct;
List *keys;
List *including;
List *exclusions;
List *options;
char *indexname;
char *indexspace;
bool reset_default_tblspc;
char *access_method;
Node *where_clause;
RangeVar *pktable;
List *fk_attrs;
List *pk_attrs;
char fk_matchtype;
char fk_upd_action;
char fk_del_action;
List *fk_del_set_cols;
List *old_conpfeqop;
Oid old_pktable_oid;
ParseLoc location;
} Constraint;
typedef struct CreateTableSpaceStmt
{
NodeTag type;
char *tablespacename;
RoleSpec *owner;
char *location;
List *options;
} CreateTableSpaceStmt;
typedef struct DropTableSpaceStmt
{
NodeTag type;
char *tablespacename;
bool missing_ok;
} DropTableSpaceStmt;
typedef struct AlterTableSpaceOptionsStmt
{
NodeTag type;
char *tablespacename;
List *options;
bool isReset;
} AlterTableSpaceOptionsStmt;
typedef struct AlterTableMoveAllStmt
{
NodeTag type;
char *orig_tablespacename;
ObjectType objtype;
List *roles;
char *new_tablespacename;
bool nowait;
} AlterTableMoveAllStmt;
typedef struct CreateExtensionStmt
{
NodeTag type;
char *extname;
bool if_not_exists;
List *options;
} CreateExtensionStmt;
typedef struct AlterExtensionStmt
{
NodeTag type;
char *extname;
List *options;
} AlterExtensionStmt;
typedef struct AlterExtensionContentsStmt
{
NodeTag type;
char *extname;
int action;
ObjectType objtype;
Node *object;
} AlterExtensionContentsStmt;
typedef struct CreateFdwStmt
{
NodeTag type;
char *fdwname;
List *func_options;
List *options;
} CreateFdwStmt;
typedef struct AlterFdwStmt
{
NodeTag type;
char *fdwname;
List *func_options;
List *options;
} AlterFdwStmt;
typedef struct CreateForeignServerStmt
{
NodeTag type;
char *servername;
char *servertype;
char *version;
char *fdwname;
bool if_not_exists;
List *options;
} CreateForeignServerStmt;
typedef struct AlterForeignServerStmt
{
NodeTag type;
char *servername;
char *version;
List *options;
bool has_version;
} AlterForeignServerStmt;
typedef struct CreateForeignTableStmt
{
CreateStmt base;
char *servername;
List *options;
} CreateForeignTableStmt;
typedef struct CreateUserMappingStmt
{
NodeTag type;
RoleSpec *user;
char *servername;
bool if_not_exists;
List *options;
} CreateUserMappingStmt;
typedef struct AlterUserMappingStmt
{
NodeTag type;
RoleSpec *user;
char *servername;
List *options;
} AlterUserMappingStmt;
typedef struct DropUserMappingStmt
{
NodeTag type;
RoleSpec *user;
char *servername;
bool missing_ok;
} DropUserMappingStmt;
typedef enum ImportForeignSchemaType
{
FDW_IMPORT_SCHEMA_ALL,
FDW_IMPORT_SCHEMA_LIMIT_TO,
FDW_IMPORT_SCHEMA_EXCEPT,
} ImportForeignSchemaType;
typedef struct ImportForeignSchemaStmt
{
NodeTag type;
char *server_name;
char *remote_schema;
char *local_schema;
ImportForeignSchemaType list_type;
List *table_list;
List *options;
} ImportForeignSchemaStmt;
typedef struct CreatePolicyStmt
{
NodeTag type;
char *policy_name;
RangeVar *table;
char *cmd_name;
bool permissive;
List *roles;
Node *qual;
Node *with_check;
} CreatePolicyStmt;
typedef struct AlterPolicyStmt
{
NodeTag type;
char *policy_name;
RangeVar *table;
List *roles;
Node *qual;
Node *with_check;
} AlterPolicyStmt;
typedef struct CreateAmStmt
{
NodeTag type;
char *amname;
List *handler_name;
char amtype;
} CreateAmStmt;
typedef struct CreateTrigStmt
{
NodeTag type;
bool replace;
bool isconstraint;
char *trigname;
RangeVar *relation;
List *funcname;
List *args;
bool row;
int16 timing;
int16 events;
List *columns;
Node *whenClause;
List *transitionRels;
bool deferrable;
bool initdeferred;
RangeVar *constrrel;
} CreateTrigStmt;
typedef struct CreateEventTrigStmt
{
NodeTag type;
char *trigname;
char *eventname;
List *whenclause;
List *funcname;
} CreateEventTrigStmt;
typedef struct AlterEventTrigStmt
{
NodeTag type;
char *trigname;
char tgenabled;
} AlterEventTrigStmt;
typedef struct CreatePLangStmt
{
NodeTag type;
bool replace;
char *plname;
List *plhandler;
List *plinline;
List *plvalidator;
bool pltrusted;
} CreatePLangStmt;
typedef enum RoleStmtType
{
ROLESTMT_ROLE,
ROLESTMT_USER,
ROLESTMT_GROUP,
} RoleStmtType;
typedef struct CreateRoleStmt
{
NodeTag type;
RoleStmtType stmt_type;
char *role;
List *options;
} CreateRoleStmt;
typedef struct AlterRoleStmt
{
NodeTag type;
RoleSpec *role;
List *options;
int action;
} AlterRoleStmt;
typedef struct AlterRoleSetStmt
{
NodeTag type;
RoleSpec *role;
char *database;
VariableSetStmt *setstmt;
} AlterRoleSetStmt;
typedef struct DropRoleStmt
{
NodeTag type;
List *roles;
bool missing_ok;
} DropRoleStmt;
typedef struct CreateSeqStmt
{
NodeTag type;
RangeVar *sequence;
List *options;
Oid ownerId;
bool for_identity;
bool if_not_exists;
} CreateSeqStmt;
typedef struct AlterSeqStmt
{
NodeTag type;
RangeVar *sequence;
List *options;
bool for_identity;
bool missing_ok;
} AlterSeqStmt;
typedef struct DefineStmt
{
NodeTag type;
ObjectType kind;
bool oldstyle;
List *defnames;
List *args;
List *definition;
bool if_not_exists;
bool replace;
} DefineStmt;
typedef struct CreateDomainStmt
{
NodeTag type;
List *domainname;
TypeName *typeName;
CollateClause *collClause;
List *constraints;
} CreateDomainStmt;
typedef struct CreateOpClassStmt
{
NodeTag type;
List *opclassname;
List *opfamilyname;
char *amname;
TypeName *datatype;
List *items;
bool isDefault;
} CreateOpClassStmt;
#define OPCLASS_ITEM_OPERATOR 1
#define OPCLASS_ITEM_FUNCTION 2
#define OPCLASS_ITEM_STORAGETYPE 3
typedef struct CreateOpClassItem
{
NodeTag type;
int itemtype;
ObjectWithArgs *name;
int number;
List *order_family;
List *class_args;
TypeName *storedtype;
} CreateOpClassItem;
typedef struct CreateOpFamilyStmt
{
NodeTag type;
List *opfamilyname;
char *amname;
} CreateOpFamilyStmt;
typedef struct AlterOpFamilyStmt
{
NodeTag type;
List *opfamilyname;
char *amname;
bool isDrop;
List *items;
} AlterOpFamilyStmt;
typedef struct DropStmt
{
NodeTag type;
List *objects;
ObjectType removeType;
DropBehavior behavior;
bool missing_ok;
bool concurrent;
} DropStmt;
typedef struct TruncateStmt
{
NodeTag type;
List *relations;
bool restart_seqs;
DropBehavior behavior;
} TruncateStmt;
typedef struct CommentStmt
{
NodeTag type;
ObjectType objtype;
Node *object;
char *comment;
} CommentStmt;
typedef struct SecLabelStmt
{
NodeTag type;
ObjectType objtype;
Node *object;
char *provider;
char *label;
} SecLabelStmt;
#define CURSOR_OPT_BINARY 0x0001
#define CURSOR_OPT_SCROLL 0x0002
#define CURSOR_OPT_NO_SCROLL 0x0004
#define CURSOR_OPT_INSENSITIVE 0x0008
#define CURSOR_OPT_ASENSITIVE 0x0010
#define CURSOR_OPT_HOLD 0x0020
#define CURSOR_OPT_FAST_PLAN 0x0100
#define CURSOR_OPT_GENERIC_PLAN 0x0200
#define CURSOR_OPT_CUSTOM_PLAN 0x0400
#define CURSOR_OPT_PARALLEL_OK 0x0800
typedef struct DeclareCursorStmt
{
NodeTag type;
char *portalname;
int options;
Node *query;
} DeclareCursorStmt;
typedef struct ClosePortalStmt
{
NodeTag type;
char *portalname;
} ClosePortalStmt;
typedef enum FetchDirection
{
FETCH_FORWARD,
FETCH_BACKWARD,
FETCH_ABSOLUTE,
FETCH_RELATIVE,
} FetchDirection;
#define FETCH_ALL LONG_MAX
typedef struct FetchStmt
{
NodeTag type;
FetchDirection direction;
long howMany;
char *portalname;
bool ismove;
} FetchStmt;
typedef struct IndexStmt
{
NodeTag type;
char *idxname;
RangeVar *relation;
char *accessMethod;
char *tableSpace;
List *indexParams;
List *indexIncludingParams;
List *options;
Node *whereClause;
List *excludeOpNames;
char *idxcomment;
Oid indexOid;
RelFileNumber oldNumber;
SubTransactionId oldCreateSubid;
SubTransactionId oldFirstRelfilelocatorSubid;
bool unique;
bool nulls_not_distinct;
bool primary;
bool isconstraint;
bool deferrable;
bool initdeferred;
bool transformed;
bool concurrent;
bool if_not_exists;
bool reset_default_tblspc;
} IndexStmt;
typedef struct CreateStatsStmt
{
NodeTag type;
List *defnames;
List *stat_types;
List *exprs;
List *relations;
char *stxcomment;
bool transformed;
bool if_not_exists;
} CreateStatsStmt;
typedef struct StatsElem
{
NodeTag type;
char *name;
Node *expr;
} StatsElem;
typedef struct AlterStatsStmt
{
NodeTag type;
List *defnames;
Node *stxstattarget;
bool missing_ok;
} AlterStatsStmt;
typedef struct CreateFunctionStmt
{
NodeTag type;
bool is_procedure;
bool replace;
List *funcname;
List *parameters;
TypeName *returnType;
List *options;
Node *sql_body;
} CreateFunctionStmt;
typedef enum FunctionParameterMode
{
FUNC_PARAM_IN = 'i',
FUNC_PARAM_OUT = 'o',
FUNC_PARAM_INOUT = 'b',
FUNC_PARAM_VARIADIC = 'v',
FUNC_PARAM_TABLE = 't',
FUNC_PARAM_DEFAULT = 'd',
} FunctionParameterMode;
typedef struct FunctionParameter
{
NodeTag type;
char *name;
TypeName *argType;
FunctionParameterMode mode;
Node *defexpr;
} FunctionParameter;
typedef struct AlterFunctionStmt
{
NodeTag type;
ObjectType objtype;
ObjectWithArgs *func;
List *actions;
} AlterFunctionStmt;
typedef struct DoStmt
{
NodeTag type;
List *args;
} DoStmt;
typedef struct InlineCodeBlock
{
pg_node_attr(nodetag_only)
NodeTag type;
char *source_text;
Oid langOid;
bool langIsTrusted;
bool atomic;
} InlineCodeBlock;
typedef struct CallStmt
{
NodeTag type;
FuncCall *funccall pg_node_attr(query_jumble_ignore);
FuncExpr *funcexpr;
List *outargs;
} CallStmt;
typedef struct CallContext
{
pg_node_attr(nodetag_only)
NodeTag type;
bool atomic;
} CallContext;
typedef struct RenameStmt
{
NodeTag type;
ObjectType renameType;
ObjectType relationType;
RangeVar *relation;
Node *object;
char *subname;
char *newname;
DropBehavior behavior;
bool missing_ok;
} RenameStmt;
typedef struct AlterObjectDependsStmt
{
NodeTag type;
ObjectType objectType;
RangeVar *relation;
Node *object;
String *extname;
bool remove;
} AlterObjectDependsStmt;
typedef struct AlterObjectSchemaStmt
{
NodeTag type;
ObjectType objectType;
RangeVar *relation;
Node *object;
char *newschema;
bool missing_ok;
} AlterObjectSchemaStmt;
typedef struct AlterOwnerStmt
{
NodeTag type;
ObjectType objectType;
RangeVar *relation;
Node *object;
RoleSpec *newowner;
} AlterOwnerStmt;
typedef struct AlterOperatorStmt
{
NodeTag type;
ObjectWithArgs *opername;
List *options;
} AlterOperatorStmt;
typedef struct AlterTypeStmt
{
NodeTag type;
List *typeName;
List *options;
} AlterTypeStmt;
typedef struct RuleStmt
{
NodeTag type;
RangeVar *relation;
char *rulename;
Node *whereClause;
CmdType event;
bool instead;
List *actions;
bool replace;
} RuleStmt;
typedef struct NotifyStmt
{
NodeTag type;
char *conditionname;
char *payload;
} NotifyStmt;
typedef struct ListenStmt
{
NodeTag type;
char *conditionname;
} ListenStmt;
typedef struct UnlistenStmt
{
NodeTag type;
char *conditionname;
} UnlistenStmt;
typedef enum TransactionStmtKind
{
TRANS_STMT_BEGIN,
TRANS_STMT_START,
TRANS_STMT_COMMIT,
TRANS_STMT_ROLLBACK,
TRANS_STMT_SAVEPOINT,
TRANS_STMT_RELEASE,
TRANS_STMT_ROLLBACK_TO,
TRANS_STMT_PREPARE,
TRANS_STMT_COMMIT_PREPARED,
TRANS_STMT_ROLLBACK_PREPARED,
} TransactionStmtKind;
typedef struct TransactionStmt
{
NodeTag type;
TransactionStmtKind kind;
List *options;
char *savepoint_name pg_node_attr(query_jumble_ignore);
char *gid pg_node_attr(query_jumble_ignore);
bool chain;
ParseLoc location pg_node_attr(query_jumble_location);
} TransactionStmt;
typedef struct CompositeTypeStmt
{
NodeTag type;
RangeVar *typevar;
List *coldeflist;
} CompositeTypeStmt;
typedef struct CreateEnumStmt
{
NodeTag type;
List *typeName;
List *vals;
} CreateEnumStmt;
typedef struct CreateRangeStmt
{
NodeTag type;
List *typeName;
List *params;
} CreateRangeStmt;
typedef struct AlterEnumStmt
{
NodeTag type;
List *typeName;
char *oldVal;
char *newVal;
char *newValNeighbor;
bool newValIsAfter;
bool skipIfNewValExists;
} AlterEnumStmt;
typedef enum ViewCheckOption
{
NO_CHECK_OPTION,
LOCAL_CHECK_OPTION,
CASCADED_CHECK_OPTION,
} ViewCheckOption;
typedef struct ViewStmt
{
NodeTag type;
RangeVar *view;
List *aliases;
Node *query;
bool replace;
List *options;
ViewCheckOption withCheckOption;
} ViewStmt;
typedef struct LoadStmt
{
NodeTag type;
char *filename;
} LoadStmt;
typedef struct CreatedbStmt
{
NodeTag type;
char *dbname;
List *options;
} CreatedbStmt;
typedef struct AlterDatabaseStmt
{
NodeTag type;
char *dbname;
List *options;
} AlterDatabaseStmt;
typedef struct AlterDatabaseRefreshCollStmt
{
NodeTag type;
char *dbname;
} AlterDatabaseRefreshCollStmt;
typedef struct AlterDatabaseSetStmt
{
NodeTag type;
char *dbname;
VariableSetStmt *setstmt;
} AlterDatabaseSetStmt;
typedef struct DropdbStmt
{
NodeTag type;
char *dbname;
bool missing_ok;
List *options;
} DropdbStmt;
typedef struct AlterSystemStmt
{
NodeTag type;
VariableSetStmt *setstmt;
} AlterSystemStmt;
typedef struct ClusterStmt
{
NodeTag type;
RangeVar *relation;
char *indexname;
List *params;
} ClusterStmt;
typedef struct VacuumStmt
{
NodeTag type;
List *options;
List *rels;
bool is_vacuumcmd;
} VacuumStmt;
typedef struct VacuumRelation
{
NodeTag type;
RangeVar *relation;
Oid oid;
List *va_cols;
} VacuumRelation;
typedef struct ExplainStmt
{
NodeTag type;
Node *query;
List *options;
} ExplainStmt;
typedef struct CreateTableAsStmt
{
NodeTag type;
Node *query;
IntoClause *into;
ObjectType objtype;
bool is_select_into;
bool if_not_exists;
} CreateTableAsStmt;
typedef struct RefreshMatViewStmt
{
NodeTag type;
bool concurrent;
bool skipData;
RangeVar *relation;
} RefreshMatViewStmt;
typedef struct CheckPointStmt
{
NodeTag type;
} CheckPointStmt;
typedef enum DiscardMode
{
DISCARD_ALL,
DISCARD_PLANS,
DISCARD_SEQUENCES,
DISCARD_TEMP,
} DiscardMode;
typedef struct DiscardStmt
{
NodeTag type;
DiscardMode target;
} DiscardStmt;
typedef struct LockStmt
{
NodeTag type;
List *relations;
int mode;
bool nowait;
} LockStmt;
typedef struct ConstraintsSetStmt
{
NodeTag type;
List *constraints;
bool deferred;
} ConstraintsSetStmt;
typedef enum ReindexObjectType
{
REINDEX_OBJECT_INDEX,
REINDEX_OBJECT_TABLE,
REINDEX_OBJECT_SCHEMA,
REINDEX_OBJECT_SYSTEM,
REINDEX_OBJECT_DATABASE,
} ReindexObjectType;
typedef struct ReindexStmt
{
NodeTag type;
ReindexObjectType kind;
RangeVar *relation;
const char *name;
List *params;
} ReindexStmt;
typedef struct CreateConversionStmt
{
NodeTag type;
List *conversion_name;
char *for_encoding_name;
char *to_encoding_name;
List *func_name;
bool def;
} CreateConversionStmt;
typedef struct CreateCastStmt
{
NodeTag type;
TypeName *sourcetype;
TypeName *targettype;
ObjectWithArgs *func;
CoercionContext context;
bool inout;
} CreateCastStmt;
typedef struct CreateTransformStmt
{
NodeTag type;
bool replace;
TypeName *type_name;
char *lang;
ObjectWithArgs *fromsql;
ObjectWithArgs *tosql;
} CreateTransformStmt;
typedef struct PrepareStmt
{
NodeTag type;
char *name;
List *argtypes;
Node *query;
} PrepareStmt;
typedef struct ExecuteStmt
{
NodeTag type;
char *name;
List *params;
} ExecuteStmt;
typedef struct DeallocateStmt
{
NodeTag type;
char *name pg_node_attr(query_jumble_ignore);
bool isall;
ParseLoc location pg_node_attr(query_jumble_location);
} DeallocateStmt;
typedef struct DropOwnedStmt
{
NodeTag type;
List *roles;
DropBehavior behavior;
} DropOwnedStmt;
typedef struct ReassignOwnedStmt
{
NodeTag type;
List *roles;
RoleSpec *newrole;
} ReassignOwnedStmt;
typedef struct AlterTSDictionaryStmt
{
NodeTag type;
List *dictname;
List *options;
} AlterTSDictionaryStmt;
typedef enum AlterTSConfigType
{
ALTER_TSCONFIG_ADD_MAPPING,
ALTER_TSCONFIG_ALTER_MAPPING_FOR_TOKEN,
ALTER_TSCONFIG_REPLACE_DICT,
ALTER_TSCONFIG_REPLACE_DICT_FOR_TOKEN,
ALTER_TSCONFIG_DROP_MAPPING,
} AlterTSConfigType;
typedef struct AlterTSConfigurationStmt
{
NodeTag type;
AlterTSConfigType kind;
List *cfgname;
List *tokentype;
List *dicts;
bool override;
bool replace;
bool missing_ok;
} AlterTSConfigurationStmt;
typedef struct PublicationTable
{
NodeTag type;
RangeVar *relation;
Node *whereClause;
List *columns;
} PublicationTable;
typedef enum PublicationObjSpecType
{
PUBLICATIONOBJ_TABLE,
PUBLICATIONOBJ_TABLES_IN_SCHEMA,
PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA,
PUBLICATIONOBJ_CONTINUATION,
} PublicationObjSpecType;
typedef struct PublicationObjSpec
{
NodeTag type;
PublicationObjSpecType pubobjtype;
char *name;
PublicationTable *pubtable;
ParseLoc location;
} PublicationObjSpec;
typedef struct CreatePublicationStmt
{
NodeTag type;
char *pubname;
List *options;
List *pubobjects;
bool for_all_tables;
} CreatePublicationStmt;
typedef enum AlterPublicationAction
{
AP_AddObjects,
AP_DropObjects,
AP_SetObjects,
} AlterPublicationAction;
typedef struct AlterPublicationStmt
{
NodeTag type;
char *pubname;
List *options;
List *pubobjects;
bool for_all_tables;
AlterPublicationAction action;
} AlterPublicationStmt;
typedef struct CreateSubscriptionStmt
{
NodeTag type;
char *subname;
char *conninfo;
List *publication;
List *options;
} CreateSubscriptionStmt;
typedef enum AlterSubscriptionType
{
ALTER_SUBSCRIPTION_OPTIONS,
ALTER_SUBSCRIPTION_CONNECTION,
ALTER_SUBSCRIPTION_SET_PUBLICATION,
ALTER_SUBSCRIPTION_ADD_PUBLICATION,
ALTER_SUBSCRIPTION_DROP_PUBLICATION,
ALTER_SUBSCRIPTION_REFRESH,
ALTER_SUBSCRIPTION_ENABLED,
ALTER_SUBSCRIPTION_SKIP,
} AlterSubscriptionType;
typedef struct AlterSubscriptionStmt
{
NodeTag type;
AlterSubscriptionType kind;
char *subname;
char *conninfo;
List *publication;
List *options;
} AlterSubscriptionStmt;
typedef struct DropSubscriptionStmt
{
NodeTag type;
char *subname;
bool missing_ok;
DropBehavior behavior;
} DropSubscriptionStmt;
#endif