PostgreSQL Source Code git master
Loading...
Searching...
No Matches
parsenodes.h File Reference
#include "common/relpath.h"
#include "nodes/bitmapset.h"
#include "nodes/lockoptions.h"
#include "nodes/primnodes.h"
#include "nodes/value.h"
#include "partitioning/partdefs.h"
Include dependency graph for parsenodes.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  Query
 
struct  TypeName
 
struct  ColumnRef
 
struct  ParamRef
 
struct  A_Expr
 
union  ValUnion
 
struct  A_Const
 
struct  TypeCast
 
struct  CollateClause
 
struct  RoleSpec
 
struct  FuncCall
 
struct  A_Star
 
struct  A_Indices
 
struct  A_Indirection
 
struct  A_ArrayExpr
 
struct  ResTarget
 
struct  MultiAssignRef
 
struct  SortBy
 
struct  WindowDef
 
struct  RangeSubselect
 
struct  RangeFunction
 
struct  RangeTableFunc
 
struct  RangeTableFuncCol
 
struct  RangeGraphTable
 
struct  RangeTableSample
 
struct  ColumnDef
 
struct  TableLikeClause
 
struct  IndexElem
 
struct  DefElem
 
struct  LockingClause
 
struct  XmlSerialize
 
struct  PartitionElem
 
struct  PartitionSpec
 
struct  PartitionBoundSpec
 
struct  PartitionRangeDatum
 
struct  SinglePartitionSpec
 
struct  PartitionCmd
 
struct  GraphPattern
 
struct  GraphElementPattern
 
struct  RangeTblEntry
 
struct  RTEPermissionInfo
 
struct  RangeTblFunction
 
struct  TableSampleClause
 
struct  WithCheckOption
 
struct  SortGroupClause
 
struct  GroupingSet
 
struct  WindowClause
 
struct  RowMarkClause
 
struct  ForPortionOfClause
 
struct  WithClause
 
struct  InferClause
 
struct  OnConflictClause
 
struct  CTESearchClause
 
struct  CTECycleClause
 
struct  CommonTableExpr
 
struct  MergeWhenClause
 
struct  ReturningOption
 
struct  ReturningClause
 
struct  TriggerTransition
 
struct  JsonOutput
 
struct  JsonArgument
 
struct  JsonFuncExpr
 
struct  JsonTablePathSpec
 
struct  JsonTable
 
struct  JsonTableColumn
 
struct  JsonKeyValue
 
struct  JsonParseExpr
 
struct  JsonScalarExpr
 
struct  JsonSerializeExpr
 
struct  JsonObjectConstructor
 
struct  JsonArrayConstructor
 
struct  JsonArrayQueryConstructor
 
struct  JsonAggConstructor
 
struct  JsonObjectAgg
 
struct  JsonArrayAgg
 
struct  RawStmt
 
struct  InsertStmt
 
struct  DeleteStmt
 
struct  UpdateStmt
 
struct  MergeStmt
 
struct  SelectStmt
 
struct  SetOperationStmt
 
struct  ReturnStmt
 
struct  PLAssignStmt
 
struct  CreateSchemaStmt
 
struct  AlterTableStmt
 
struct  AlterTableCmd
 
struct  ATAlterConstraint
 
struct  ReplicaIdentityStmt
 
struct  AlterCollationStmt
 
struct  AlterDomainStmt
 
struct  GrantStmt
 
struct  ObjectWithArgs
 
struct  AccessPriv
 
struct  GrantRoleStmt
 
struct  AlterDefaultPrivilegesStmt
 
struct  CopyStmt
 
struct  VariableSetStmt
 
struct  VariableShowStmt
 
struct  CreateStmt
 
struct  Constraint
 
struct  CreateTableSpaceStmt
 
struct  DropTableSpaceStmt
 
struct  AlterTableSpaceOptionsStmt
 
struct  AlterTableMoveAllStmt
 
struct  CreateExtensionStmt
 
struct  AlterExtensionStmt
 
struct  AlterExtensionContentsStmt
 
struct  CreateFdwStmt
 
struct  AlterFdwStmt
 
struct  CreateForeignServerStmt
 
struct  AlterForeignServerStmt
 
struct  CreateForeignTableStmt
 
struct  CreateUserMappingStmt
 
struct  AlterUserMappingStmt
 
struct  DropUserMappingStmt
 
struct  ImportForeignSchemaStmt
 
struct  CreatePolicyStmt
 
struct  AlterPolicyStmt
 
struct  CreateAmStmt
 
struct  CreateTrigStmt
 
struct  CreateEventTrigStmt
 
struct  AlterEventTrigStmt
 
struct  CreatePLangStmt
 
struct  CreateRoleStmt
 
struct  AlterRoleStmt
 
struct  AlterRoleSetStmt
 
struct  DropRoleStmt
 
struct  CreateSeqStmt
 
struct  AlterSeqStmt
 
struct  DefineStmt
 
struct  CreateDomainStmt
 
struct  CreateOpClassStmt
 
struct  CreateOpClassItem
 
struct  CreateOpFamilyStmt
 
struct  AlterOpFamilyStmt
 
struct  DropStmt
 
struct  TruncateStmt
 
struct  CommentStmt
 
struct  SecLabelStmt
 
struct  DeclareCursorStmt
 
struct  ClosePortalStmt
 
struct  FetchStmt
 
struct  IndexStmt
 
struct  CreateStatsStmt
 
struct  StatsElem
 
struct  AlterStatsStmt
 
struct  CreateFunctionStmt
 
struct  FunctionParameter
 
struct  AlterFunctionStmt
 
struct  DoStmt
 
struct  InlineCodeBlock
 
struct  CallStmt
 
struct  CallContext
 
struct  RenameStmt
 
struct  AlterObjectDependsStmt
 
struct  AlterObjectSchemaStmt
 
struct  AlterOwnerStmt
 
struct  AlterOperatorStmt
 
struct  AlterTypeStmt
 
struct  RuleStmt
 
struct  NotifyStmt
 
struct  ListenStmt
 
struct  UnlistenStmt
 
struct  TransactionStmt
 
struct  CompositeTypeStmt
 
struct  CreateEnumStmt
 
struct  CreateRangeStmt
 
struct  AlterEnumStmt
 
struct  ViewStmt
 
struct  LoadStmt
 
struct  CreatedbStmt
 
struct  AlterDatabaseStmt
 
struct  AlterDatabaseRefreshCollStmt
 
struct  AlterDatabaseSetStmt
 
struct  DropdbStmt
 
struct  AlterSystemStmt
 
struct  VacuumStmt
 
struct  VacuumRelation
 
struct  RepackStmt
 
struct  ExplainStmt
 
struct  CreateTableAsStmt
 
struct  RefreshMatViewStmt
 
struct  CheckPointStmt
 
struct  DiscardStmt
 
struct  LockStmt
 
struct  ConstraintsSetStmt
 
struct  ReindexStmt
 
struct  CreateConversionStmt
 
struct  CreateCastStmt
 
struct  CreatePropGraphStmt
 
struct  PropGraphVertex
 
struct  PropGraphEdge
 
struct  PropGraphLabelAndProperties
 
struct  PropGraphProperties
 
struct  AlterPropGraphStmt
 
struct  CreateTransformStmt
 
struct  PrepareStmt
 
struct  ExecuteStmt
 
struct  DeallocateStmt
 
struct  DropOwnedStmt
 
struct  ReassignOwnedStmt
 
struct  AlterTSDictionaryStmt
 
struct  AlterTSConfigurationStmt
 
struct  PublicationTable
 
struct  PublicationObjSpec
 
struct  PublicationAllObjSpec
 
struct  CreatePublicationStmt
 
struct  AlterPublicationStmt
 
struct  CreateSubscriptionStmt
 
struct  AlterSubscriptionStmt
 
struct  DropSubscriptionStmt
 
struct  WaitStmt
 

Macros

#define ACL_INSERT   (1<<0) /* for relations */
 
#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) /* for functions */
 
#define ACL_USAGE   (1<<8) /* for various object types */
 
#define ACL_CREATE   (1<<9) /* for namespaces and databases */
 
#define ACL_CREATE_TEMP   (1<<10) /* for databases */
 
#define ACL_CONNECT   (1<<11) /* for databases */
 
#define ACL_SET   (1<<12) /* for configuration parameters */
 
#define ACL_ALTER_SYSTEM   (1<<13) /* for configuration parameters */
 
#define ACL_MAINTAIN   (1<<14) /* for relations */
 
#define N_ACL_RIGHTS   15 /* 1 plus the last 1<<x */
 
#define ACL_NO_RIGHTS   0
 
#define ACL_SELECT_FOR_UPDATE   ACL_UPDATE
 
#define FRAMEOPTION_NONDEFAULT   0x00001 /* any specified? */
 
#define FRAMEOPTION_RANGE   0x00002 /* RANGE behavior */
 
#define FRAMEOPTION_ROWS   0x00004 /* ROWS behavior */
 
#define FRAMEOPTION_GROUPS   0x00008 /* GROUPS behavior */
 
#define FRAMEOPTION_BETWEEN   0x00010 /* BETWEEN given? */
 
#define FRAMEOPTION_START_UNBOUNDED_PRECEDING   0x00020 /* start is U. P. */
 
#define FRAMEOPTION_END_UNBOUNDED_PRECEDING   0x00040 /* (disallowed) */
 
#define FRAMEOPTION_START_UNBOUNDED_FOLLOWING   0x00080 /* (disallowed) */
 
#define FRAMEOPTION_END_UNBOUNDED_FOLLOWING   0x00100 /* end is U. F. */
 
#define FRAMEOPTION_START_CURRENT_ROW   0x00200 /* start is C. R. */
 
#define FRAMEOPTION_END_CURRENT_ROW   0x00400 /* end is C. R. */
 
#define FRAMEOPTION_START_OFFSET_PRECEDING   0x00800 /* start is O. P. */
 
#define FRAMEOPTION_END_OFFSET_PRECEDING   0x01000 /* end is O. P. */
 
#define FRAMEOPTION_START_OFFSET_FOLLOWING   0x02000 /* start is O. F. */
 
#define FRAMEOPTION_END_OFFSET_FOLLOWING   0x04000 /* end is O. F. */
 
#define FRAMEOPTION_EXCLUDE_CURRENT_ROW   0x08000 /* omit C.R. */
 
#define FRAMEOPTION_EXCLUDE_GROUP   0x10000 /* omit C.R. & peers */
 
#define FRAMEOPTION_EXCLUDE_TIES   0x20000 /* omit C.R.'s peers */
 
#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
 
#define FRAMEOPTION_DEFAULTS
 
#define IS_EDGE_PATTERN(kind)
 
#define GetCTETargetList(cte)
 
#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'
 
#define OPCLASS_ITEM_OPERATOR   1
 
#define OPCLASS_ITEM_FUNCTION   2
 
#define OPCLASS_ITEM_STORAGETYPE   3
 
#define CURSOR_OPT_BINARY   0x0001 /* BINARY */
 
#define CURSOR_OPT_SCROLL   0x0002 /* SCROLL explicitly given */
 
#define CURSOR_OPT_NO_SCROLL   0x0004 /* NO SCROLL explicitly given */
 
#define CURSOR_OPT_INSENSITIVE   0x0008 /* INSENSITIVE */
 
#define CURSOR_OPT_ASENSITIVE   0x0010 /* ASENSITIVE */
 
#define CURSOR_OPT_HOLD   0x0020 /* WITH HOLD */
 
#define CURSOR_OPT_FAST_PLAN   0x0100 /* prefer fast-start plan */
 
#define CURSOR_OPT_GENERIC_PLAN   0x0200 /* force use of generic plan */
 
#define CURSOR_OPT_CUSTOM_PLAN   0x0400 /* force use of custom plan */
 
#define CURSOR_OPT_PARALLEL_OK   0x0800 /* parallel mode OK */
 
#define FETCH_ALL   LONG_MAX
 

Typedefs

typedef enum QuerySource QuerySource
 
typedef enum SortByDir SortByDir
 
typedef enum SortByNulls SortByNulls
 
typedef enum SetQuantifier SetQuantifier
 
typedef uint64 AclMode
 
typedef struct Query Query
 
typedef struct TypeName TypeName
 
typedef struct ColumnRef ColumnRef
 
typedef struct ParamRef ParamRef
 
typedef enum A_Expr_Kind A_Expr_Kind
 
typedef struct A_Expr A_Expr
 
typedef struct A_Const A_Const
 
typedef struct TypeCast TypeCast
 
typedef struct CollateClause CollateClause
 
typedef enum RoleSpecType RoleSpecType
 
typedef struct RoleSpec RoleSpec
 
typedef struct FuncCall FuncCall
 
typedef struct A_Star A_Star
 
typedef struct A_Indices A_Indices
 
typedef struct A_Indirection A_Indirection
 
typedef struct A_ArrayExpr A_ArrayExpr
 
typedef struct ResTarget ResTarget
 
typedef struct MultiAssignRef MultiAssignRef
 
typedef struct SortBy SortBy
 
typedef struct WindowDef WindowDef
 
typedef struct RangeSubselect RangeSubselect
 
typedef struct RangeFunction RangeFunction
 
typedef struct RangeTableFunc RangeTableFunc
 
typedef struct RangeTableFuncCol RangeTableFuncCol
 
typedef struct RangeGraphTable RangeGraphTable
 
typedef struct RangeTableSample RangeTableSample
 
typedef struct ColumnDef ColumnDef
 
typedef struct TableLikeClause TableLikeClause
 
typedef enum TableLikeOption TableLikeOption
 
typedef struct IndexElem IndexElem
 
typedef enum DefElemAction DefElemAction
 
typedef struct DefElem DefElem
 
typedef struct LockingClause LockingClause
 
typedef struct XmlSerialize XmlSerialize
 
typedef struct PartitionElem PartitionElem
 
typedef enum PartitionStrategy PartitionStrategy
 
typedef struct PartitionSpec PartitionSpec
 
typedef enum PartitionRangeDatumKind PartitionRangeDatumKind
 
typedef struct PartitionRangeDatum PartitionRangeDatum
 
typedef struct SinglePartitionSpec SinglePartitionSpec
 
typedef struct PartitionCmd PartitionCmd
 
typedef struct GraphPattern GraphPattern
 
typedef enum GraphElementPatternKind GraphElementPatternKind
 
typedef struct GraphElementPattern GraphElementPattern
 
typedef enum RTEKind RTEKind
 
typedef struct RangeTblEntry RangeTblEntry
 
typedef struct RTEPermissionInfo RTEPermissionInfo
 
typedef struct RangeTblFunction RangeTblFunction
 
typedef struct TableSampleClause TableSampleClause
 
typedef enum WCOKind WCOKind
 
typedef struct WithCheckOption WithCheckOption
 
typedef struct SortGroupClause SortGroupClause
 
typedef enum GroupingSetKind GroupingSetKind
 
typedef struct GroupingSet GroupingSet
 
typedef struct WindowClause WindowClause
 
typedef struct RowMarkClause RowMarkClause
 
typedef struct ForPortionOfClause ForPortionOfClause
 
typedef struct WithClause WithClause
 
typedef struct InferClause InferClause
 
typedef struct OnConflictClause OnConflictClause
 
typedef enum CTEMaterialize CTEMaterialize
 
typedef struct CTESearchClause CTESearchClause
 
typedef struct CTECycleClause CTECycleClause
 
typedef struct CommonTableExpr CommonTableExpr
 
typedef struct MergeWhenClause MergeWhenClause
 
typedef enum ReturningOptionKind ReturningOptionKind
 
typedef struct ReturningOption ReturningOption
 
typedef struct ReturningClause ReturningClause
 
typedef struct TriggerTransition TriggerTransition
 
typedef struct JsonOutput JsonOutput
 
typedef struct JsonArgument JsonArgument
 
typedef enum JsonQuotes JsonQuotes
 
typedef struct JsonFuncExpr JsonFuncExpr
 
typedef struct JsonTablePathSpec JsonTablePathSpec
 
typedef struct JsonTable JsonTable
 
typedef enum JsonTableColumnType JsonTableColumnType
 
typedef struct JsonTableColumn JsonTableColumn
 
typedef struct JsonKeyValue JsonKeyValue
 
typedef struct JsonParseExpr JsonParseExpr
 
typedef struct JsonScalarExpr JsonScalarExpr
 
typedef struct JsonSerializeExpr JsonSerializeExpr
 
typedef struct JsonObjectConstructor JsonObjectConstructor
 
typedef struct JsonArrayConstructor JsonArrayConstructor
 
typedef struct JsonArrayQueryConstructor JsonArrayQueryConstructor
 
typedef struct JsonAggConstructor JsonAggConstructor
 
typedef struct JsonObjectAgg JsonObjectAgg
 
typedef struct JsonArrayAgg JsonArrayAgg
 
typedef struct RawStmt RawStmt
 
typedef struct InsertStmt InsertStmt
 
typedef struct DeleteStmt DeleteStmt
 
typedef struct UpdateStmt UpdateStmt
 
typedef struct MergeStmt MergeStmt
 
typedef enum SetOperation SetOperation
 
typedef struct SelectStmt SelectStmt
 
typedef struct SetOperationStmt SetOperationStmt
 
typedef struct ReturnStmt ReturnStmt
 
typedef struct PLAssignStmt PLAssignStmt
 
typedef enum ObjectType ObjectType
 
typedef struct CreateSchemaStmt CreateSchemaStmt
 
typedef enum DropBehavior DropBehavior
 
typedef struct AlterTableStmt AlterTableStmt
 
typedef enum AlterTableType AlterTableType
 
typedef struct AlterTableCmd AlterTableCmd
 
typedef struct ATAlterConstraint ATAlterConstraint
 
typedef struct ReplicaIdentityStmt ReplicaIdentityStmt
 
typedef struct AlterCollationStmt AlterCollationStmt
 
typedef enum AlterDomainType AlterDomainType
 
typedef struct AlterDomainStmt AlterDomainStmt
 
typedef enum GrantTargetType GrantTargetType
 
typedef struct GrantStmt GrantStmt
 
typedef struct ObjectWithArgs ObjectWithArgs
 
typedef struct AccessPriv AccessPriv
 
typedef struct GrantRoleStmt GrantRoleStmt
 
typedef struct AlterDefaultPrivilegesStmt AlterDefaultPrivilegesStmt
 
typedef struct CopyStmt CopyStmt
 
typedef enum VariableSetKind VariableSetKind
 
typedef struct VariableSetStmt VariableSetStmt
 
typedef struct VariableShowStmt VariableShowStmt
 
typedef struct CreateStmt CreateStmt
 
typedef enum ConstrType ConstrType
 
typedef struct Constraint Constraint
 
typedef struct CreateTableSpaceStmt CreateTableSpaceStmt
 
typedef struct DropTableSpaceStmt DropTableSpaceStmt
 
typedef struct AlterTableSpaceOptionsStmt AlterTableSpaceOptionsStmt
 
typedef struct AlterTableMoveAllStmt AlterTableMoveAllStmt
 
typedef struct CreateExtensionStmt CreateExtensionStmt
 
typedef struct AlterExtensionStmt AlterExtensionStmt
 
typedef struct AlterExtensionContentsStmt AlterExtensionContentsStmt
 
typedef struct CreateFdwStmt CreateFdwStmt
 
typedef struct AlterFdwStmt AlterFdwStmt
 
typedef struct CreateForeignServerStmt CreateForeignServerStmt
 
typedef struct AlterForeignServerStmt AlterForeignServerStmt
 
typedef struct CreateForeignTableStmt CreateForeignTableStmt
 
typedef struct CreateUserMappingStmt CreateUserMappingStmt
 
typedef struct AlterUserMappingStmt AlterUserMappingStmt
 
typedef struct DropUserMappingStmt DropUserMappingStmt
 
typedef enum ImportForeignSchemaType ImportForeignSchemaType
 
typedef struct ImportForeignSchemaStmt ImportForeignSchemaStmt
 
typedef struct CreatePolicyStmt CreatePolicyStmt
 
typedef struct AlterPolicyStmt AlterPolicyStmt
 
typedef struct CreateAmStmt CreateAmStmt
 
typedef struct CreateTrigStmt CreateTrigStmt
 
typedef struct CreateEventTrigStmt CreateEventTrigStmt
 
typedef struct AlterEventTrigStmt AlterEventTrigStmt
 
typedef struct CreatePLangStmt CreatePLangStmt
 
typedef enum RoleStmtType RoleStmtType
 
typedef struct CreateRoleStmt CreateRoleStmt
 
typedef struct AlterRoleStmt AlterRoleStmt
 
typedef struct AlterRoleSetStmt AlterRoleSetStmt
 
typedef struct DropRoleStmt DropRoleStmt
 
typedef struct CreateSeqStmt CreateSeqStmt
 
typedef struct AlterSeqStmt AlterSeqStmt
 
typedef struct DefineStmt DefineStmt
 
typedef struct CreateDomainStmt CreateDomainStmt
 
typedef struct CreateOpClassStmt CreateOpClassStmt
 
typedef struct CreateOpClassItem CreateOpClassItem
 
typedef struct CreateOpFamilyStmt CreateOpFamilyStmt
 
typedef struct AlterOpFamilyStmt AlterOpFamilyStmt
 
typedef struct DropStmt DropStmt
 
typedef struct TruncateStmt TruncateStmt
 
typedef struct CommentStmt CommentStmt
 
typedef struct SecLabelStmt SecLabelStmt
 
typedef struct DeclareCursorStmt DeclareCursorStmt
 
typedef struct ClosePortalStmt ClosePortalStmt
 
typedef enum FetchDirection FetchDirection
 
typedef enum FetchDirectionKeywords FetchDirectionKeywords
 
typedef struct FetchStmt FetchStmt
 
typedef struct IndexStmt IndexStmt
 
typedef struct CreateStatsStmt CreateStatsStmt
 
typedef struct StatsElem StatsElem
 
typedef struct AlterStatsStmt AlterStatsStmt
 
typedef struct CreateFunctionStmt CreateFunctionStmt
 
typedef enum FunctionParameterMode FunctionParameterMode
 
typedef struct FunctionParameter FunctionParameter
 
typedef struct AlterFunctionStmt AlterFunctionStmt
 
typedef struct DoStmt DoStmt
 
typedef struct InlineCodeBlock InlineCodeBlock
 
typedef struct CallStmt CallStmt
 
typedef struct CallContext CallContext
 
typedef struct RenameStmt RenameStmt
 
typedef struct AlterObjectDependsStmt AlterObjectDependsStmt
 
typedef struct AlterObjectSchemaStmt AlterObjectSchemaStmt
 
typedef struct AlterOwnerStmt AlterOwnerStmt
 
typedef struct AlterOperatorStmt AlterOperatorStmt
 
typedef struct AlterTypeStmt AlterTypeStmt
 
typedef struct RuleStmt RuleStmt
 
typedef struct NotifyStmt NotifyStmt
 
typedef struct ListenStmt ListenStmt
 
typedef struct UnlistenStmt UnlistenStmt
 
typedef enum TransactionStmtKind TransactionStmtKind
 
typedef struct TransactionStmt TransactionStmt
 
typedef struct CompositeTypeStmt CompositeTypeStmt
 
typedef struct CreateEnumStmt CreateEnumStmt
 
typedef struct CreateRangeStmt CreateRangeStmt
 
typedef struct AlterEnumStmt AlterEnumStmt
 
typedef enum ViewCheckOption ViewCheckOption
 
typedef struct ViewStmt ViewStmt
 
typedef struct LoadStmt LoadStmt
 
typedef struct CreatedbStmt CreatedbStmt
 
typedef struct AlterDatabaseStmt AlterDatabaseStmt
 
typedef struct AlterDatabaseRefreshCollStmt AlterDatabaseRefreshCollStmt
 
typedef struct AlterDatabaseSetStmt AlterDatabaseSetStmt
 
typedef struct DropdbStmt DropdbStmt
 
typedef struct AlterSystemStmt AlterSystemStmt
 
typedef struct VacuumStmt VacuumStmt
 
typedef struct VacuumRelation VacuumRelation
 
typedef enum RepackCommand RepackCommand
 
typedef struct RepackStmt RepackStmt
 
typedef struct ExplainStmt ExplainStmt
 
typedef struct CreateTableAsStmt CreateTableAsStmt
 
typedef struct RefreshMatViewStmt RefreshMatViewStmt
 
typedef struct CheckPointStmt CheckPointStmt
 
typedef enum DiscardMode DiscardMode
 
typedef struct DiscardStmt DiscardStmt
 
typedef struct LockStmt LockStmt
 
typedef struct ConstraintsSetStmt ConstraintsSetStmt
 
typedef enum ReindexObjectType ReindexObjectType
 
typedef struct ReindexStmt ReindexStmt
 
typedef struct CreateConversionStmt CreateConversionStmt
 
typedef struct CreateCastStmt CreateCastStmt
 
typedef struct CreatePropGraphStmt CreatePropGraphStmt
 
typedef struct PropGraphVertex PropGraphVertex
 
typedef struct PropGraphEdge PropGraphEdge
 
typedef struct PropGraphLabelAndProperties PropGraphLabelAndProperties
 
typedef struct PropGraphProperties PropGraphProperties
 
typedef enum AlterPropGraphElementKind AlterPropGraphElementKind
 
typedef struct AlterPropGraphStmt AlterPropGraphStmt
 
typedef struct CreateTransformStmt CreateTransformStmt
 
typedef struct PrepareStmt PrepareStmt
 
typedef struct ExecuteStmt ExecuteStmt
 
typedef struct DeallocateStmt DeallocateStmt
 
typedef struct DropOwnedStmt DropOwnedStmt
 
typedef struct ReassignOwnedStmt ReassignOwnedStmt
 
typedef struct AlterTSDictionaryStmt AlterTSDictionaryStmt
 
typedef enum AlterTSConfigType AlterTSConfigType
 
typedef struct AlterTSConfigurationStmt AlterTSConfigurationStmt
 
typedef struct PublicationTable PublicationTable
 
typedef enum PublicationObjSpecType PublicationObjSpecType
 
typedef struct PublicationObjSpec PublicationObjSpec
 
typedef enum PublicationAllObjType PublicationAllObjType
 
typedef struct PublicationAllObjSpec PublicationAllObjSpec
 
typedef struct CreatePublicationStmt CreatePublicationStmt
 
typedef enum AlterPublicationAction AlterPublicationAction
 
typedef struct AlterPublicationStmt AlterPublicationStmt
 
typedef struct CreateSubscriptionStmt CreateSubscriptionStmt
 
typedef enum AlterSubscriptionType AlterSubscriptionType
 
typedef struct AlterSubscriptionStmt AlterSubscriptionStmt
 
typedef struct DropSubscriptionStmt DropSubscriptionStmt
 
typedef struct WaitStmt WaitStmt
 

Enumerations

enum  QuerySource {
  QSRC_ORIGINAL , QSRC_PARSER , QSRC_INSTEAD_RULE , QSRC_QUAL_INSTEAD_RULE ,
  QSRC_NON_INSTEAD_RULE
}
 
enum  SortByDir { SORTBY_DEFAULT , SORTBY_ASC , SORTBY_DESC , SORTBY_USING }
 
enum  SortByNulls { SORTBY_NULLS_DEFAULT , SORTBY_NULLS_FIRST , SORTBY_NULLS_LAST }
 
enum  SetQuantifier { SET_QUANTIFIER_DEFAULT , SET_QUANTIFIER_ALL , SET_QUANTIFIER_DISTINCT }
 
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
}
 
enum  RoleSpecType {
  ROLESPEC_CSTRING , ROLESPEC_CURRENT_ROLE , ROLESPEC_CURRENT_USER , ROLESPEC_SESSION_USER ,
  ROLESPEC_PUBLIC
}
 
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
}
 
enum  DefElemAction { DEFELEM_UNSPEC , DEFELEM_SET , DEFELEM_ADD , DEFELEM_DROP }
 
enum  PartitionStrategy { PARTITION_STRATEGY_LIST = 'l' , PARTITION_STRATEGY_RANGE = 'r' , PARTITION_STRATEGY_HASH = 'h' }
 
enum  PartitionRangeDatumKind { PARTITION_RANGE_DATUM_MINVALUE = -1 , PARTITION_RANGE_DATUM_VALUE = 0 , PARTITION_RANGE_DATUM_MAXVALUE = 1 }
 
enum  GraphElementPatternKind {
  VERTEX_PATTERN , EDGE_PATTERN_LEFT , EDGE_PATTERN_RIGHT , EDGE_PATTERN_ANY ,
  PAREN_EXPR
}
 
enum  RTEKind {
  RTE_RELATION , RTE_SUBQUERY , RTE_JOIN , RTE_FUNCTION ,
  RTE_TABLEFUNC , RTE_VALUES , RTE_CTE , RTE_NAMEDTUPLESTORE ,
  RTE_GRAPH_TABLE , RTE_RESULT , RTE_GROUP
}
 
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
}
 
enum  GroupingSetKind {
  GROUPING_SET_EMPTY , GROUPING_SET_SIMPLE , GROUPING_SET_ROLLUP , GROUPING_SET_CUBE ,
  GROUPING_SET_SETS
}
 
enum  CTEMaterialize { CTEMaterializeDefault , CTEMaterializeAlways , CTEMaterializeNever }
 
enum  ReturningOptionKind { RETURNING_OPTION_OLD , RETURNING_OPTION_NEW }
 
enum  JsonQuotes { JS_QUOTES_UNSPEC , JS_QUOTES_KEEP , JS_QUOTES_OMIT }
 
enum  JsonTableColumnType {
  JTC_FOR_ORDINALITY , JTC_REGULAR , JTC_EXISTS , JTC_FORMATTED ,
  JTC_NESTED
}
 
enum  SetOperation { SETOP_NONE = 0 , SETOP_UNION , SETOP_INTERSECT , SETOP_EXCEPT }
 
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_PROPGRAPH , 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
}
 
enum  DropBehavior { DROP_RESTRICT , DROP_CASCADE }
 
enum  AlterTableType {
  AT_AddColumn , AT_AddColumnToView , AT_ColumnDefault , AT_CookedColumnDefault ,
  AT_DropNotNull , AT_SetNotNull , AT_SetExpression , AT_DropExpression ,
  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_SplitPartition , AT_MergePartitions ,
  AT_AddIdentity , AT_SetIdentity , AT_DropIdentity , AT_ReAddStatistics
}
 
enum  AlterDomainType {
  AD_AlterDefault = 'T' , AD_DropNotNull = 'N' , AD_SetNotNull = 'O' , AD_AddConstraint = 'C' ,
  AD_DropConstraint = 'X' , AD_ValidateConstraint = 'V'
}
 
enum  GrantTargetType { ACL_TARGET_OBJECT , ACL_TARGET_ALL_IN_SCHEMA , ACL_TARGET_DEFAULTS }
 
enum  VariableSetKind {
  VAR_SET_VALUE , VAR_SET_DEFAULT , VAR_SET_CURRENT , VAR_SET_MULTI ,
  VAR_RESET , VAR_RESET_ALL
}
 
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 , CONSTR_ATTR_ENFORCED , CONSTR_ATTR_NOT_ENFORCED
}
 
enum  ImportForeignSchemaType { FDW_IMPORT_SCHEMA_ALL , FDW_IMPORT_SCHEMA_LIMIT_TO , FDW_IMPORT_SCHEMA_EXCEPT }
 
enum  RoleStmtType { ROLESTMT_ROLE , ROLESTMT_USER , ROLESTMT_GROUP }
 
enum  FetchDirection { FETCH_FORWARD , FETCH_BACKWARD , FETCH_ABSOLUTE , FETCH_RELATIVE }
 
enum  FetchDirectionKeywords {
  FETCH_KEYWORD_NONE = 0 , FETCH_KEYWORD_NEXT , FETCH_KEYWORD_PRIOR , FETCH_KEYWORD_FIRST ,
  FETCH_KEYWORD_LAST , FETCH_KEYWORD_ABSOLUTE , FETCH_KEYWORD_RELATIVE , FETCH_KEYWORD_ALL ,
  FETCH_KEYWORD_FORWARD , FETCH_KEYWORD_FORWARD_ALL , FETCH_KEYWORD_BACKWARD , FETCH_KEYWORD_BACKWARD_ALL
}
 
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'
}
 
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
}
 
enum  ViewCheckOption { NO_CHECK_OPTION , LOCAL_CHECK_OPTION , CASCADED_CHECK_OPTION }
 
enum  RepackCommand { REPACK_COMMAND_CLUSTER = 1 , REPACK_COMMAND_REPACK , REPACK_COMMAND_VACUUMFULL }
 
enum  DiscardMode { DISCARD_ALL , DISCARD_PLANS , DISCARD_SEQUENCES , DISCARD_TEMP }
 
enum  ReindexObjectType {
  REINDEX_OBJECT_INDEX , REINDEX_OBJECT_TABLE , REINDEX_OBJECT_SCHEMA , REINDEX_OBJECT_SYSTEM ,
  REINDEX_OBJECT_DATABASE
}
 
enum  AlterPropGraphElementKind { PROPGRAPH_ELEMENT_KIND_VERTEX = 1 , PROPGRAPH_ELEMENT_KIND_EDGE = 2 }
 
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
}
 
enum  PublicationObjSpecType {
  PUBLICATIONOBJ_TABLE , PUBLICATIONOBJ_EXCEPT_TABLE , PUBLICATIONOBJ_TABLES_IN_SCHEMA , PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA ,
  PUBLICATIONOBJ_CONTINUATION
}
 
enum  PublicationAllObjType { PUBLICATION_ALL_TABLES , PUBLICATION_ALL_SEQUENCES }
 
enum  AlterPublicationAction { AP_AddObjects , AP_DropObjects , AP_SetObjects }
 
enum  AlterSubscriptionType {
  ALTER_SUBSCRIPTION_OPTIONS , ALTER_SUBSCRIPTION_SERVER , ALTER_SUBSCRIPTION_CONNECTION , ALTER_SUBSCRIPTION_SET_PUBLICATION ,
  ALTER_SUBSCRIPTION_ADD_PUBLICATION , ALTER_SUBSCRIPTION_DROP_PUBLICATION , ALTER_SUBSCRIPTION_REFRESH_PUBLICATION , ALTER_SUBSCRIPTION_REFRESH_SEQUENCES ,
  ALTER_SUBSCRIPTION_ENABLED , ALTER_SUBSCRIPTION_SKIP
}
 

Macro Definition Documentation

◆ ACL_ALTER_SYSTEM

#define ACL_ALTER_SYSTEM   (1<<13) /* for configuration parameters */

Definition at line 89 of file parsenodes.h.

◆ ACL_CONNECT

#define ACL_CONNECT   (1<<11) /* for databases */

Definition at line 87 of file parsenodes.h.

◆ ACL_CREATE

#define ACL_CREATE   (1<<9) /* for namespaces and databases */

Definition at line 85 of file parsenodes.h.

◆ ACL_CREATE_TEMP

#define ACL_CREATE_TEMP   (1<<10) /* for databases */

Definition at line 86 of file parsenodes.h.

◆ ACL_DELETE

#define ACL_DELETE   (1<<3)

Definition at line 79 of file parsenodes.h.

◆ ACL_EXECUTE

#define ACL_EXECUTE   (1<<7) /* for functions */

Definition at line 83 of file parsenodes.h.

◆ ACL_INSERT

#define ACL_INSERT   (1<<0) /* for relations */

Definition at line 76 of file parsenodes.h.

◆ ACL_MAINTAIN

#define ACL_MAINTAIN   (1<<14) /* for relations */

Definition at line 90 of file parsenodes.h.

◆ ACL_NO_RIGHTS

#define ACL_NO_RIGHTS   0

Definition at line 92 of file parsenodes.h.

◆ ACL_REFERENCES

#define ACL_REFERENCES   (1<<5)

Definition at line 81 of file parsenodes.h.

◆ ACL_SELECT

#define ACL_SELECT   (1<<1)

Definition at line 77 of file parsenodes.h.

◆ ACL_SELECT_FOR_UPDATE

#define ACL_SELECT_FOR_UPDATE   ACL_UPDATE

Definition at line 94 of file parsenodes.h.

◆ ACL_SET

#define ACL_SET   (1<<12) /* for configuration parameters */

Definition at line 88 of file parsenodes.h.

◆ ACL_TRIGGER

#define ACL_TRIGGER   (1<<6)

Definition at line 82 of file parsenodes.h.

◆ ACL_TRUNCATE

#define ACL_TRUNCATE   (1<<4)

Definition at line 80 of file parsenodes.h.

◆ ACL_UPDATE

#define ACL_UPDATE   (1<<2)

Definition at line 78 of file parsenodes.h.

◆ ACL_USAGE

#define ACL_USAGE   (1<<8) /* for various object types */

Definition at line 84 of file parsenodes.h.

◆ CURSOR_OPT_ASENSITIVE

#define CURSOR_OPT_ASENSITIVE   0x0010 /* ASENSITIVE */

Definition at line 3499 of file parsenodes.h.

◆ CURSOR_OPT_BINARY

#define CURSOR_OPT_BINARY   0x0001 /* BINARY */

Definition at line 3495 of file parsenodes.h.

◆ CURSOR_OPT_CUSTOM_PLAN

#define CURSOR_OPT_CUSTOM_PLAN   0x0400 /* force use of custom plan */

Definition at line 3504 of file parsenodes.h.

◆ CURSOR_OPT_FAST_PLAN

#define CURSOR_OPT_FAST_PLAN   0x0100 /* prefer fast-start plan */

Definition at line 3502 of file parsenodes.h.

◆ CURSOR_OPT_GENERIC_PLAN

#define CURSOR_OPT_GENERIC_PLAN   0x0200 /* force use of generic plan */

Definition at line 3503 of file parsenodes.h.

◆ CURSOR_OPT_HOLD

#define CURSOR_OPT_HOLD   0x0020 /* WITH HOLD */

Definition at line 3500 of file parsenodes.h.

◆ CURSOR_OPT_INSENSITIVE

#define CURSOR_OPT_INSENSITIVE   0x0008 /* INSENSITIVE */

Definition at line 3498 of file parsenodes.h.

◆ CURSOR_OPT_NO_SCROLL

#define CURSOR_OPT_NO_SCROLL   0x0004 /* NO SCROLL explicitly given */

Definition at line 3497 of file parsenodes.h.

◆ CURSOR_OPT_PARALLEL_OK

#define CURSOR_OPT_PARALLEL_OK   0x0800 /* parallel mode OK */

Definition at line 3505 of file parsenodes.h.

◆ CURSOR_OPT_SCROLL

#define CURSOR_OPT_SCROLL   0x0002 /* SCROLL explicitly given */

Definition at line 3496 of file parsenodes.h.

◆ FETCH_ALL

#define FETCH_ALL   LONG_MAX

Definition at line 3556 of file parsenodes.h.

◆ FKCONSTR_ACTION_CASCADE

#define FKCONSTR_ACTION_CASCADE   'c'

Definition at line 2930 of file parsenodes.h.

◆ FKCONSTR_ACTION_NOACTION

#define FKCONSTR_ACTION_NOACTION   'a'

Definition at line 2928 of file parsenodes.h.

◆ FKCONSTR_ACTION_RESTRICT

#define FKCONSTR_ACTION_RESTRICT   'r'

Definition at line 2929 of file parsenodes.h.

◆ FKCONSTR_ACTION_SETDEFAULT

#define FKCONSTR_ACTION_SETDEFAULT   'd'

Definition at line 2932 of file parsenodes.h.

◆ FKCONSTR_ACTION_SETNULL

#define FKCONSTR_ACTION_SETNULL   'n'

Definition at line 2931 of file parsenodes.h.

◆ FKCONSTR_MATCH_FULL

#define FKCONSTR_MATCH_FULL   'f'

Definition at line 2935 of file parsenodes.h.

◆ FKCONSTR_MATCH_PARTIAL

#define FKCONSTR_MATCH_PARTIAL   'p'

Definition at line 2936 of file parsenodes.h.

◆ FKCONSTR_MATCH_SIMPLE

#define FKCONSTR_MATCH_SIMPLE   's'

Definition at line 2937 of file parsenodes.h.

◆ FRAMEOPTION_BETWEEN

#define FRAMEOPTION_BETWEEN   0x00010 /* BETWEEN given? */

Definition at line 616 of file parsenodes.h.

◆ FRAMEOPTION_DEFAULTS

#define FRAMEOPTION_DEFAULTS
Value:
#define FRAMEOPTION_END_CURRENT_ROW
Definition parsenodes.h:622
#define FRAMEOPTION_START_UNBOUNDED_PRECEDING
Definition parsenodes.h:617
#define FRAMEOPTION_RANGE
Definition parsenodes.h:613

Definition at line 639 of file parsenodes.h.

646{
648 bool lateral; /* does it have LATERAL prefix? */
649 Node *subquery; /* the untransformed sub-select clause */
650 Alias *alias; /* table alias & optional column aliases */
652
653/*
654 * RangeFunction - function call appearing in a FROM clause
655 *
656 * functions is a List because we use this to represent the construct
657 * ROWS FROM(func1(...), func2(...), ...). Each element of this list is a
658 * two-element sublist, the first element being the untransformed function
659 * call tree, and the second element being a possibly-empty list of ColumnDef
660 * nodes representing any columndef list attached to that function within the
661 * ROWS FROM() syntax.
662 *
663 * alias and coldeflist represent any alias and/or columndef list attached
664 * at the top level. (We disallow coldeflist appearing both here and
665 * per-function, but that's checked in parse analysis, not by the grammar.)
666 */
667typedef struct RangeFunction
668{
670 bool lateral; /* does it have LATERAL prefix? */
671 bool ordinality; /* does it have WITH ORDINALITY suffix? */
672 bool is_rowsfrom; /* is result of ROWS FROM() syntax? */
673 List *functions; /* per-function information, see above */
674 Alias *alias; /* table alias & optional column aliases */
675 List *coldeflist; /* list of ColumnDef nodes to describe result
676 * of function returning RECORD */
678
679/*
680 * RangeTableFunc - raw form of "table functions" such as XMLTABLE
681 *
682 * Note: JSON_TABLE is also a "table function", but it uses JsonTable node,
683 * not RangeTableFunc.
684 */
685typedef struct RangeTableFunc
686{
688 bool lateral; /* does it have LATERAL prefix? */
689 Node *docexpr; /* document expression */
690 Node *rowexpr; /* row generator expression */
691 List *namespaces; /* list of namespaces as ResTarget */
692 List *columns; /* list of RangeTableFuncCol */
693 Alias *alias; /* table alias & optional column aliases */
694 ParseLoc location; /* token location, or -1 if unknown */
696
697/*
698 * RangeTableFuncCol - one column in a RangeTableFunc->columns
699 *
700 * If for_ordinality is true (FOR ORDINALITY), then the column is an int4
701 * column and the rest of the fields are ignored.
702 */
703typedef struct RangeTableFuncCol
704{
706 char *colname; /* name of generated column */
707 TypeName *typeName; /* type of generated column */
708 bool for_ordinality; /* does it have FOR ORDINALITY? */
709 bool is_not_null; /* does it have NOT NULL? */
710 Node *colexpr; /* column filter expression */
711 Node *coldefexpr; /* column default value expression */
712 ParseLoc location; /* token location, or -1 if unknown */
714
715/*
716 * RangeGraphTable - raw form of GRAPH_TABLE clause
717 */
718typedef struct RangeGraphTable
719{
723 List *columns;
724 Alias *alias; /* table alias & optional column aliases */
725 ParseLoc location; /* token location, or -1 if unknown */
727
728/*
729 * RangeTableSample - TABLESAMPLE appearing in a raw FROM clause
730 *
731 * This node, appearing only in raw parse trees, represents
732 * <relation> TABLESAMPLE <method> (<params>) REPEATABLE (<num>)
733 * Currently, the <relation> can only be a RangeVar, but we might in future
734 * allow RangeSubselect and other options. Note that the RangeTableSample
735 * is wrapped around the node representing the <relation>, rather than being
736 * a subfield of it.
737 */
738typedef struct RangeTableSample
739{
741 Node *relation; /* relation to be sampled */
742 List *method; /* sampling method name (possibly qualified) */
743 List *args; /* argument(s) for sampling method */
744 Node *repeatable; /* REPEATABLE expression, or NULL if none */
745 ParseLoc location; /* method name location, or -1 if unknown */
747
748/*
749 * ColumnDef - column definition (used in various creates)
750 *
751 * If the column has a default value, we may have the value expression
752 * in either "raw" form (an untransformed parse tree) or "cooked" form
753 * (a post-parse-analysis, executable expression tree), depending on
754 * how this ColumnDef node was created (by parsing, or by inheritance
755 * from an existing relation). We should never have both in the same node!
756 *
757 * Similarly, we may have a COLLATE specification in either raw form
758 * (represented as a CollateClause with arg==NULL) or cooked form
759 * (the collation's OID).
760 *
761 * The constraints list may contain a CONSTR_DEFAULT item in a raw
762 * parsetree produced by gram.y, but transformCreateStmt will remove
763 * the item and set raw_default instead. CONSTR_DEFAULT items
764 * should not appear in any subsequent processing.
765 */
766typedef struct ColumnDef
767{
769 char *colname; /* name of column */
770 TypeName *typeName; /* type of column */
771 char *compression; /* compression method for column */
772 int16 inhcount; /* number of times column is inherited */
773 bool is_local; /* column has local (non-inherited) def'n */
774 bool is_not_null; /* NOT NULL constraint specified? */
775 bool is_from_type; /* column definition came from table type */
776 char storage; /* attstorage setting, or 0 for default */
777 char *storage_name; /* attstorage setting name or NULL for default */
778 Node *raw_default; /* default value (untransformed parse tree) */
779 Node *cooked_default; /* default value (transformed expr tree) */
780 char identity; /* attidentity setting */
781 RangeVar *identitySequence; /* to store identity sequence name for
782 * ALTER TABLE ... ADD COLUMN */
783 char generated; /* attgenerated setting */
784 CollateClause *collClause; /* untransformed COLLATE spec, if any */
785 Oid collOid; /* collation OID (InvalidOid if not set) */
786 List *constraints; /* other constraints on column */
787 List *fdwoptions; /* per-column FDW options */
788 ParseLoc location; /* parse location, or -1 if none/unknown */
789} ColumnDef;
790
791/*
792 * TableLikeClause - CREATE TABLE ( ... LIKE ... ) clause
793 */
794typedef struct TableLikeClause
795{
798 uint32 options; /* OR of TableLikeOption flags */
799 Oid relationOid; /* If table has been looked up, its OID */
801
802typedef enum TableLikeOption
803{
815
816/*
817 * IndexElem - index parameters (used in CREATE INDEX, and in ON CONFLICT)
818 *
819 * For a plain index attribute, 'name' is the name of the table column to
820 * index, and 'expr' is NULL. For an index expression, 'name' is NULL and
821 * 'expr' is the expression tree.
822 */
823typedef struct IndexElem
824{
826 char *name; /* name of attribute to index, or NULL */
827 Node *expr; /* expression to index, or NULL */
828 char *indexcolname; /* name for index column; NULL = default */
829 List *collation; /* name of collation; NIL = default */
830 List *opclass; /* name of desired opclass; NIL = default */
831 List *opclassopts; /* opclass-specific options, or NIL */
832 SortByDir ordering; /* ASC/DESC/default */
833 SortByNulls nulls_ordering; /* FIRST/LAST/default */
834 ParseLoc location; /* token location, or -1 if unknown */
835} IndexElem;
836
837/*
838 * DefElem - a generic "name = value" option definition
839 *
840 * In some contexts the name can be qualified. Also, certain SQL commands
841 * allow a SET/ADD/DROP action to be attached to option settings, so it's
842 * convenient to carry a field for that too. (Note: currently, it is our
843 * practice that the grammar allows namespace and action only in statements
844 * where they are relevant; C code can just ignore those fields in other
845 * statements.)
846 */
847typedef enum DefElemAction
848{
849 DEFELEM_UNSPEC, /* no action given */
854
855typedef struct DefElem
856{
858 char *defnamespace; /* NULL if unqualified name */
859 char *defname;
860 Node *arg; /* typically Integer, Float, String, or
861 * TypeName */
862 DefElemAction defaction; /* unspecified action, or SET/ADD/DROP */
863 ParseLoc location; /* token location, or -1 if unknown */
864} DefElem;
865
866/*
867 * LockingClause - raw representation of FOR [NO KEY] UPDATE/[KEY] SHARE
868 * options
869 *
870 * Note: lockedRels == NIL means "all relations in query". Otherwise it
871 * is a list of RangeVar nodes. (We use RangeVar mainly because it carries
872 * a location field --- currently, parse analysis insists on unqualified
873 * names in LockingClause.)
874 */
875typedef struct LockingClause
876{
878 List *lockedRels; /* FOR [KEY] UPDATE/SHARE relations */
880 LockWaitPolicy waitPolicy; /* NOWAIT and SKIP LOCKED */
882
883/*
884 * XMLSERIALIZE (in raw parse tree only)
885 */
886typedef struct XmlSerialize
887{
889 XmlOptionType xmloption; /* DOCUMENT or CONTENT */
890 Node *expr;
892 bool indent; /* [NO] INDENT */
893 ParseLoc location; /* token location, or -1 if unknown */
895
896/* Partitioning related definitions */
897
898/*
899 * PartitionElem - parse-time representation of a single partition key
900 *
901 * expr can be either a raw expression tree or a parse-analyzed expression.
902 * We don't store these on-disk, though.
903 */
904typedef struct PartitionElem
905{
907 char *name; /* name of column to partition on, or NULL */
908 Node *expr; /* expression to partition on, or NULL */
909 List *collation; /* name of collation; NIL = default */
910 List *opclass; /* name of desired opclass; NIL = default */
911 ParseLoc location; /* token location, or -1 if unknown */
913
914typedef enum PartitionStrategy
915{
920
921/*
922 * PartitionSpec - parse-time representation of a partition key specification
923 *
924 * This represents the key space we will be partitioning on.
925 */
926typedef struct PartitionSpec
927{
930 List *partParams; /* List of PartitionElems */
931 ParseLoc location; /* token location, or -1 if unknown */
933
934/*
935 * PartitionBoundSpec - a partition bound specification
936 *
937 * This represents the portion of the partition key space assigned to a
938 * particular partition. These are stored on disk in pg_class.relpartbound.
939 */
941{
943
944 char strategy; /* see PARTITION_STRATEGY codes above */
945 bool is_default; /* is it a default partition bound? */
946
947 /* Partitioning info for HASH strategy: */
948 int modulus;
949 int remainder;
950
951 /* Partitioning info for LIST strategy: */
952 List *listdatums; /* List of Consts (or A_Consts in raw tree) */
953
954 /* Partitioning info for RANGE strategy: */
955 List *lowerdatums; /* List of PartitionRangeDatums */
956 List *upperdatums; /* List of PartitionRangeDatums */
957
958 ParseLoc location; /* token location, or -1 if unknown */
959};
960
961/*
962 * PartitionRangeDatum - one of the values in a range partition bound
963 *
964 * This can be MINVALUE, MAXVALUE or a specific bounded value.
965 */
966typedef enum PartitionRangeDatumKind
967{
968 PARTITION_RANGE_DATUM_MINVALUE = -1, /* less than any other value */
969 PARTITION_RANGE_DATUM_VALUE = 0, /* a specific (bounded) value */
970 PARTITION_RANGE_DATUM_MAXVALUE = 1, /* greater than any other value */
972
973typedef struct PartitionRangeDatum
974{
976
978 Node *value; /* Const (or A_Const in raw tree), if kind is
979 * PARTITION_RANGE_DATUM_VALUE, else NULL */
980
981 ParseLoc location; /* token location, or -1 if unknown */
983
984/*
985 * PartitionDesc - info about a single partition for the ALTER TABLE SPLIT
986 * PARTITION command
987 */
988typedef struct SinglePartitionSpec
989{
991
992 RangeVar *name; /* name of partition */
993 PartitionBoundSpec *bound; /* FOR VALUES, if attaching */
995
996/*
997 * PartitionCmd - info for ALTER TABLE/INDEX ATTACH/DETACH PARTITION and for
998 * ALTER TABLE SPLIT/MERGE PARTITION(S) commands
999 */
1000typedef struct PartitionCmd
1001{
1002 NodeTag type;
1003
1004 /* name of partition to attach/detach/merge/split */
1005 RangeVar *name;
1006
1007 /* FOR VALUES, if attaching */
1009
1010 /*
1011 * list of partitions to be split/merged, used in ALTER TABLE MERGE
1012 * PARTITIONS and ALTER TABLE SPLIT PARTITIONS. For merge partitions,
1013 * partlist is a list of RangeVar; For split partition, it is a list of
1014 * SinglePartitionSpec.
1015 */
1016 List *partlist;
1017
1018 bool concurrent;
1019} PartitionCmd;
1020
1021/*
1022 * Nodes for graph pattern
1023 */
1024
1025typedef struct GraphPattern
1026{
1027 NodeTag type;
1030} GraphPattern;
1031
1032typedef enum GraphElementPatternKind
1033{
1038 PAREN_EXPR,
1040
1041#define IS_EDGE_PATTERN(kind) ((kind) == EDGE_PATTERN_ANY || \
1042 (kind) == EDGE_PATTERN_RIGHT || \
1043 (kind) == EDGE_PATTERN_LEFT)
1044
1045typedef struct GraphElementPattern
1046{
1047 NodeTag type;
1049 const char *variable;
1050 Node *labelexpr;
1051 List *subexpr;
1056
1057/****************************************************************************
1058 * Nodes for a Query tree
1059 ****************************************************************************/
1060
1061/*--------------------
1062 * RangeTblEntry -
1063 * A range table is a List of RangeTblEntry nodes.
1064 *
1065 * A range table entry may represent a plain relation, a sub-select in
1066 * FROM, or the result of a JOIN clause. (Only explicit JOIN syntax
1067 * produces an RTE, not the implicit join resulting from multiple FROM
1068 * items. This is because we only need the RTE to deal with SQL features
1069 * like outer joins and join-output-column aliasing.) Other special
1070 * RTE types also exist, as indicated by RTEKind.
1071 *
1072 * Note that we consider RTE_RELATION to cover anything that has a pg_class
1073 * entry. relkind distinguishes the sub-cases.
1074 *
1075 * alias is an Alias node representing the AS alias-clause attached to the
1076 * FROM expression, or NULL if no clause.
1077 *
1078 * eref is the table reference name and column reference names (either
1079 * real or aliases). Note that system columns (OID etc) are not included
1080 * in the column list.
1081 * eref->aliasname is required to be present, and should generally be used
1082 * to identify the RTE for error messages etc.
1083 *
1084 * In RELATION RTEs, the colnames in both alias and eref are indexed by
1085 * physical attribute number; this means there must be colname entries for
1086 * dropped columns. When building an RTE we insert empty strings ("") for
1087 * dropped columns. Note however that a stored rule may have nonempty
1088 * colnames for columns dropped since the rule was created (and for that
1089 * matter the colnames might be out of date due to column renamings).
1090 * The same comments apply to FUNCTION RTEs when a function's return type
1091 * is a named composite type.
1092 *
1093 * In JOIN RTEs, the colnames in both alias and eref are one-to-one with
1094 * joinaliasvars entries. A JOIN RTE will omit columns of its inputs when
1095 * those columns are known to be dropped at parse time. Again, however,
1096 * a stored rule might contain entries for columns dropped since the rule
1097 * was created. (This is only possible for columns not actually referenced
1098 * in the rule.) When loading a stored rule, we replace the joinaliasvars
1099 * items for any such columns with null pointers. (We can't simply delete
1100 * them from the joinaliasvars list, because that would affect the attnums
1101 * of Vars referencing the rest of the list.)
1102 *
1103 * inFromCl marks those range variables that are listed in the FROM clause.
1104 * It's false for RTEs that are added to a query behind the scenes, such
1105 * as the NEW and OLD variables for a rule, or the subqueries of a UNION.
1106 * This flag is not used during parsing (except in transformLockingClause,
1107 * q.v.); the parser now uses a separate "namespace" data structure to
1108 * control visibility. But it is needed by ruleutils.c to determine
1109 * whether RTEs should be shown in decompiled queries.
1110 *
1111 * securityQuals is a list of security barrier quals (boolean expressions),
1112 * to be tested in the listed order before returning a row from the
1113 * relation. It is always NIL in parser output. Entries are added by the
1114 * rewriter to implement security-barrier views and/or row-level security.
1115 * Note that the planner turns each boolean expression into an implicitly
1116 * AND'ed sublist, as is its usual habit with qualification expressions.
1117 *--------------------
1118 */
1119typedef enum RTEKind
1120{
1121 RTE_RELATION, /* ordinary relation reference */
1122 RTE_SUBQUERY, /* subquery in FROM */
1123 RTE_JOIN, /* join */
1124 RTE_FUNCTION, /* function in FROM */
1125 RTE_TABLEFUNC, /* TableFunc(.., column list) */
1126 RTE_VALUES, /* VALUES (<exprlist>), (<exprlist>), ... */
1127 RTE_CTE, /* common table expr (WITH list element) */
1128 RTE_NAMEDTUPLESTORE, /* tuplestore, e.g. for AFTER triggers */
1129 RTE_GRAPH_TABLE, /* GRAPH_TABLE clause */
1130 RTE_RESULT, /* RTE represents an empty FROM clause; such
1131 * RTEs are added by the planner, they're not
1132 * present during parsing or rewriting */
1133 RTE_GROUP, /* the grouping step */
1134} RTEKind;
1135
1136typedef struct RangeTblEntry
1137{
1139
1140 NodeTag type;
1141
1142 /*
1143 * Fields valid in all RTEs:
1144 *
1145 * put alias + eref first to make dump more legible
1146 */
1147 /* user-written alias clause, if any */
1149
1150 /*
1151 * Expanded reference names. This uses a custom query jumble function so
1152 * that the table name is included in the computation, but not its list of
1153 * columns.
1154 */
1156
1157 RTEKind rtekind; /* see above */
1158
1159 /*
1160 * Fields valid for a plain relation RTE (else zero):
1161 *
1162 * inh is true for relation references that should be expanded to include
1163 * inheritance children, if the rel has any. In the parser, this will
1164 * only be true for RTE_RELATION entries. The planner also uses this
1165 * field to mark RTE_SUBQUERY entries that contain UNION ALL queries that
1166 * it has flattened into pulled-up subqueries (creating a structure much
1167 * like the effects of inheritance).
1168 *
1169 * rellockmode is really LOCKMODE, but it's declared int to avoid having
1170 * to include lock-related headers here. It must be RowExclusiveLock if
1171 * the RTE is an INSERT/UPDATE/DELETE/MERGE target, else RowShareLock if
1172 * the RTE is a SELECT FOR UPDATE/FOR SHARE target, else AccessShareLock.
1173 *
1174 * Note: in some cases, rule expansion may result in RTEs that are marked
1175 * with RowExclusiveLock even though they are not the target of the
1176 * current query; this happens if a DO ALSO rule simply scans the original
1177 * target table. We leave such RTEs with their original lockmode so as to
1178 * avoid getting an additional, lesser lock.
1179 *
1180 * perminfoindex is 1-based index of the RTEPermissionInfo belonging to
1181 * this RTE in the containing struct's list of same; 0 if permissions need
1182 * not be checked for this RTE.
1183 *
1184 * As a special case, relid, relkind, rellockmode, and perminfoindex can
1185 * also be set (nonzero) in an RTE_SUBQUERY RTE. This occurs when we
1186 * convert an RTE_RELATION RTE naming a view into an RTE_SUBQUERY
1187 * containing the view's query. We still need to perform run-time locking
1188 * and permission checks on the view, even though it's not directly used
1189 * in the query anymore, and the most expedient way to do that is to
1190 * retain these fields from the old state of the RTE.
1191 *
1192 * As a special case, RTE_NAMEDTUPLESTORE can also set relid to indicate
1193 * that the tuple format of the tuplestore is the same as the referenced
1194 * relation. This allows plans referencing AFTER trigger transition
1195 * tables to be invalidated if the underlying table is altered.
1196 */
1197 /* OID of the relation */
1199 /* inheritance requested? */
1200 bool inh;
1201 /* relation kind (see pg_class.relkind) */
1202 char relkind pg_node_attr(query_jumble_ignore);
1203 /* lock level that query requires on the rel */
1205 /* index of RTEPermissionInfo entry, or 0 */
1207 /* sampling info, or NULL */
1209
1210 /*
1211 * Fields valid for a subquery RTE (else NULL):
1212 */
1213 /* the sub-query */
1214 Query *subquery;
1215 /* is from security_barrier view? */
1216 bool security_barrier pg_node_attr(query_jumble_ignore);
1217
1218 /*
1219 * Fields valid for a join RTE (else NULL/zero):
1220 *
1221 * joinaliasvars is a list of (usually) Vars corresponding to the columns
1222 * of the join result. An alias Var referencing column K of the join
1223 * result can be replaced by the K'th element of joinaliasvars --- but to
1224 * simplify the task of reverse-listing aliases correctly, we do not do
1225 * that until planning time. In detail: an element of joinaliasvars can
1226 * be a Var of one of the join's input relations, or such a Var with an
1227 * implicit coercion to the join's output column type, or a COALESCE
1228 * expression containing the two input column Vars (possibly coerced).
1229 * Elements beyond the first joinmergedcols entries are always just Vars,
1230 * and are never referenced from elsewhere in the query (that is, join
1231 * alias Vars are generated only for merged columns). We keep these
1232 * entries only because they're needed in expandRTE() and similar code.
1233 *
1234 * Vars appearing within joinaliasvars are marked with varnullingrels sets
1235 * that describe the nulling effects of this join and lower ones. This is
1236 * essential for FULL JOIN cases, because the COALESCE expression only
1237 * describes the semantics correctly if its inputs have been nulled by the
1238 * join. For other cases, it allows expandRTE() to generate a valid
1239 * representation of the join's output without consulting additional
1240 * parser state.
1241 *
1242 * Within a Query loaded from a stored rule, it is possible for non-merged
1243 * joinaliasvars items to be null pointers, which are placeholders for
1244 * (necessarily unreferenced) columns dropped since the rule was made.
1245 * Also, once planning begins, joinaliasvars items can be almost anything,
1246 * as a result of subquery-flattening substitutions.
1247 *
1248 * joinleftcols is an integer list of physical column numbers of the left
1249 * join input rel that are included in the join; likewise joinrighttcols
1250 * for the right join input rel. (Which rels those are can be determined
1251 * from the associated JoinExpr.) If the join is USING/NATURAL, then the
1252 * first joinmergedcols entries in each list identify the merged columns.
1253 * The merged columns come first in the join output, then remaining
1254 * columns of the left input, then remaining columns of the right.
1255 *
1256 * Note that input columns could have been dropped after creation of a
1257 * stored rule, if they are not referenced in the query (in particular,
1258 * merged columns could not be dropped); this is not accounted for in
1259 * joinleftcols/joinrighttcols.
1260 */
1262 /* number of merged (JOIN USING) columns */
1264 /* list of alias-var expansions */
1266 /* left-side input column numbers */
1268 /* right-side input column numbers */
1270
1271 /*
1272 * join_using_alias is an alias clause attached directly to JOIN/USING. It
1273 * is different from the alias field (above) in that it does not hide the
1274 * range variables of the tables being joined.
1275 */
1277
1278 /*
1279 * Fields valid for a function RTE (else NIL/zero):
1280 *
1281 * When funcordinality is true, the eref->colnames list includes an alias
1282 * for the ordinality column. The ordinality column is otherwise
1283 * implicit, and must be accounted for "by hand" in places such as
1284 * expandRTE().
1285 */
1286 /* list of RangeTblFunction nodes */
1287 List *functions;
1288 /* is this called WITH ORDINALITY? */
1289 bool funcordinality;
1290
1291 /*
1292 * Fields valid for a TableFunc RTE (else NULL):
1293 */
1295
1296 /*
1297 * Fields valid for a graph table RTE (else NULL):
1298 */
1301
1302 /*
1303 * Fields valid for a values RTE (else NIL):
1304 */
1305 /* list of expression lists */
1307
1308 /*
1309 * Fields valid for a CTE RTE (else NULL/zero):
1310 */
1311 /* name of the WITH list item */
1312 char *ctename;
1313 /* number of query levels up */
1315 /* is this a recursive self-reference? */
1317
1318 /*
1319 * Fields valid for CTE, VALUES, ENR, and TableFunc RTEs (else NIL):
1320 *
1321 * We need these for CTE RTEs so that the types of self-referential
1322 * columns are well-defined. For VALUES RTEs, storing these explicitly
1323 * saves having to re-determine the info by scanning the values_lists. For
1324 * ENRs, we store the types explicitly here (we could get the information
1325 * from the catalogs if 'relid' was supplied, but we'd still need these
1326 * for TupleDesc-based ENRs, so we might as well always store the type
1327 * info here). For TableFuncs, these fields are redundant with data in
1328 * the TableFunc node, but keeping them here allows some code sharing with
1329 * the other cases.
1330 *
1331 * For ENRs only, we have to consider the possibility of dropped columns.
1332 * A dropped column is included in these lists, but it will have zeroes in
1333 * all three lists (as well as an empty-string entry in eref). Testing
1334 * for zero coltype is the standard way to detect a dropped column.
1335 */
1336 /* OID list of column type OIDs */
1338 /* integer list of column typmods */
1340 /* OID list of column collation OIDs */
1342
1343 /*
1344 * Fields valid for ENR RTEs (else NULL/zero):
1345 */
1346 /* name of ephemeral named relation */
1347 char *enrname;
1348 /* estimated or actual from caller */
1350
1351 /*
1352 * Fields valid for a GROUP RTE (else NIL):
1353 */
1354 /* list of grouping expressions */
1356
1357 /*
1358 * Fields valid in all RTEs:
1359 */
1360 /* was LATERAL specified? */
1361 bool lateral pg_node_attr(query_jumble_ignore);
1362 /* present in FROM clause? */
1364 /* security barrier quals to apply, if any */
1367
1368/*
1369 * RTEPermissionInfo
1370 * Per-relation information for permission checking. Added to the Query
1371 * node by the parser when adding the corresponding RTE to the query
1372 * range table and subsequently editorialized on by the rewriter if
1373 * needed after rule expansion.
1374 *
1375 * Only the relations directly mentioned in the query are checked for
1376 * access permissions by the core executor, so only their RTEPermissionInfos
1377 * are present in the Query. However, extensions may want to check inheritance
1378 * children too, depending on the value of rte->inh, so it's copied in 'inh'
1379 * for their perusal.
1380 *
1381 * requiredPerms and checkAsUser specify run-time access permissions checks
1382 * to be performed at query startup. The user must have *all* of the
1383 * permissions that are OR'd together in requiredPerms (never 0!). If
1384 * checkAsUser is not zero, then do the permissions checks using the access
1385 * rights of that user, not the current effective user ID. (This allows rules
1386 * to act as setuid gateways.)
1387 *
1388 * For SELECT/INSERT/UPDATE permissions, if the user doesn't have table-wide
1389 * permissions then it is sufficient to have the permissions on all columns
1390 * identified in selectedCols (for SELECT) and/or insertedCols and/or
1391 * updatedCols (INSERT with ON CONFLICT DO UPDATE may have all 3).
1392 * selectedCols, insertedCols and updatedCols are bitmapsets, which cannot have
1393 * negative integer members, so we subtract FirstLowInvalidHeapAttributeNumber
1394 * from column numbers before storing them in these fields. A whole-row Var
1395 * reference is represented by setting the bit for InvalidAttrNumber.
1396 *
1397 * updatedCols is also used in some other places, for example, to determine
1398 * which triggers to fire and in FDWs to know which changed columns they need
1399 * to ship off.
1400 */
1401typedef struct RTEPermissionInfo
1402{
1403 NodeTag type;
1404
1405 Oid relid; /* relation OID */
1406 bool inh; /* separately check inheritance children? */
1407 AclMode requiredPerms; /* bitmask of required access permissions */
1408 Oid checkAsUser; /* if valid, check access as this role */
1409 Bitmapset *selectedCols; /* columns needing SELECT permission */
1410 Bitmapset *insertedCols; /* columns needing INSERT permission */
1411 Bitmapset *updatedCols; /* columns needing UPDATE permission */
1413
1414/*
1415 * RangeTblFunction -
1416 * RangeTblEntry subsidiary data for one function in a FUNCTION RTE.
1417 *
1418 * If the function had a column definition list (required for an
1419 * otherwise-unspecified RECORD result), funccolnames lists the names given
1420 * in the definition list, funccoltypes lists their declared column types,
1421 * funccoltypmods lists their typmods, funccolcollations their collations.
1422 * Otherwise, those fields are NIL.
1423 *
1424 * Notice we don't attempt to store info about the results of functions
1425 * returning named composite types, because those can change from time to
1426 * time. We do however remember how many columns we thought the type had
1427 * (including dropped columns!), so that we can successfully ignore any
1428 * columns added after the query was parsed.
1429 *
1430 * The query jumbling only needs to track the function expression.
1431 */
1432typedef struct RangeTblFunction
1433{
1434 NodeTag type;
1435
1436 Node *funcexpr; /* expression tree for func call */
1437 /* number of columns it contributes to RTE */
1439 /* These fields record the contents of a column definition list, if any: */
1440 /* column names (list of String) */
1442 /* OID list of column type OIDs */
1444 /* integer list of column typmods */
1446 /* OID list of column collation OIDs */
1448
1449 /* This is set during planning for use by the executor: */
1450 /* PARAM_EXEC Param IDs affecting this func */
1453
1454/*
1455 * TableSampleClause - TABLESAMPLE appearing in a transformed FROM clause
1456 *
1457 * Unlike RangeTableSample, this is a subnode of the relevant RangeTblEntry.
1458 */
1459typedef struct TableSampleClause
1460{
1461 NodeTag type;
1462 Oid tsmhandler; /* OID of the tablesample handler function */
1463 List *args; /* tablesample argument expression(s) */
1464 Expr *repeatable; /* REPEATABLE expression, or NULL if none */
1466
1467/*
1468 * WithCheckOption -
1469 * representation of WITH CHECK OPTION checks to be applied to new tuples
1470 * when inserting/updating an auto-updatable view, or RLS WITH CHECK
1471 * policies to be applied when inserting/updating a relation with RLS.
1472 */
1473typedef enum WCOKind
1474{
1475 WCO_VIEW_CHECK, /* WCO on an auto-updatable view */
1476 WCO_RLS_INSERT_CHECK, /* RLS INSERT WITH CHECK policy */
1477 WCO_RLS_UPDATE_CHECK, /* RLS UPDATE WITH CHECK policy */
1478 WCO_RLS_CONFLICT_CHECK, /* RLS ON CONFLICT DO SELECT/UPDATE USING
1479 * policy */
1480 WCO_RLS_MERGE_UPDATE_CHECK, /* RLS MERGE UPDATE USING policy */
1481 WCO_RLS_MERGE_DELETE_CHECK, /* RLS MERGE DELETE USING policy */
1482} WCOKind;
1483
1484typedef struct WithCheckOption
1485{
1486 NodeTag type;
1487 WCOKind kind; /* kind of WCO */
1488 char *relname; /* name of relation that specified the WCO */
1489 char *polname; /* name of RLS policy being checked */
1490 Node *qual; /* constraint qual to check */
1491 bool cascaded; /* true for a cascaded WCO on a view */
1493
1494/*
1495 * SortGroupClause -
1496 * representation of ORDER BY, GROUP BY, PARTITION BY,
1497 * DISTINCT, DISTINCT ON items
1498 *
1499 * You might think that ORDER BY is only interested in defining ordering,
1500 * and GROUP/DISTINCT are only interested in defining equality. However,
1501 * one way to implement grouping is to sort and then apply a "uniq"-like
1502 * filter. So it's also interesting to keep track of possible sort operators
1503 * for GROUP/DISTINCT, and in particular to try to sort for the grouping
1504 * in a way that will also yield a requested ORDER BY ordering. So we need
1505 * to be able to compare ORDER BY and GROUP/DISTINCT lists, which motivates
1506 * the decision to give them the same representation.
1507 *
1508 * tleSortGroupRef must match ressortgroupref of exactly one entry of the
1509 * query's targetlist; that is the expression to be sorted or grouped by.
1510 * eqop is the OID of the equality operator.
1511 * sortop is the OID of the ordering operator (a "<" or ">" operator),
1512 * or InvalidOid if not available.
1513 * nulls_first means about what you'd expect. If sortop is InvalidOid
1514 * then nulls_first is meaningless and should be set to false.
1515 * hashable is true if eqop is hashable (note this condition also depends
1516 * on the datatype of the input expression).
1517 *
1518 * In an ORDER BY item, all fields must be valid. (The eqop isn't essential
1519 * here, but it's cheap to get it along with the sortop, and requiring it
1520 * to be valid eases comparisons to grouping items.) Note that this isn't
1521 * actually enough information to determine an ordering: if the sortop is
1522 * collation-sensitive, a collation OID is needed too. We don't store the
1523 * collation in SortGroupClause because it's not available at the time the
1524 * parser builds the SortGroupClause; instead, consult the exposed collation
1525 * of the referenced targetlist expression to find out what it is.
1526 *
1527 * In a grouping item, eqop must be valid. If the eqop is a btree equality
1528 * operator, then sortop should be set to a compatible ordering operator.
1529 * We prefer to set eqop/sortop/nulls_first to match any ORDER BY item that
1530 * the query presents for the same tlist item. If there is none, we just
1531 * use the default ordering op for the datatype.
1532 *
1533 * If the tlist item's type has a hash opclass but no btree opclass, then
1534 * we will set eqop to the hash equality operator, sortop to InvalidOid,
1535 * and nulls_first to false. A grouping item of this kind can only be
1536 * implemented by hashing, and of course it'll never match an ORDER BY item.
1537 *
1538 * The hashable flag is provided since we generally have the requisite
1539 * information readily available when the SortGroupClause is constructed,
1540 * and it's relatively expensive to get it again later. Note there is no
1541 * need for a "sortable" flag since OidIsValid(sortop) serves the purpose.
1542 *
1543 * A query might have both ORDER BY and DISTINCT (or DISTINCT ON) clauses.
1544 * In SELECT DISTINCT, the distinctClause list is as long or longer than the
1545 * sortClause list, while in SELECT DISTINCT ON it's typically shorter.
1546 * The two lists must match up to the end of the shorter one --- the parser
1547 * rearranges the distinctClause if necessary to make this true. (This
1548 * restriction ensures that only one sort step is needed to both satisfy the
1549 * ORDER BY and set up for the Unique step. This is semantically necessary
1550 * for DISTINCT ON, and presents no real drawback for DISTINCT.)
1551 */
1552typedef struct SortGroupClause
1553{
1554 NodeTag type;
1555 Index tleSortGroupRef; /* reference into targetlist */
1556 Oid eqop; /* the equality operator ('=' op) */
1557 Oid sortop; /* the ordering operator ('<' op), or 0 */
1558 bool reverse_sort; /* is sortop a "greater than" operator? */
1559 bool nulls_first; /* do NULLs come before normal values? */
1560 /* can eqop be implemented by hashing? */
1561 bool hashable pg_node_attr(query_jumble_ignore);
1563
1564/*
1565 * GroupingSet -
1566 * representation of CUBE, ROLLUP and GROUPING SETS clauses
1567 *
1568 * In a Query with grouping sets, the groupClause contains a flat list of
1569 * SortGroupClause nodes for each distinct expression used. The actual
1570 * structure of the GROUP BY clause is given by the groupingSets tree.
1571 *
1572 * In the raw parser output, GroupingSet nodes (of all types except SIMPLE
1573 * which is not used) are potentially mixed in with the expressions in the
1574 * groupClause of the SelectStmt. (An expression can't contain a GroupingSet,
1575 * but a list may mix GroupingSet and expression nodes.) At this stage, the
1576 * content of each node is a list of expressions, some of which may be RowExprs
1577 * which represent sublists rather than actual row constructors, and nested
1578 * GroupingSet nodes where legal in the grammar. The structure directly
1579 * reflects the query syntax.
1580 *
1581 * In parse analysis, the transformed expressions are used to build the tlist
1582 * and groupClause list (of SortGroupClause nodes), and the groupingSets tree
1583 * is eventually reduced to a fixed format:
1584 *
1585 * EMPTY nodes represent (), and obviously have no content
1586 *
1587 * SIMPLE nodes represent a list of one or more expressions to be treated as an
1588 * atom by the enclosing structure; the content is an integer list of
1589 * ressortgroupref values (see SortGroupClause)
1590 *
1591 * CUBE and ROLLUP nodes contain a list of one or more SIMPLE nodes.
1592 *
1593 * SETS nodes contain a list of EMPTY, SIMPLE, CUBE or ROLLUP nodes, but after
1594 * parse analysis they cannot contain more SETS nodes; enough of the syntactic
1595 * transforms of the spec have been applied that we no longer have arbitrarily
1596 * deep nesting (though we still preserve the use of cube/rollup).
1597 *
1598 * Note that if the groupingSets tree contains no SIMPLE nodes (only EMPTY
1599 * nodes at the leaves), then the groupClause will be empty, but this is still
1600 * an aggregation query (similar to using aggs or HAVING without GROUP BY).
1601 *
1602 * As an example, the following clause:
1603 *
1604 * GROUP BY GROUPING SETS ((a,b), CUBE(c,(d,e)))
1605 *
1606 * looks like this after raw parsing:
1607 *
1608 * SETS( RowExpr(a,b) , CUBE( c, RowExpr(d,e) ) )
1609 *
1610 * and parse analysis converts it to:
1611 *
1612 * SETS( SIMPLE(1,2), CUBE( SIMPLE(3), SIMPLE(4,5) ) )
1613 */
1614typedef enum GroupingSetKind
1615{
1622
1623typedef struct GroupingSet
1624{
1625 NodeTag type;
1627 List *content;
1629} GroupingSet;
1630
1631/*
1632 * WindowClause -
1633 * transformed representation of WINDOW and OVER clauses
1634 *
1635 * A parsed Query's windowClause list contains these structs. "name" is set
1636 * if the clause originally came from WINDOW, and is NULL if it originally
1637 * was an OVER clause (but note that we collapse out duplicate OVERs).
1638 * partitionClause and orderClause are lists of SortGroupClause structs.
1639 * partitionClause is sanitized by the query planner to remove any columns or
1640 * expressions belonging to redundant PathKeys.
1641 * If we have RANGE with offset PRECEDING/FOLLOWING, the semantics of that are
1642 * specified by startInRangeFunc/inRangeColl/inRangeAsc/inRangeNullsFirst
1643 * for the start offset, or endInRangeFunc/inRange* for the end offset.
1644 * winref is an ID number referenced by WindowFunc nodes; it must be unique
1645 * among the members of a Query's windowClause list.
1646 * When refname isn't null, the partitionClause is always copied from there;
1647 * the orderClause might or might not be copied (see copiedOrder); the framing
1648 * options are never copied, per spec.
1649 *
1650 * The information relevant for the query jumbling is the partition clause
1651 * type and its bounds.
1652 */
1653typedef struct WindowClause
1654{
1655 NodeTag type;
1656 /* window name (NULL in an OVER clause) */
1658 /* referenced window name, if any */
1659 char *refname pg_node_attr(query_jumble_ignore);
1660 List *partitionClause; /* PARTITION BY list */
1661 /* ORDER BY list */
1663 int frameOptions; /* frame_clause options, see WindowDef */
1664 Node *startOffset; /* expression for starting bound, if any */
1665 Node *endOffset; /* expression for ending bound, if any */
1666 /* in_range function for startOffset */
1667 Oid startInRangeFunc pg_node_attr(query_jumble_ignore);
1668 /* in_range function for endOffset */
1669 Oid endInRangeFunc pg_node_attr(query_jumble_ignore);
1670 /* collation for in_range tests */
1672 /* use ASC sort order for in_range tests? */
1673 bool inRangeAsc pg_node_attr(query_jumble_ignore);
1674 /* nulls sort first for in_range tests? */
1675 bool inRangeNullsFirst pg_node_attr(query_jumble_ignore);
1676 Index winref; /* ID referenced by window functions */
1677 /* did we copy orderClause from refname? */
1679} WindowClause;
1680
1681/*
1682 * RowMarkClause -
1683 * parser output representation of FOR [KEY] UPDATE/SHARE clauses
1684 *
1685 * Query.rowMarks contains a separate RowMarkClause node for each relation
1686 * identified as a FOR [KEY] UPDATE/SHARE target. If one of these clauses
1687 * is applied to a subquery, we generate RowMarkClauses for all normal and
1688 * subquery rels in the subquery, but they are marked pushedDown = true to
1689 * distinguish them from clauses that were explicitly written at this query
1690 * level. Also, Query.hasForUpdate tells whether there were explicit FOR
1691 * UPDATE/SHARE/KEY SHARE clauses in the current query level.
1692 */
1693typedef struct RowMarkClause
1694{
1695 NodeTag type;
1696 Index rti; /* range table index of target relation */
1698 LockWaitPolicy waitPolicy; /* NOWAIT and SKIP LOCKED */
1699 bool pushedDown; /* pushed down from higher query level? */
1701
1702/*
1703 * ForPortionOfClause
1704 * representation of FOR PORTION OF <range-name> FROM <target-start> TO
1705 * <target-end> or FOR PORTION OF <range-name> (<target>)
1706 */
1707typedef struct ForPortionOfClause
1708{
1709 NodeTag type;
1710 char *range_name; /* column name of the range/multirange */
1711 ParseLoc location; /* token location, or -1 if unknown */
1712 ParseLoc target_location; /* token location, or -1 if unknown */
1713 Node *target; /* Expr from FOR PORTION OF col (...) syntax */
1714 Node *target_start; /* Expr from FROM ... TO ... syntax */
1715 Node *target_end; /* Expr from FROM ... TO ... syntax */
1717
1718/*
1719 * WithClause -
1720 * representation of WITH clause
1721 *
1722 * Note: WithClause does not propagate into the Query representation;
1723 * but CommonTableExpr does.
1724 */
1725typedef struct WithClause
1726{
1727 NodeTag type;
1728 List *ctes; /* list of CommonTableExprs */
1729 bool recursive; /* true = WITH RECURSIVE */
1730 ParseLoc location; /* token location, or -1 if unknown */
1731} WithClause;
1732
1733/*
1734 * InferClause -
1735 * ON CONFLICT unique index inference clause
1736 *
1737 * Note: InferClause does not propagate into the Query representation.
1738 */
1739typedef struct InferClause
1740{
1741 NodeTag type;
1742 List *indexElems; /* IndexElems to infer unique index */
1743 Node *whereClause; /* qualification (partial-index predicate) */
1744 char *conname; /* Constraint name, or NULL if unnamed */
1745 ParseLoc location; /* token location, or -1 if unknown */
1746} InferClause;
1747
1748/*
1749 * OnConflictClause -
1750 * representation of ON CONFLICT clause
1751 *
1752 * Note: OnConflictClause does not propagate into the Query representation.
1753 */
1754typedef struct OnConflictClause
1755{
1756 NodeTag type;
1757 OnConflictAction action; /* DO NOTHING, SELECT, or UPDATE */
1758 InferClause *infer; /* Optional index inference clause */
1759 LockClauseStrength lockStrength; /* lock strength for DO SELECT */
1760 List *targetList; /* target list (of ResTarget) for DO UPDATE */
1761 Node *whereClause; /* qualifications */
1762 ParseLoc location; /* token location, or -1 if unknown */
1764
1765/*
1766 * CommonTableExpr -
1767 * representation of WITH list element
1768 */
1769
1770typedef enum CTEMaterialize
1771{
1772 CTEMaterializeDefault, /* no option specified */
1773 CTEMaterializeAlways, /* MATERIALIZED */
1774 CTEMaterializeNever, /* NOT MATERIALIZED */
1776
1777typedef struct CTESearchClause
1778{
1779 NodeTag type;
1782 char *search_seq_column;
1785
1786typedef struct CTECycleClause
1787{
1788 NodeTag type;
1790 char *cycle_mark_column;
1793 char *cycle_path_column;
1795 /* These fields are set during parse analysis: */
1796 Oid cycle_mark_type; /* common type of _value and _default */
1799 Oid cycle_mark_neop; /* <> operator for type */
1801
1802typedef struct CommonTableExpr
1803{
1804 NodeTag type;
1805
1806 /*
1807 * Query name (never qualified). The string name is included in the query
1808 * jumbling because RTE_CTE RTEs need it.
1809 */
1810 char *ctename;
1811 /* optional list of column names */
1813 CTEMaterialize ctematerialized; /* is this an optimization fence? */
1814 /* SelectStmt/InsertStmt/etc before parse analysis, Query afterwards: */
1815 Node *ctequery; /* the CTE's subquery */
1818 ParseLoc location; /* token location, or -1 if unknown */
1819 /* These fields are set during parse analysis: */
1820 /* is this CTE actually recursive? */
1822
1823 /*
1824 * Number of RTEs referencing this CTE (excluding internal
1825 * self-references), irrelevant for query jumbling.
1826 */
1828 /* list of output column names */
1830 /* OID list of output column type OIDs */
1832 /* integer list of output column typmods */
1834 /* OID list of column collation OIDs */
1837
1838/* Convenience macro to get the output tlist of a CTE's query */
1839#define GetCTETargetList(cte) \
1840 (AssertMacro(IsA((cte)->ctequery, Query)), \
1841 ((Query *) (cte)->ctequery)->commandType == CMD_SELECT ? \
1842 ((Query *) (cte)->ctequery)->targetList : \
1843 ((Query *) (cte)->ctequery)->returningList)
1844
1845/*
1846 * MergeWhenClause -
1847 * raw parser representation of a WHEN clause in a MERGE statement
1848 *
1849 * This is transformed into MergeAction by parse analysis
1850 */
1851typedef struct MergeWhenClause
1852{
1853 NodeTag type;
1854 MergeMatchKind matchKind; /* MATCHED/NOT MATCHED BY SOURCE/TARGET */
1855 CmdType commandType; /* INSERT/UPDATE/DELETE/DO NOTHING */
1856 OverridingKind override; /* OVERRIDING clause */
1857 Node *condition; /* WHEN conditions (raw parser) */
1858 List *targetList; /* INSERT/UPDATE targetlist */
1859 /* the following members are only used in INSERT actions */
1860 List *values; /* VALUES to INSERT, or NULL */
1862
1863/*
1864 * ReturningOptionKind -
1865 * Possible kinds of option in RETURNING WITH(...) list
1866 *
1867 * Currently, this is used only for specifying OLD/NEW aliases.
1868 */
1869typedef enum ReturningOptionKind
1870{
1871 RETURNING_OPTION_OLD, /* specify alias for OLD in RETURNING */
1872 RETURNING_OPTION_NEW, /* specify alias for NEW in RETURNING */
1874
1875/*
1876 * ReturningOption -
1877 * An individual option in the RETURNING WITH(...) list
1878 */
1879typedef struct ReturningOption
1880{
1881 NodeTag type;
1882 ReturningOptionKind option; /* specified option */
1883 char *value; /* option's value */
1884 ParseLoc location; /* token location, or -1 if unknown */
1886
1887/*
1888 * ReturningClause -
1889 * List of RETURNING expressions, together with any WITH(...) options
1890 */
1891typedef struct ReturningClause
1892{
1893 NodeTag type;
1894 List *options; /* list of ReturningOption elements */
1895 List *exprs; /* list of expressions to return */
1897
1898/*
1899 * TriggerTransition -
1900 * representation of transition row or table naming clause
1901 *
1902 * Only transition tables are initially supported in the syntax, and only for
1903 * AFTER triggers, but other permutations are accepted by the parser so we can
1904 * give a meaningful message from C code.
1905 */
1906typedef struct TriggerTransition
1907{
1908 NodeTag type;
1909 char *name;
1910 bool isNew;
1911 bool isTable;
1913
1914/* Nodes for SQL/JSON support */
1915
1916/*
1917 * JsonOutput -
1918 * representation of JSON output clause (RETURNING type [FORMAT format])
1919 */
1920typedef struct JsonOutput
1921{
1922 NodeTag type;
1923 TypeName *typeName; /* RETURNING type name, if specified */
1924 JsonReturning *returning; /* RETURNING FORMAT clause and type Oids */
1925} JsonOutput;
1926
1927/*
1928 * JsonArgument -
1929 * representation of argument from JSON PASSING clause
1930 */
1931typedef struct JsonArgument
1932{
1933 NodeTag type;
1934 JsonValueExpr *val; /* argument value expression */
1935 char *name; /* argument name */
1936} JsonArgument;
1937
1938/*
1939 * JsonQuotes -
1940 * representation of [KEEP|OMIT] QUOTES clause for JSON_QUERY()
1941 */
1942typedef enum JsonQuotes
1943{
1944 JS_QUOTES_UNSPEC, /* unspecified */
1945 JS_QUOTES_KEEP, /* KEEP QUOTES */
1946 JS_QUOTES_OMIT, /* OMIT QUOTES */
1947} JsonQuotes;
1948
1949/*
1950 * JsonFuncExpr -
1951 * untransformed representation of function expressions for
1952 * SQL/JSON query functions
1953 */
1954typedef struct JsonFuncExpr
1955{
1956 NodeTag type;
1957 JsonExprOp op; /* expression type */
1958 char *column_name; /* JSON_TABLE() column name or NULL if this is
1959 * not for a JSON_TABLE() */
1960 JsonValueExpr *context_item; /* context item expression */
1961 Node *pathspec; /* JSON path specification expression */
1962 List *passing; /* list of PASSING clause arguments, if any */
1963 JsonOutput *output; /* output clause, if specified */
1964 JsonBehavior *on_empty; /* ON EMPTY behavior */
1965 JsonBehavior *on_error; /* ON ERROR behavior */
1966 JsonWrapper wrapper; /* array wrapper behavior (JSON_QUERY only) */
1967 JsonQuotes quotes; /* omit or keep quotes? (JSON_QUERY only) */
1968 ParseLoc location; /* token location, or -1 if unknown */
1969} JsonFuncExpr;
1970
1971/*
1972 * JsonTablePathSpec
1973 * untransformed specification of JSON path expression with an optional
1974 * name
1975 */
1976typedef struct JsonTablePathSpec
1977{
1978 NodeTag type;
1979
1980 Node *string;
1981 char *name;
1983 ParseLoc location; /* location of 'string' */
1985
1986/*
1987 * JsonTable -
1988 * untransformed representation of JSON_TABLE
1989 */
1990typedef struct JsonTable
1991{
1992 NodeTag type;
1993 JsonValueExpr *context_item; /* context item expression */
1994 JsonTablePathSpec *pathspec; /* JSON path specification */
1995 List *passing; /* list of PASSING clause arguments, if any */
1996 List *columns; /* list of JsonTableColumn */
1997 JsonBehavior *on_error; /* ON ERROR behavior */
1998 Alias *alias; /* table alias in FROM clause */
1999 bool lateral; /* does it have LATERAL prefix? */
2000 ParseLoc location; /* token location, or -1 if unknown */
2001} JsonTable;
2002
2003/*
2004 * JsonTableColumnType -
2005 * enumeration of JSON_TABLE column types
2006 */
2007typedef enum JsonTableColumnType
2008{
2011 JTC_EXISTS,
2013 JTC_NESTED,
2015
2016/*
2017 * JsonTableColumn -
2018 * untransformed representation of JSON_TABLE column
2019 */
2020typedef struct JsonTableColumn
2021{
2022 NodeTag type;
2023 JsonTableColumnType coltype; /* column type */
2024 char *name; /* column name */
2025 TypeName *typeName; /* column type name */
2026 JsonTablePathSpec *pathspec; /* JSON path specification */
2027 JsonFormat *format; /* JSON format clause, if specified */
2028 JsonWrapper wrapper; /* WRAPPER behavior for formatted columns */
2029 JsonQuotes quotes; /* omit or keep quotes on scalar strings? */
2030 List *columns; /* nested columns */
2031 JsonBehavior *on_empty; /* ON EMPTY behavior */
2032 JsonBehavior *on_error; /* ON ERROR behavior */
2033 ParseLoc location; /* token location, or -1 if unknown */
2035
2036/*
2037 * JsonKeyValue -
2038 * untransformed representation of JSON object key-value pair for
2039 * JSON_OBJECT() and JSON_OBJECTAGG()
2040 */
2041typedef struct JsonKeyValue
2042{
2043 NodeTag type;
2044 Expr *key; /* key expression */
2045 JsonValueExpr *value; /* JSON value expression */
2046} JsonKeyValue;
2047
2048/*
2049 * JsonParseExpr -
2050 * untransformed representation of JSON()
2051 */
2052typedef struct JsonParseExpr
2053{
2054 NodeTag type;
2055 JsonValueExpr *expr; /* string expression */
2056 JsonOutput *output; /* RETURNING clause, if specified */
2057 bool unique_keys; /* WITH UNIQUE KEYS? */
2058 ParseLoc location; /* token location, or -1 if unknown */
2060
2061/*
2062 * JsonScalarExpr -
2063 * untransformed representation of JSON_SCALAR()
2064 */
2065typedef struct JsonScalarExpr
2066{
2067 NodeTag type;
2068 Expr *expr; /* scalar expression */
2069 JsonOutput *output; /* RETURNING clause, if specified */
2070 ParseLoc location; /* token location, or -1 if unknown */
2072
2073/*
2074 * JsonSerializeExpr -
2075 * untransformed representation of JSON_SERIALIZE() function
2076 */
2077typedef struct JsonSerializeExpr
2078{
2079 NodeTag type;
2080 JsonValueExpr *expr; /* json value expression */
2081 JsonOutput *output; /* RETURNING clause, if specified */
2082 ParseLoc location; /* token location, or -1 if unknown */
2084
2085/*
2086 * JsonObjectConstructor -
2087 * untransformed representation of JSON_OBJECT() constructor
2088 */
2089typedef struct JsonObjectConstructor
2090{
2091 NodeTag type;
2092 List *exprs; /* list of JsonKeyValue pairs */
2093 JsonOutput *output; /* RETURNING clause, if specified */
2094 bool absent_on_null; /* skip NULL values? */
2095 bool unique; /* check key uniqueness? */
2096 ParseLoc location; /* token location, or -1 if unknown */
2098
2099/*
2100 * JsonArrayConstructor -
2101 * untransformed representation of JSON_ARRAY(element,...) constructor
2102 */
2103typedef struct JsonArrayConstructor
2104{
2105 NodeTag type;
2106 List *exprs; /* list of JsonValueExpr elements */
2107 JsonOutput *output; /* RETURNING clause, if specified */
2108 bool absent_on_null; /* skip NULL elements? */
2109 ParseLoc location; /* token location, or -1 if unknown */
2111
2112/*
2113 * JsonArrayQueryConstructor -
2114 * untransformed representation of JSON_ARRAY(subquery) constructor
2115 */
2116typedef struct JsonArrayQueryConstructor
2117{
2118 NodeTag type;
2119 Node *query; /* subquery */
2120 JsonOutput *output; /* RETURNING clause, if specified */
2121 JsonFormat *format; /* FORMAT clause for subquery, if specified */
2122 bool absent_on_null; /* skip NULL elements? */
2123 ParseLoc location; /* token location, or -1 if unknown */
2125
2126/*
2127 * JsonAggConstructor -
2128 * common fields of untransformed representation of
2129 * JSON_ARRAYAGG() and JSON_OBJECTAGG()
2130 */
2131typedef struct JsonAggConstructor
2132{
2133 NodeTag type;
2134 JsonOutput *output; /* RETURNING clause, if any */
2135 Node *agg_filter; /* FILTER clause, if any */
2136 List *agg_order; /* ORDER BY clause, if any */
2137 struct WindowDef *over; /* OVER clause, if any */
2138 ParseLoc location; /* token location, or -1 if unknown */
2140
2141/*
2142 * JsonObjectAgg -
2143 * untransformed representation of JSON_OBJECTAGG()
2144 */
2145typedef struct JsonObjectAgg
2146{
2147 NodeTag type;
2148 JsonAggConstructor *constructor; /* common fields */
2149 JsonKeyValue *arg; /* object key-value pair */
2150 bool absent_on_null; /* skip NULL values? */
2151 bool unique; /* check key uniqueness? */
2153
2154/*
2155 * JsonArrayAgg -
2156 * untransformed representation of JSON_ARRAYAGG()
2157 */
2158typedef struct JsonArrayAgg
2159{
2160 NodeTag type;
2161 JsonAggConstructor *constructor; /* common fields */
2162 JsonValueExpr *arg; /* array element expression */
2163 bool absent_on_null; /* skip NULL elements? */
2164} JsonArrayAgg;
2165
2166
2167/*****************************************************************************
2168 * Raw Grammar Output Statements
2169 *****************************************************************************/
2170
2171/*
2172 * RawStmt --- container for any one statement's raw parse tree
2173 *
2174 * Parse analysis converts a raw parse tree headed by a RawStmt node into
2175 * an analyzed statement headed by a Query node. For optimizable statements,
2176 * the conversion is complex. For utility statements, the parser usually just
2177 * transfers the raw parse tree (sans RawStmt) into the utilityStmt field of
2178 * the Query node, and all the useful work happens at execution time.
2179 *
2180 * stmt_location/stmt_len identify the portion of the source text string
2181 * containing this raw statement (useful for multi-statement strings).
2182 *
2183 * This is irrelevant for query jumbling, as this is not used in parsed
2184 * queries.
2185 */
2186typedef struct RawStmt
2187{
2189
2190 NodeTag type;
2191 Node *stmt; /* raw parse tree */
2192 ParseLoc stmt_location; /* start location, or -1 if unknown */
2193 ParseLoc stmt_len; /* length in bytes; 0 means "rest of string" */
2194} RawStmt;
2195
2196/*****************************************************************************
2197 * Optimizable Statements
2198 *****************************************************************************/
2199
2200/* ----------------------
2201 * Insert Statement
2202 *
2203 * The source expression is represented by SelectStmt for both the
2204 * SELECT and VALUES cases. If selectStmt is NULL, then the query
2205 * is INSERT ... DEFAULT VALUES.
2206 * ----------------------
2207 */
2208typedef struct InsertStmt
2209{
2210 NodeTag type;
2211 RangeVar *relation; /* relation to insert into */
2212 List *cols; /* optional: names of the target columns */
2213 Node *selectStmt; /* the source SELECT/VALUES, or NULL */
2214 OnConflictClause *onConflictClause; /* ON CONFLICT clause */
2215 ReturningClause *returningClause; /* RETURNING clause */
2216 WithClause *withClause; /* WITH clause */
2217 OverridingKind override; /* OVERRIDING clause */
2218} InsertStmt;
2219
2220/* ----------------------
2221 * Delete Statement
2222 * ----------------------
2223 */
2224typedef struct DeleteStmt
2225{
2226 NodeTag type;
2227 RangeVar *relation; /* relation to delete from */
2228 List *usingClause; /* optional using clause for more tables */
2229 Node *whereClause; /* qualifications */
2230 ReturningClause *returningClause; /* RETURNING clause */
2231 WithClause *withClause; /* WITH clause */
2232 ForPortionOfClause *forPortionOf; /* FOR PORTION OF clause */
2233} DeleteStmt;
2234
2235/* ----------------------
2236 * Update Statement
2237 * ----------------------
2238 */
2239typedef struct UpdateStmt
2240{
2241 NodeTag type;
2242 RangeVar *relation; /* relation to update */
2243 List *targetList; /* the target list (of ResTarget) */
2244 Node *whereClause; /* qualifications */
2245 List *fromClause; /* optional from clause for more tables */
2246 ReturningClause *returningClause; /* RETURNING clause */
2247 WithClause *withClause; /* WITH clause */
2248 ForPortionOfClause *forPortionOf; /* FOR PORTION OF clause */
2249} UpdateStmt;
2250
2251/* ----------------------
2252 * Merge Statement
2253 * ----------------------
2254 */
2255typedef struct MergeStmt
2256{
2257 NodeTag type;
2258 RangeVar *relation; /* target relation to merge into */
2259 Node *sourceRelation; /* source relation */
2260 Node *joinCondition; /* join condition between source and target */
2261 List *mergeWhenClauses; /* list of MergeWhenClause(es) */
2262 ReturningClause *returningClause; /* RETURNING clause */
2263 WithClause *withClause; /* WITH clause */
2264} MergeStmt;
2265
2266/* ----------------------
2267 * Select Statement
2268 *
2269 * A "simple" SELECT is represented in the output of gram.y by a single
2270 * SelectStmt node; so is a VALUES construct. A query containing set
2271 * operators (UNION, INTERSECT, EXCEPT) is represented by a tree of SelectStmt
2272 * nodes, in which the leaf nodes are component SELECTs and the internal nodes
2273 * represent UNION, INTERSECT, or EXCEPT operators. Using the same node
2274 * type for both leaf and internal nodes allows gram.y to stick ORDER BY,
2275 * LIMIT, etc, clause values into a SELECT statement without worrying
2276 * whether it is a simple or compound SELECT.
2277 * ----------------------
2278 */
2279typedef enum SetOperation
2280{
2281 SETOP_NONE = 0,
2285} SetOperation;
2286
2287typedef struct SelectStmt
2288{
2289 NodeTag type;
2290
2291 /*
2292 * These fields are used only in "leaf" SelectStmts.
2293 */
2294 List *distinctClause; /* NULL, list of DISTINCT ON exprs, or
2295 * lcons(NIL,NIL) for all (SELECT DISTINCT) */
2296 IntoClause *intoClause; /* target for SELECT INTO */
2297 List *targetList; /* the target list (of ResTarget) */
2298 List *fromClause; /* the FROM clause */
2299 Node *whereClause; /* WHERE qualification */
2300 List *groupClause; /* GROUP BY clauses */
2301 bool groupDistinct; /* Is this GROUP BY DISTINCT? */
2302 bool groupByAll; /* Is this GROUP BY ALL? */
2303 Node *havingClause; /* HAVING conditional-expression */
2304 List *windowClause; /* WINDOW window_name AS (...), ... */
2305
2306 /*
2307 * In a "leaf" node representing a VALUES list, the above fields are all
2308 * null, and instead this field is set. Note that the elements of the
2309 * sublists are just expressions, without ResTarget decoration. Also note
2310 * that a list element can be DEFAULT (represented as a SetToDefault
2311 * node), regardless of the context of the VALUES list. It's up to parse
2312 * analysis to reject that where not valid.
2313 */
2314 List *valuesLists; /* untransformed list of expression lists */
2315
2316 /*
2317 * These fields are used in both "leaf" SelectStmts and upper-level
2318 * SelectStmts.
2319 */
2320 List *sortClause; /* sort clause (a list of SortBy's) */
2321 Node *limitOffset; /* # of result tuples to skip */
2322 Node *limitCount; /* # of result tuples to return */
2323 LimitOption limitOption; /* limit type */
2324 List *lockingClause; /* FOR UPDATE (list of LockingClause's) */
2325 WithClause *withClause; /* WITH clause */
2326
2327 /*
2328 * These fields are used only in upper-level SelectStmts.
2329 */
2330 SetOperation op; /* type of set op */
2331 bool all; /* ALL specified? */
2332 struct SelectStmt *larg; /* left child */
2333 struct SelectStmt *rarg; /* right child */
2334 /* Eventually add fields for CORRESPONDING spec here */
2335} SelectStmt;
2336
2337
2338/* ----------------------
2339 * Set Operation node for post-analysis query trees
2340 *
2341 * After parse analysis, a SELECT with set operations is represented by a
2342 * top-level Query node containing the leaf SELECTs as subqueries in its
2343 * range table. Its setOperations field shows the tree of set operations,
2344 * with leaf SelectStmt nodes replaced by RangeTblRef nodes, and internal
2345 * nodes replaced by SetOperationStmt nodes. Information about the output
2346 * column types is added, too. (Note that the child nodes do not necessarily
2347 * produce these types directly, but we've checked that their output types
2348 * can be coerced to the output column type.) Also, if it's not UNION ALL,
2349 * information about the types' sort/group semantics is provided in the form
2350 * of a SortGroupClause list (same representation as, eg, DISTINCT).
2351 * The resolved common column collations are provided too; but note that if
2352 * it's not UNION ALL, it's okay for a column to not have a common collation,
2353 * so a member of the colCollations list could be InvalidOid even though the
2354 * column has a collatable type.
2355 * ----------------------
2356 */
2357typedef struct SetOperationStmt
2358{
2359 NodeTag type;
2360 SetOperation op; /* type of set op */
2361 bool all; /* ALL specified? */
2362 Node *larg; /* left child */
2363 Node *rarg; /* right child */
2364 /* Eventually add fields for CORRESPONDING spec here */
2365
2366 /* Fields derived during parse analysis (irrelevant for query jumbling): */
2367 /* OID list of output column type OIDs */
2369 /* integer list of output column typmods */
2371 /* OID list of output column collation OIDs */
2373 /* a list of SortGroupClause's */
2374 List *groupClauses pg_node_attr(query_jumble_ignore);
2375 /* groupClauses is NIL if UNION ALL, but must be set otherwise */
2377
2378
2379/*
2380 * RETURN statement (inside SQL function body)
2381 */
2382typedef struct ReturnStmt
2383{
2384 NodeTag type;
2385 Node *returnval;
2386} ReturnStmt;
2387
2388
2389/* ----------------------
2390 * PL/pgSQL Assignment Statement
2391 *
2392 * Like SelectStmt, this is transformed into a SELECT Query.
2393 * However, the targetlist of the result looks more like an UPDATE.
2394 * ----------------------
2395 */
2396typedef struct PLAssignStmt
2397{
2398 NodeTag type;
2399
2400 char *name; /* initial column name */
2401 List *indirection; /* subscripts and field names, if any */
2402 int nnames; /* number of names to use in ColumnRef */
2403 SelectStmt *val; /* the PL/pgSQL expression to assign */
2404 ParseLoc location; /* name's token location, or -1 if unknown */
2405} PLAssignStmt;
2406
2407
2408/*****************************************************************************
2409 * Other Statements (no optimizations required)
2410 *
2411 * These are not touched by parser/analyze.c except to put them into
2412 * the utilityStmt field of a Query. This is eventually passed to
2413 * ProcessUtility (by-passing rewriting and planning). Some of the
2414 * statements do need attention from parse analysis, and this is
2415 * done by routines in parser/parse_utilcmd.c after ProcessUtility
2416 * receives the command for execution.
2417 * DECLARE CURSOR, EXPLAIN, and CREATE TABLE AS are special cases:
2418 * they contain optimizable statements, which get processed normally
2419 * by parser/analyze.c.
2420 *****************************************************************************/
2421
2422/*
2423 * When a command can act on several kinds of objects with only one
2424 * parse structure required, use these constants to designate the
2425 * object type. Note that commands typically don't support all the types.
2426 */
2427
2428typedef enum ObjectType
2429{
2434 OBJECT_ATTRIBUTE, /* type's attribute, when distinct from column */
2446 OBJECT_FDW,
2483} ObjectType;
2484
2485/* ----------------------
2486 * Create Schema Statement
2487 *
2488 * NOTE: the schemaElts list contains raw parsetrees for component statements
2489 * of the schema, such as CREATE TABLE, GRANT, etc. These are analyzed and
2490 * executed after the schema itself is created.
2491 * ----------------------
2492 */
2493typedef struct CreateSchemaStmt
2494{
2495 NodeTag type;
2496 char *schemaname; /* the name of the schema to create */
2497 RoleSpec *authrole; /* the owner of the created schema */
2498 List *schemaElts; /* schema components (list of parsenodes) */
2499 bool if_not_exists; /* just do nothing if schema already exists? */
2501
2502typedef enum DropBehavior
2503{
2504 DROP_RESTRICT, /* drop fails if any dependent objects */
2505 DROP_CASCADE, /* remove dependent objects too */
2506} DropBehavior;
2507
2508/* ----------------------
2509 * Alter Table
2510 * ----------------------
2511 */
2512typedef struct AlterTableStmt
2513{
2514 NodeTag type;
2515 RangeVar *relation; /* table to work on */
2516 List *cmds; /* list of subcommands */
2517 ObjectType objtype; /* type of object */
2518 bool missing_ok; /* skip error if table missing */
2520
2521typedef enum AlterTableType
2522{
2523 AT_AddColumn, /* add column */
2524 AT_AddColumnToView, /* implicitly via CREATE OR REPLACE VIEW */
2525 AT_ColumnDefault, /* alter column default */
2526 AT_CookedColumnDefault, /* add a pre-cooked column default */
2527 AT_DropNotNull, /* alter column drop not null */
2528 AT_SetNotNull, /* alter column set not null */
2529 AT_SetExpression, /* alter column set expression */
2530 AT_DropExpression, /* alter column drop expression */
2531 AT_SetStatistics, /* alter column set statistics */
2532 AT_SetOptions, /* alter column set ( options ) */
2533 AT_ResetOptions, /* alter column reset ( options ) */
2534 AT_SetStorage, /* alter column set storage */
2535 AT_SetCompression, /* alter column set compression */
2536 AT_DropColumn, /* drop column */
2537 AT_AddIndex, /* add index */
2538 AT_ReAddIndex, /* internal to commands/tablecmds.c */
2539 AT_AddConstraint, /* add constraint */
2540 AT_ReAddConstraint, /* internal to commands/tablecmds.c */
2541 AT_ReAddDomainConstraint, /* internal to commands/tablecmds.c */
2542 AT_AlterConstraint, /* alter constraint */
2543 AT_ValidateConstraint, /* validate constraint */
2544 AT_AddIndexConstraint, /* add constraint using existing index */
2545 AT_DropConstraint, /* drop constraint */
2546 AT_ReAddComment, /* internal to commands/tablecmds.c */
2547 AT_AlterColumnType, /* alter column type */
2548 AT_AlterColumnGenericOptions, /* alter column OPTIONS (...) */
2549 AT_ChangeOwner, /* change owner */
2550 AT_ClusterOn, /* CLUSTER ON */
2551 AT_DropCluster, /* SET WITHOUT CLUSTER */
2552 AT_SetLogged, /* SET LOGGED */
2553 AT_SetUnLogged, /* SET UNLOGGED */
2554 AT_DropOids, /* SET WITHOUT OIDS */
2555 AT_SetAccessMethod, /* SET ACCESS METHOD */
2556 AT_SetTableSpace, /* SET TABLESPACE */
2557 AT_SetRelOptions, /* SET (...) -- AM specific parameters */
2558 AT_ResetRelOptions, /* RESET (...) -- AM specific parameters */
2559 AT_ReplaceRelOptions, /* replace reloption list in its entirety */
2560 AT_EnableTrig, /* ENABLE TRIGGER name */
2561 AT_EnableAlwaysTrig, /* ENABLE ALWAYS TRIGGER name */
2562 AT_EnableReplicaTrig, /* ENABLE REPLICA TRIGGER name */
2563 AT_DisableTrig, /* DISABLE TRIGGER name */
2564 AT_EnableTrigAll, /* ENABLE TRIGGER ALL */
2565 AT_DisableTrigAll, /* DISABLE TRIGGER ALL */
2566 AT_EnableTrigUser, /* ENABLE TRIGGER USER */
2567 AT_DisableTrigUser, /* DISABLE TRIGGER USER */
2568 AT_EnableRule, /* ENABLE RULE name */
2569 AT_EnableAlwaysRule, /* ENABLE ALWAYS RULE name */
2570 AT_EnableReplicaRule, /* ENABLE REPLICA RULE name */
2571 AT_DisableRule, /* DISABLE RULE name */
2572 AT_AddInherit, /* INHERIT parent */
2573 AT_DropInherit, /* NO INHERIT parent */
2574 AT_AddOf, /* OF <type_name> */
2575 AT_DropOf, /* NOT OF */
2576 AT_ReplicaIdentity, /* REPLICA IDENTITY */
2577 AT_EnableRowSecurity, /* ENABLE ROW SECURITY */
2578 AT_DisableRowSecurity, /* DISABLE ROW SECURITY */
2579 AT_ForceRowSecurity, /* FORCE ROW SECURITY */
2580 AT_NoForceRowSecurity, /* NO FORCE ROW SECURITY */
2581 AT_GenericOptions, /* OPTIONS (...) */
2582 AT_AttachPartition, /* ATTACH PARTITION */
2583 AT_DetachPartition, /* DETACH PARTITION */
2584 AT_DetachPartitionFinalize, /* DETACH PARTITION FINALIZE */
2585 AT_SplitPartition, /* SPLIT PARTITION */
2586 AT_MergePartitions, /* MERGE PARTITIONS */
2587 AT_AddIdentity, /* ADD IDENTITY */
2588 AT_SetIdentity, /* SET identity column options */
2589 AT_DropIdentity, /* DROP IDENTITY */
2590 AT_ReAddStatistics, /* internal to commands/tablecmds.c */
2592
2593typedef struct AlterTableCmd /* one subcommand of an ALTER TABLE */
2594{
2595 NodeTag type;
2596 AlterTableType subtype; /* Type of table alteration to apply */
2597 char *name; /* column, constraint, or trigger to act on,
2598 * or tablespace, access method */
2599 int16 num; /* attribute number for columns referenced by
2600 * number */
2602 Node *def; /* definition of new column, index,
2603 * constraint, or parent table */
2604 DropBehavior behavior; /* RESTRICT or CASCADE for DROP cases */
2605 bool missing_ok; /* skip error if missing? */
2606 bool recurse; /* exec-time recursion */
2608
2609/* Ad-hoc node for AT_AlterConstraint */
2610typedef struct ATAlterConstraint
2611{
2612 NodeTag type;
2613 char *conname; /* Constraint name */
2614 bool alterEnforceability; /* changing enforceability properties? */
2615 bool is_enforced; /* ENFORCED? */
2616 bool alterDeferrability; /* changing deferrability properties? */
2617 bool deferrable; /* DEFERRABLE? */
2618 bool initdeferred; /* INITIALLY DEFERRED? */
2619 bool alterInheritability; /* changing inheritability properties */
2620 bool noinherit;
2622
2623/* Ad-hoc node for AT_ReplicaIdentity */
2624typedef struct ReplicaIdentityStmt
2625{
2626 NodeTag type;
2627 char identity_type;
2628 char *name;
2630
2631
2632/* ----------------------
2633 * Alter Collation
2634 * ----------------------
2635 */
2636typedef struct AlterCollationStmt
2637{
2638 NodeTag type;
2639 List *collname;
2641
2642
2643/* ----------------------
2644 * Alter Domain
2645 *
2646 * The fields are used in different ways by the different variants of
2647 * this command.
2648 * ----------------------
2649 */
2650typedef enum AlterDomainType
2651{
2652 AD_AlterDefault = 'T', /* SET|DROP DEFAULT */
2653 AD_DropNotNull = 'N', /* DROP NOT NULL */
2654 AD_SetNotNull = 'O', /* SET NOT NULL */
2655 AD_AddConstraint = 'C', /* ADD CONSTRAINT */
2656 AD_DropConstraint = 'X', /* DROP CONSTRAINT */
2657 AD_ValidateConstraint = 'V', /* VALIDATE CONSTRAINT */
2659
2660typedef struct AlterDomainStmt
2661{
2662 NodeTag type;
2663 AlterDomainType subtype; /* subtype of command */
2664 List *typeName; /* domain to work on */
2665 char *name; /* column or constraint name to act on */
2666 Node *def; /* definition of default or constraint */
2667 DropBehavior behavior; /* RESTRICT or CASCADE for DROP cases */
2668 bool missing_ok; /* skip error if missing? */
2670
2671
2672/* ----------------------
2673 * Grant|Revoke Statement
2674 * ----------------------
2675 */
2676typedef enum GrantTargetType
2677{
2678 ACL_TARGET_OBJECT, /* grant on specific named object(s) */
2679 ACL_TARGET_ALL_IN_SCHEMA, /* grant on all objects in given schema(s) */
2680 ACL_TARGET_DEFAULTS, /* ALTER DEFAULT PRIVILEGES */
2682
2683typedef struct GrantStmt
2684{
2685 NodeTag type;
2686 bool is_grant; /* true = GRANT, false = REVOKE */
2687 GrantTargetType targtype; /* type of the grant target */
2688 ObjectType objtype; /* kind of object being operated on */
2689 List *objects; /* list of RangeVar nodes, ObjectWithArgs
2690 * nodes, or plain names (as String values) */
2691 List *privileges; /* list of AccessPriv nodes */
2692 /* privileges == NIL denotes ALL PRIVILEGES */
2693 List *grantees; /* list of RoleSpec nodes */
2694 bool grant_option; /* grant or revoke grant option */
2695 RoleSpec *grantor; /* GRANTED BY clause, or NULL if none */
2696 DropBehavior behavior; /* drop behavior (for REVOKE) */
2697} GrantStmt;
2698
2699/*
2700 * ObjectWithArgs represents a function/procedure/operator name plus parameter
2701 * identification.
2702 *
2703 * objargs includes only the types of the input parameters of the object.
2704 * In some contexts, that will be all we have, and it's enough to look up
2705 * objects according to the traditional Postgres rules (i.e., when only input
2706 * arguments matter).
2707 *
2708 * objfuncargs, if not NIL, carries the full specification of the parameter
2709 * list, including parameter mode annotations.
2710 *
2711 * Some grammar productions can set args_unspecified = true instead of
2712 * providing parameter info. In this case, lookup will succeed only if
2713 * the object name is unique. Note that otherwise, NIL parameter lists
2714 * mean zero arguments.
2715 */
2716typedef struct ObjectWithArgs
2717{
2718 NodeTag type;
2719 List *objname; /* qualified name of function/operator */
2720 List *objargs; /* list of Typename nodes (input args only) */
2721 List *objfuncargs; /* list of FunctionParameter nodes */
2722 bool args_unspecified; /* argument list was omitted? */
2724
2725/*
2726 * An access privilege, with optional list of column names
2727 * priv_name == NULL denotes ALL PRIVILEGES (only used with a column list)
2728 * cols == NIL denotes "all columns"
2729 * Note that simple "ALL PRIVILEGES" is represented as a NIL list, not
2730 * an AccessPriv with both fields null.
2731 */
2732typedef struct AccessPriv
2733{
2734 NodeTag type;
2735 char *priv_name; /* string name of privilege */
2736 List *cols; /* list of String */
2737} AccessPriv;
2738
2739/* ----------------------
2740 * Grant/Revoke Role Statement
2741 *
2742 * Note: because of the parsing ambiguity with the GRANT <privileges>
2743 * statement, granted_roles is a list of AccessPriv; the execution code
2744 * should complain if any column lists appear. grantee_roles is a list
2745 * of role names, as RoleSpec values.
2746 * ----------------------
2747 */
2748typedef struct GrantRoleStmt
2749{
2750 NodeTag type;
2751 List *granted_roles; /* list of roles to be granted/revoked */
2752 List *grantee_roles; /* list of member roles to add/delete */
2753 bool is_grant; /* true = GRANT, false = REVOKE */
2754 List *opt; /* options e.g. WITH GRANT OPTION */
2755 RoleSpec *grantor; /* set grantor to other than current role */
2756 DropBehavior behavior; /* drop behavior (for REVOKE) */
2758
2759/* ----------------------
2760 * Alter Default Privileges Statement
2761 * ----------------------
2762 */
2763typedef struct AlterDefaultPrivilegesStmt
2764{
2765 NodeTag type;
2766 List *options; /* list of DefElem */
2767 GrantStmt *action; /* GRANT/REVOKE action (with objects=NIL) */
2769
2770/* ----------------------
2771 * Copy Statement
2772 *
2773 * We support "COPY relation FROM file", "COPY relation TO file", and
2774 * "COPY (query) TO file". In any given CopyStmt, exactly one of "relation"
2775 * and "query" must be non-NULL.
2776 * ----------------------
2777 */
2778typedef struct CopyStmt
2779{
2780 NodeTag type;
2781 RangeVar *relation; /* the relation to copy */
2782 Node *query; /* the query (SELECT or DML statement with
2783 * RETURNING) to copy, as a raw parse tree */
2784 List *attlist; /* List of column names (as Strings), or NIL
2785 * for all columns */
2786 bool is_from; /* TO or FROM */
2787 bool is_program; /* is 'filename' a program to popen? */
2788 char *filename; /* filename, or NULL for STDIN/STDOUT */
2789 List *options; /* List of DefElem nodes */
2790 Node *whereClause; /* WHERE condition (or NULL) */
2791} CopyStmt;
2792
2793/* ----------------------
2794 * SET Statement (includes RESET)
2795 *
2796 * "SET var TO DEFAULT" and "RESET var" are semantically equivalent, but we
2797 * preserve the distinction in VariableSetKind for CreateCommandTag().
2798 * ----------------------
2799 */
2800typedef enum VariableSetKind
2801{
2802 VAR_SET_VALUE, /* SET var = value */
2803 VAR_SET_DEFAULT, /* SET var TO DEFAULT */
2804 VAR_SET_CURRENT, /* SET var FROM CURRENT */
2805 VAR_SET_MULTI, /* special case for SET TRANSACTION ... */
2806 VAR_RESET, /* RESET var */
2807 VAR_RESET_ALL, /* RESET ALL */
2809
2810typedef struct VariableSetStmt
2811{
2813
2814 NodeTag type;
2816 /* variable to be set */
2817 char *name;
2818 /* List of A_Const nodes */
2819 List *args;
2820
2821 /*
2822 * True if arguments should be accounted for in query jumbling. We use a
2823 * separate flag rather than query_jumble_ignore on "args" as several
2824 * grammar flavors of SET rely on a list of values that are parsed
2825 * directly from the grammar's keywords.
2826 */
2827 bool jumble_args;
2828 /* SET LOCAL? */
2829 bool is_local;
2830 /* token location, or -1 if unknown */
2833
2834/* ----------------------
2835 * Show Statement
2836 * ----------------------
2837 */
2838typedef struct VariableShowStmt
2839{
2840 NodeTag type;
2841 char *name;
2843
2844/* ----------------------
2845 * Create Table Statement
2846 *
2847 * NOTE: in the raw gram.y output, ColumnDef and Constraint nodes are
2848 * intermixed in tableElts, and constraints and nnconstraints are NIL. After
2849 * parse analysis, tableElts contains just ColumnDefs, nnconstraints contains
2850 * Constraint nodes of CONSTR_NOTNULL type from various sources, and
2851 * constraints contains just CONSTR_CHECK Constraint nodes.
2852 * ----------------------
2853 */
2854
2855typedef struct CreateStmt
2856{
2857 NodeTag type;
2858 RangeVar *relation; /* relation to create */
2859 List *tableElts; /* column definitions (list of ColumnDef) */
2860 List *inhRelations; /* relations to inherit from (list of
2861 * RangeVar) */
2862 PartitionBoundSpec *partbound; /* FOR VALUES clause */
2863 PartitionSpec *partspec; /* PARTITION BY clause */
2864 TypeName *ofTypename; /* OF typename */
2865 List *constraints; /* constraints (list of Constraint nodes) */
2866 List *nnconstraints; /* NOT NULL constraints (ditto) */
2867 List *options; /* options from WITH clause */
2868 OnCommitAction oncommit; /* what do we do at COMMIT? */
2869 char *tablespacename; /* table space to use, or NULL */
2870 char *accessMethod; /* table access method */
2871 bool if_not_exists; /* just do nothing if it already exists? */
2872} CreateStmt;
2873
2874/* ----------
2875 * Definitions for constraints in CreateStmt
2876 *
2877 * Note that column defaults are treated as a type of constraint,
2878 * even though that's a bit odd semantically.
2879 *
2880 * For constraints that use expressions (CONSTR_CHECK, CONSTR_DEFAULT)
2881 * we may have the expression in either "raw" form (an untransformed
2882 * parse tree) or "cooked" form (the nodeToString representation of
2883 * an executable expression tree), depending on how this Constraint
2884 * node was created (by parsing, or by inheritance from an existing
2885 * relation). We should never have both in the same node!
2886 *
2887 * FKCONSTR_ACTION_xxx values are stored into pg_constraint.confupdtype
2888 * and pg_constraint.confdeltype columns; FKCONSTR_MATCH_xxx values are
2889 * stored into pg_constraint.confmatchtype. Changing the code values may
2890 * require an initdb!
2891 *
2892 * If skip_validation is true then we skip checking that the existing rows
2893 * in the table satisfy the constraint, and just install the catalog entries
2894 * for the constraint. A new FK constraint is marked as valid iff
2895 * initially_valid is true. (Usually skip_validation and initially_valid
2896 * are inverses, but we can set both true if the table is known empty.)
2897 *
2898 * Constraint attributes (DEFERRABLE etc) are initially represented as
2899 * separate Constraint nodes for simplicity of parsing. parse_utilcmd.c makes
2900 * a pass through the constraints list to insert the info into the appropriate
2901 * Constraint node.
2902 * ----------
2903 */
2904
2905typedef enum ConstrType /* types of constraints */
2906{
2907 CONSTR_NULL, /* not standard SQL, but a lot of people
2908 * expect it */
2918 CONSTR_ATTR_DEFERRABLE, /* attributes for previous constraint node */
2924} ConstrType;
2925
2926/* Foreign key action codes */
2927#define FKCONSTR_ACTION_NOACTION 'a'
2928#define FKCONSTR_ACTION_RESTRICT 'r'
2929#define FKCONSTR_ACTION_CASCADE 'c'
2930#define FKCONSTR_ACTION_SETNULL 'n'
2931#define FKCONSTR_ACTION_SETDEFAULT 'd'
2932
2933/* Foreign key matchtype codes */
2934#define FKCONSTR_MATCH_FULL 'f'
2935#define FKCONSTR_MATCH_PARTIAL 'p'
2936#define FKCONSTR_MATCH_SIMPLE 's'
2937
2938typedef struct Constraint
2939{
2940 NodeTag type;
2941 ConstrType contype; /* see above */
2942 char *conname; /* Constraint name, or NULL if unnamed */
2943 bool deferrable; /* DEFERRABLE? */
2944 bool initdeferred; /* INITIALLY DEFERRED? */
2945 bool is_enforced; /* enforced constraint? */
2946 bool skip_validation; /* skip validation of existing rows? */
2947 bool initially_valid; /* mark the new constraint as valid? */
2948 bool is_no_inherit; /* is constraint non-inheritable? */
2949 Node *raw_expr; /* CHECK or DEFAULT expression, as
2950 * untransformed parse tree */
2951 char *cooked_expr; /* CHECK or DEFAULT expression, as
2952 * nodeToString representation */
2953 char generated_when; /* ALWAYS or BY DEFAULT */
2954 char generated_kind; /* STORED or VIRTUAL */
2955 bool nulls_not_distinct; /* null treatment for UNIQUE constraints */
2956 List *keys; /* String nodes naming referenced key
2957 * column(s); for UNIQUE/PK/NOT NULL */
2958 bool without_overlaps; /* WITHOUT OVERLAPS specified */
2959 List *including; /* String nodes naming referenced nonkey
2960 * column(s); for UNIQUE/PK */
2961 List *exclusions; /* list of (IndexElem, operator name) pairs;
2962 * for exclusion constraints */
2963 List *options; /* options from WITH clause */
2964 char *indexname; /* existing index to use; otherwise NULL */
2965 char *indexspace; /* index tablespace; NULL for default */
2966 bool reset_default_tblspc; /* reset default_tablespace prior to
2967 * creating the index */
2968 char *access_method; /* index access method; NULL for default */
2969 Node *where_clause; /* partial index predicate */
2970
2971 /* Fields used for FOREIGN KEY constraints: */
2972 RangeVar *pktable; /* Primary key table */
2973 List *fk_attrs; /* Attributes of foreign key */
2974 List *pk_attrs; /* Corresponding attrs in PK table */
2975 bool fk_with_period; /* Last attribute of FK uses PERIOD */
2976 bool pk_with_period; /* Last attribute of PK uses PERIOD */
2977 char fk_matchtype; /* FULL, PARTIAL, SIMPLE */
2978 char fk_upd_action; /* ON UPDATE action */
2979 char fk_del_action; /* ON DELETE action */
2980 List *fk_del_set_cols; /* ON DELETE SET NULL/DEFAULT (col1, col2) */
2981 List *old_conpfeqop; /* pg_constraint.conpfeqop of my former self */
2982 Oid old_pktable_oid; /* pg_constraint.confrelid of my former
2983 * self */
2984
2985 ParseLoc location; /* token location, or -1 if unknown */
2986} Constraint;
2987
2988/* ----------------------
2989 * Create/Drop Table Space Statements
2990 * ----------------------
2991 */
2992
2993typedef struct CreateTableSpaceStmt
2994{
2995 NodeTag type;
2996 char *tablespacename;
2997 RoleSpec *owner;
2998 char *location;
2999 List *options;
3001
3002typedef struct DropTableSpaceStmt
3003{
3004 NodeTag type;
3005 char *tablespacename;
3006 bool missing_ok; /* skip error if missing? */
3008
3009typedef struct AlterTableSpaceOptionsStmt
3010{
3011 NodeTag type;
3012 char *tablespacename;
3013 List *options;
3014 bool isReset;
3016
3017typedef struct AlterTableMoveAllStmt
3018{
3019 NodeTag type;
3020 char *orig_tablespacename;
3021 ObjectType objtype; /* Object type to move */
3022 List *roles; /* List of roles to move objects of */
3023 char *new_tablespacename;
3024 bool nowait;
3026
3027/* ----------------------
3028 * Create/Alter Extension Statements
3029 * ----------------------
3030 */
3031
3032typedef struct CreateExtensionStmt
3033{
3034 NodeTag type;
3035 char *extname;
3036 bool if_not_exists; /* just do nothing if it already exists? */
3037 List *options; /* List of DefElem nodes */
3039
3040/* Only used for ALTER EXTENSION UPDATE; later might need an action field */
3041typedef struct AlterExtensionStmt
3042{
3043 NodeTag type;
3044 char *extname;
3045 List *options; /* List of DefElem nodes */
3047
3048typedef struct AlterExtensionContentsStmt
3049{
3050 NodeTag type;
3051 char *extname; /* Extension's name */
3052 int action; /* +1 = add object, -1 = drop object */
3053 ObjectType objtype; /* Object's type */
3054 Node *object; /* Qualified name of the object */
3056
3057/* ----------------------
3058 * Create/Alter FOREIGN DATA WRAPPER Statements
3059 * ----------------------
3060 */
3061
3062typedef struct CreateFdwStmt
3063{
3064 NodeTag type;
3065 char *fdwname; /* foreign-data wrapper name */
3066 List *func_options; /* HANDLER/VALIDATOR options */
3067 List *options; /* generic options to FDW */
3069
3070typedef struct AlterFdwStmt
3071{
3072 NodeTag type;
3073 char *fdwname; /* foreign-data wrapper name */
3074 List *func_options; /* HANDLER/VALIDATOR options */
3075 List *options; /* generic options to FDW */
3076} AlterFdwStmt;
3077
3078/* ----------------------
3079 * Create/Alter FOREIGN SERVER Statements
3080 * ----------------------
3081 */
3082
3083typedef struct CreateForeignServerStmt
3084{
3085 NodeTag type;
3086 char *servername; /* server name */
3087 char *servertype; /* optional server type */
3088 char *version; /* optional server version */
3089 char *fdwname; /* FDW name */
3090 bool if_not_exists; /* just do nothing if it already exists? */
3091 List *options; /* generic options to server */
3093
3094typedef struct AlterForeignServerStmt
3095{
3096 NodeTag type;
3097 char *servername; /* server name */
3098 char *version; /* optional server version */
3099 List *options; /* generic options to server */
3100 bool has_version; /* version specified */
3102
3103/* ----------------------
3104 * Create FOREIGN TABLE Statement
3105 * ----------------------
3106 */
3107
3108typedef struct CreateForeignTableStmt
3109{
3111 char *servername;
3112 List *options;
3114
3115/* ----------------------
3116 * Create/Drop USER MAPPING Statements
3117 * ----------------------
3118 */
3119
3120typedef struct CreateUserMappingStmt
3121{
3122 NodeTag type;
3123 RoleSpec *user; /* user role */
3124 char *servername; /* server name */
3125 bool if_not_exists; /* just do nothing if it already exists? */
3126 List *options; /* generic options to server */
3128
3129typedef struct AlterUserMappingStmt
3130{
3131 NodeTag type;
3132 RoleSpec *user; /* user role */
3133 char *servername; /* server name */
3134 List *options; /* generic options to server */
3136
3137typedef struct DropUserMappingStmt
3138{
3139 NodeTag type;
3140 RoleSpec *user; /* user role */
3141 char *servername; /* server name */
3142 bool missing_ok; /* ignore missing mappings */
3144
3145/* ----------------------
3146 * Import Foreign Schema Statement
3147 * ----------------------
3148 */
3149
3150typedef enum ImportForeignSchemaType
3151{
3152 FDW_IMPORT_SCHEMA_ALL, /* all relations wanted */
3153 FDW_IMPORT_SCHEMA_LIMIT_TO, /* include only listed tables in import */
3154 FDW_IMPORT_SCHEMA_EXCEPT, /* exclude listed tables from import */
3156
3157typedef struct ImportForeignSchemaStmt
3158{
3159 NodeTag type;
3160 char *server_name; /* FDW server name */
3161 char *remote_schema; /* remote schema name to query */
3162 char *local_schema; /* local schema to create objects in */
3163 ImportForeignSchemaType list_type; /* type of table list */
3164 List *table_list; /* List of RangeVar */
3165 List *options; /* list of options to pass to FDW */
3167
3168/*----------------------
3169 * Create POLICY Statement
3170 *----------------------
3171 */
3172typedef struct CreatePolicyStmt
3173{
3174 NodeTag type;
3175 char *policy_name; /* Policy's name */
3176 RangeVar *table; /* the table name the policy applies to */
3177 char *cmd_name; /* the command name the policy applies to */
3178 bool permissive; /* restrictive or permissive policy */
3179 List *roles; /* the roles associated with the policy */
3180 Node *qual; /* the policy's condition */
3181 Node *with_check; /* the policy's WITH CHECK condition. */
3183
3184/*----------------------
3185 * Alter POLICY Statement
3186 *----------------------
3187 */
3188typedef struct AlterPolicyStmt
3189{
3190 NodeTag type;
3191 char *policy_name; /* Policy's name */
3192 RangeVar *table; /* the table name the policy applies to */
3193 List *roles; /* the roles associated with the policy */
3194 Node *qual; /* the policy's condition */
3195 Node *with_check; /* the policy's WITH CHECK condition. */
3197
3198/*----------------------
3199 * Create ACCESS METHOD Statement
3200 *----------------------
3201 */
3202typedef struct CreateAmStmt
3203{
3204 NodeTag type;
3205 char *amname; /* access method name */
3206 List *handler_name; /* handler function name */
3207 char amtype; /* type of access method */
3208} CreateAmStmt;
3209
3210/* ----------------------
3211 * Create TRIGGER Statement
3212 * ----------------------
3213 */
3214typedef struct CreateTrigStmt
3215{
3216 NodeTag type;
3217 bool replace; /* replace trigger if already exists */
3218 bool isconstraint; /* This is a constraint trigger */
3219 char *trigname; /* TRIGGER's name */
3220 RangeVar *relation; /* relation trigger is on */
3221 List *funcname; /* qual. name of function to call */
3222 List *args; /* list of String or NIL */
3223 bool row; /* ROW/STATEMENT */
3224 /* timing uses the TRIGGER_TYPE bits defined in catalog/pg_trigger.h */
3225 int16 timing; /* BEFORE, AFTER, or INSTEAD */
3226 /* events uses the TRIGGER_TYPE bits defined in catalog/pg_trigger.h */
3227 int16 events; /* "OR" of INSERT/UPDATE/DELETE/TRUNCATE */
3228 List *columns; /* column names, or NIL for all columns */
3229 Node *whenClause; /* qual expression, or NULL if none */
3230 /* explicitly named transition data */
3231 List *transitionRels; /* TriggerTransition nodes, or NIL if none */
3232 /* The remaining fields are only used for constraint triggers */
3233 bool deferrable; /* [NOT] DEFERRABLE */
3234 bool initdeferred; /* INITIALLY {DEFERRED|IMMEDIATE} */
3235 RangeVar *constrrel; /* opposite relation, if RI trigger */
3237
3238/* ----------------------
3239 * Create EVENT TRIGGER Statement
3240 * ----------------------
3241 */
3242typedef struct CreateEventTrigStmt
3243{
3244 NodeTag type;
3245 char *trigname; /* TRIGGER's name */
3246 char *eventname; /* event's identifier */
3247 List *whenclause; /* list of DefElems indicating filtering */
3248 List *funcname; /* qual. name of function to call */
3250
3251/* ----------------------
3252 * Alter EVENT TRIGGER Statement
3253 * ----------------------
3254 */
3255typedef struct AlterEventTrigStmt
3256{
3257 NodeTag type;
3258 char *trigname; /* TRIGGER's name */
3259 char tgenabled; /* trigger's firing configuration WRT
3260 * session_replication_role */
3262
3263/* ----------------------
3264 * Create LANGUAGE Statements
3265 * ----------------------
3266 */
3267typedef struct CreatePLangStmt
3268{
3269 NodeTag type;
3270 bool replace; /* T => replace if already exists */
3271 char *plname; /* PL name */
3272 List *plhandler; /* PL call handler function (qual. name) */
3273 List *plinline; /* optional inline function (qual. name) */
3274 List *plvalidator; /* optional validator function (qual. name) */
3275 bool pltrusted; /* PL is trusted */
3277
3278/* ----------------------
3279 * Create/Alter/Drop Role Statements
3280 *
3281 * Note: these node types are also used for the backwards-compatible
3282 * Create/Alter/Drop User/Group statements. In the ALTER and DROP cases
3283 * there's really no need to distinguish what the original spelling was,
3284 * but for CREATE we mark the type because the defaults vary.
3285 * ----------------------
3286 */
3287typedef enum RoleStmtType
3288{
3292} RoleStmtType;
3293
3294typedef struct CreateRoleStmt
3295{
3296 NodeTag type;
3297 RoleStmtType stmt_type; /* ROLE/USER/GROUP */
3298 char *role; /* role name */
3299 List *options; /* List of DefElem nodes */
3301
3302typedef struct AlterRoleStmt
3303{
3304 NodeTag type;
3305 RoleSpec *role; /* role */
3306 List *options; /* List of DefElem nodes */
3307 int action; /* +1 = add members, -1 = drop members */
3309
3310typedef struct AlterRoleSetStmt
3311{
3312 NodeTag type;
3313 RoleSpec *role; /* role */
3314 char *database; /* database name, or NULL */
3315 VariableSetStmt *setstmt; /* SET or RESET subcommand */
3317
3318typedef struct DropRoleStmt
3319{
3320 NodeTag type;
3321 List *roles; /* List of roles to remove */
3322 bool missing_ok; /* skip error if a role is missing? */
3323} DropRoleStmt;
3324
3325/* ----------------------
3326 * {Create|Alter} SEQUENCE Statement
3327 * ----------------------
3328 */
3329
3330typedef struct CreateSeqStmt
3331{
3332 NodeTag type;
3333 RangeVar *sequence; /* the sequence to create */
3334 List *options;
3335 Oid ownerId; /* ID of owner, or InvalidOid for default */
3336 bool for_identity;
3337 bool if_not_exists; /* just do nothing if it already exists? */
3339
3340typedef struct AlterSeqStmt
3341{
3342 NodeTag type;
3343 RangeVar *sequence; /* the sequence to alter */
3344 List *options;
3345 bool for_identity;
3346 bool missing_ok; /* skip error if a role is missing? */
3347} AlterSeqStmt;
3348
3349/* ----------------------
3350 * Create {Aggregate|Operator|Type} Statement
3351 * ----------------------
3352 */
3353typedef struct DefineStmt
3354{
3355 NodeTag type;
3356 ObjectType kind; /* aggregate, operator, type */
3357 bool oldstyle; /* hack to signal old CREATE AGG syntax */
3358 List *defnames; /* qualified name (list of String) */
3359 List *args; /* a list of TypeName (if needed) */
3360 List *definition; /* a list of DefElem */
3361 bool if_not_exists; /* just do nothing if it already exists? */
3362 bool replace; /* replace if already exists? */
3363} DefineStmt;
3364
3365/* ----------------------
3366 * Create Domain Statement
3367 * ----------------------
3368 */
3369typedef struct CreateDomainStmt
3370{
3371 NodeTag type;
3372 List *domainname; /* qualified name (list of String) */
3373 TypeName *typeName; /* the base type */
3374 CollateClause *collClause; /* untransformed COLLATE spec, if any */
3375 List *constraints; /* constraints (list of Constraint nodes) */
3377
3378/* ----------------------
3379 * Create Operator Class Statement
3380 * ----------------------
3381 */
3382typedef struct CreateOpClassStmt
3383{
3384 NodeTag type;
3385 List *opclassname; /* qualified name (list of String) */
3386 List *opfamilyname; /* qualified name (ditto); NIL if omitted */
3387 char *amname; /* name of index AM opclass is for */
3388 TypeName *datatype; /* datatype of indexed column */
3389 List *items; /* List of CreateOpClassItem nodes */
3390 bool isDefault; /* Should be marked as default for type? */
3392
3393#define OPCLASS_ITEM_OPERATOR 1
3394#define OPCLASS_ITEM_FUNCTION 2
3395#define OPCLASS_ITEM_STORAGETYPE 3
3396
3397typedef struct CreateOpClassItem
3398{
3399 NodeTag type;
3400 int itemtype; /* see codes above */
3401 ObjectWithArgs *name; /* operator or function name and args */
3402 int number; /* strategy num or support proc num */
3403 List *order_family; /* only used for ordering operators */
3404 List *class_args; /* amproclefttype/amprocrighttype or
3405 * amoplefttype/amoprighttype */
3406 /* fields used for a storagetype item: */
3407 TypeName *storedtype; /* datatype stored in index */
3409
3410/* ----------------------
3411 * Create Operator Family Statement
3412 * ----------------------
3413 */
3414typedef struct CreateOpFamilyStmt
3415{
3416 NodeTag type;
3417 List *opfamilyname; /* qualified name (list of String) */
3418 char *amname; /* name of index AM opfamily is for */
3420
3421/* ----------------------
3422 * Alter Operator Family Statement
3423 * ----------------------
3424 */
3425typedef struct AlterOpFamilyStmt
3426{
3427 NodeTag type;
3428 List *opfamilyname; /* qualified name (list of String) */
3429 char *amname; /* name of index AM opfamily is for */
3430 bool isDrop; /* ADD or DROP the items? */
3431 List *items; /* List of CreateOpClassItem nodes */
3433
3434/* ----------------------
3435 * Drop Table|Sequence|View|Index|Type|Domain|Conversion|Schema Statement
3436 * ----------------------
3437 */
3438
3439typedef struct DropStmt
3440{
3441 NodeTag type;
3442 List *objects; /* list of names */
3443 ObjectType removeType; /* object type */
3444 DropBehavior behavior; /* RESTRICT or CASCADE behavior */
3445 bool missing_ok; /* skip error if object is missing? */
3446 bool concurrent; /* drop index concurrently? */
3447} DropStmt;
3448
3449/* ----------------------
3450 * Truncate Table Statement
3451 * ----------------------
3452 */
3453typedef struct TruncateStmt
3454{
3455 NodeTag type;
3456 List *relations; /* relations (RangeVars) to be truncated */
3457 bool restart_seqs; /* restart owned sequences? */
3458 DropBehavior behavior; /* RESTRICT or CASCADE behavior */
3459} TruncateStmt;
3460
3461/* ----------------------
3462 * Comment On Statement
3463 * ----------------------
3464 */
3465typedef struct CommentStmt
3466{
3467 NodeTag type;
3468 ObjectType objtype; /* Object's type */
3469 Node *object; /* Qualified name of the object */
3470 char *comment; /* Comment to insert, or NULL to remove */
3471} CommentStmt;
3472
3473/* ----------------------
3474 * SECURITY LABEL Statement
3475 * ----------------------
3476 */
3477typedef struct SecLabelStmt
3478{
3479 NodeTag type;
3480 ObjectType objtype; /* Object's type */
3481 Node *object; /* Qualified name of the object */
3482 char *provider; /* Label provider (or NULL) */
3483 char *label; /* New security label to be assigned */
3484} SecLabelStmt;
3485
3486/* ----------------------
3487 * Declare Cursor Statement
3488 *
3489 * The "query" field is initially a raw parse tree, and is converted to a
3490 * Query node during parse analysis. Note that rewriting and planning
3491 * of the query are always postponed until execution.
3492 * ----------------------
3493 */
3494#define CURSOR_OPT_BINARY 0x0001 /* BINARY */
3495#define CURSOR_OPT_SCROLL 0x0002 /* SCROLL explicitly given */
3496#define CURSOR_OPT_NO_SCROLL 0x0004 /* NO SCROLL explicitly given */
3497#define CURSOR_OPT_INSENSITIVE 0x0008 /* INSENSITIVE */
3498#define CURSOR_OPT_ASENSITIVE 0x0010 /* ASENSITIVE */
3499#define CURSOR_OPT_HOLD 0x0020 /* WITH HOLD */
3500/* these planner-control flags do not correspond to any SQL grammar: */
3501#define CURSOR_OPT_FAST_PLAN 0x0100 /* prefer fast-start plan */
3502#define CURSOR_OPT_GENERIC_PLAN 0x0200 /* force use of generic plan */
3503#define CURSOR_OPT_CUSTOM_PLAN 0x0400 /* force use of custom plan */
3504#define CURSOR_OPT_PARALLEL_OK 0x0800 /* parallel mode OK */
3505
3506typedef struct DeclareCursorStmt
3507{
3508 NodeTag type;
3509 char *portalname; /* name of the portal (cursor) */
3510 int options; /* bitmask of options (see above) */
3511 Node *query; /* the query (see comments above) */
3513
3514/* ----------------------
3515 * Close Portal Statement
3516 * ----------------------
3517 */
3518typedef struct ClosePortalStmt
3519{
3520 NodeTag type;
3521 char *portalname; /* name of the portal (cursor) */
3522 /* NULL means CLOSE ALL */
3524
3525/* ----------------------
3526 * Fetch Statement (also Move)
3527 * ----------------------
3528 */
3529typedef enum FetchDirection
3530{
3531 /* for these, howMany is how many rows to fetch; FETCH_ALL means ALL */
3534 /* for these, howMany indicates a position; only one row is fetched */
3538
3539typedef enum FetchDirectionKeywords
3540{
3554
3555#define FETCH_ALL LONG_MAX
3556
3557typedef struct FetchStmt
3558{
3559 NodeTag type;
3560 FetchDirection direction; /* see above */
3561 /* number of rows, or position argument */
3563 /* name of portal (cursor) */
3564 char *portalname;
3565 /* true if MOVE */
3566 bool ismove;
3567
3568 /*
3569 * Set when a direction_keyword (e.g., FETCH FORWARD) is used, to
3570 * distinguish it from a numeric variant (e.g., FETCH 1) for the purpose
3571 * of query jumbling.
3572 */
3574
3575 /* token location, or -1 if unknown */
3577} FetchStmt;
3578
3579/* ----------------------
3580 * Create Index Statement
3581 *
3582 * This represents creation of an index and/or an associated constraint.
3583 * If isconstraint is true, we should create a pg_constraint entry along
3584 * with the index. But if indexOid isn't InvalidOid, we are not creating an
3585 * index, just a UNIQUE/PKEY constraint using an existing index. isconstraint
3586 * must always be true in this case, and the fields describing the index
3587 * properties are empty.
3588 * ----------------------
3589 */
3590typedef struct IndexStmt
3591{
3592 NodeTag type;
3593 char *idxname; /* name of new index, or NULL for default */
3594 RangeVar *relation; /* relation to build index on */
3595 char *accessMethod; /* name of access method (eg. btree) */
3596 char *tableSpace; /* tablespace, or NULL for default */
3597 List *indexParams; /* columns to index: a list of IndexElem */
3598 List *indexIncludingParams; /* additional columns to index: a list
3599 * of IndexElem */
3600 List *options; /* WITH clause options: a list of DefElem */
3601 Node *whereClause; /* qualification (partial-index predicate) */
3602 List *excludeOpNames; /* exclusion operator names, or NIL if none */
3603 char *idxcomment; /* comment to apply to index, or NULL */
3604 Oid indexOid; /* OID of an existing index, if any */
3605 RelFileNumber oldNumber; /* relfilenumber of existing storage, if any */
3606 SubTransactionId oldCreateSubid; /* rd_createSubid of oldNumber */
3607 SubTransactionId oldFirstRelfilelocatorSubid; /* rd_firstRelfilelocatorSubid
3608 * of oldNumber */
3609 bool unique; /* is index unique? */
3610 bool nulls_not_distinct; /* null treatment for UNIQUE constraints */
3611 bool primary; /* is index a primary key? */
3612 bool isconstraint; /* is it for a pkey/unique constraint? */
3613 bool iswithoutoverlaps; /* is the constraint WITHOUT OVERLAPS? */
3614 bool deferrable; /* is the constraint DEFERRABLE? */
3615 bool initdeferred; /* is the constraint INITIALLY DEFERRED? */
3616 bool transformed; /* true when transformIndexStmt is finished */
3617 bool concurrent; /* should this be a concurrent index build? */
3618 bool if_not_exists; /* just do nothing if index already exists? */
3619 bool reset_default_tblspc; /* reset default_tablespace prior to
3620 * executing */
3621} IndexStmt;
3622
3623/* ----------------------
3624 * Create Statistics Statement
3625 * ----------------------
3626 */
3627typedef struct CreateStatsStmt
3628{
3629 NodeTag type;
3630 List *defnames; /* qualified name (list of String) */
3631 List *stat_types; /* stat types (list of String) */
3632 List *exprs; /* expressions to build statistics on */
3633 List *relations; /* rels to build stats on (list of RangeVar) */
3634 char *stxcomment; /* comment to apply to stats, or NULL */
3635 bool transformed; /* true when transformStatsStmt is finished */
3636 bool if_not_exists; /* do nothing if stats name already exists */
3638
3639/*
3640 * StatsElem - statistics parameters (used in CREATE STATISTICS)
3641 *
3642 * For a plain attribute, 'name' is the name of the referenced table column
3643 * and 'expr' is NULL. For an expression, 'name' is NULL and 'expr' is the
3644 * expression tree.
3645 */
3646typedef struct StatsElem
3647{
3648 NodeTag type;
3649 char *name; /* name of attribute to index, or NULL */
3650 Node *expr; /* expression to index, or NULL */
3651} StatsElem;
3652
3653
3654/* ----------------------
3655 * Alter Statistics Statement
3656 * ----------------------
3657 */
3658typedef struct AlterStatsStmt
3659{
3660 NodeTag type;
3661 List *defnames; /* qualified name (list of String) */
3662 Node *stxstattarget; /* statistics target */
3663 bool missing_ok; /* skip error if statistics object is missing */
3665
3666/* ----------------------
3667 * Create Function Statement
3668 * ----------------------
3669 */
3670typedef struct CreateFunctionStmt
3671{
3672 NodeTag type;
3673 bool is_procedure; /* it's really CREATE PROCEDURE */
3674 bool replace; /* T => replace if already exists */
3675 List *funcname; /* qualified name of function to create */
3676 List *parameters; /* a list of FunctionParameter */
3677 TypeName *returnType; /* the return type */
3678 List *options; /* a list of DefElem */
3679 Node *sql_body;
3681
3682typedef enum FunctionParameterMode
3683{
3684 /* the assigned enum values appear in pg_proc, don't change 'em! */
3685 FUNC_PARAM_IN = 'i', /* input only */
3686 FUNC_PARAM_OUT = 'o', /* output only */
3687 FUNC_PARAM_INOUT = 'b', /* both */
3688 FUNC_PARAM_VARIADIC = 'v', /* variadic (always input) */
3689 FUNC_PARAM_TABLE = 't', /* table function output column */
3690 /* this is not used in pg_proc: */
3691 FUNC_PARAM_DEFAULT = 'd', /* default; effectively same as IN */
3693
3694typedef struct FunctionParameter
3695{
3696 NodeTag type;
3697 char *name; /* parameter name, or NULL if not given */
3698 TypeName *argType; /* TypeName for parameter type */
3699 FunctionParameterMode mode; /* IN/OUT/etc */
3700 Node *defexpr; /* raw default expr, or NULL if not given */
3701 ParseLoc location; /* token location, or -1 if unknown */
3703
3704typedef struct AlterFunctionStmt
3705{
3706 NodeTag type;
3708 ObjectWithArgs *func; /* name and args of function */
3709 List *actions; /* list of DefElem */
3711
3712/* ----------------------
3713 * DO Statement
3714 *
3715 * DoStmt is the raw parser output, InlineCodeBlock is the execution-time API
3716 * ----------------------
3717 */
3718typedef struct DoStmt
3719{
3720 NodeTag type;
3721 List *args; /* List of DefElem nodes */
3722} DoStmt;
3723
3724typedef struct InlineCodeBlock
3725{
3726 pg_node_attr(nodetag_only) /* this is not a member of parse trees */
3727
3728 NodeTag type;
3729 char *source_text; /* source text of anonymous code block */
3730 Oid langOid; /* OID of selected language */
3731 bool langIsTrusted; /* trusted property of the language */
3732 bool atomic; /* atomic execution context */
3734
3735/* ----------------------
3736 * CALL statement
3737 *
3738 * OUT-mode arguments are removed from the transformed funcexpr. The outargs
3739 * list contains copies of the expressions for all output arguments, in the
3740 * order of the procedure's declared arguments. (outargs is never evaluated,
3741 * but is useful to the caller as a reference for what to assign to.)
3742 * The transformed call state is not relevant in the query jumbling, only the
3743 * function call is.
3744 * ----------------------
3745 */
3746typedef struct CallStmt
3747{
3748 NodeTag type;
3749 /* from the parser */
3751 /* transformed call, with only input args */
3753 /* transformed output-argument expressions */
3754 List *outargs;
3755} CallStmt;
3756
3757typedef struct CallContext
3758{
3759 pg_node_attr(nodetag_only) /* this is not a member of parse trees */
3760
3761 NodeTag type;
3762 bool atomic;
3763} CallContext;
3764
3765/* ----------------------
3766 * Alter Object Rename Statement
3767 * ----------------------
3768 */
3769typedef struct RenameStmt
3770{
3771 NodeTag type;
3772 ObjectType renameType; /* OBJECT_TABLE, OBJECT_COLUMN, etc */
3773 ObjectType relationType; /* if column name, associated relation type */
3774 RangeVar *relation; /* in case it's a table */
3775 Node *object; /* in case it's some other object */
3776 char *subname; /* name of contained object (column, rule,
3777 * trigger, etc) */
3778 char *newname; /* the new name */
3779 DropBehavior behavior; /* RESTRICT or CASCADE behavior */
3780 bool missing_ok; /* skip error if missing? */
3781} RenameStmt;
3782
3783/* ----------------------
3784 * ALTER object DEPENDS ON EXTENSION extname
3785 * ----------------------
3786 */
3787typedef struct AlterObjectDependsStmt
3788{
3789 NodeTag type;
3790 ObjectType objectType; /* OBJECT_FUNCTION, OBJECT_TRIGGER, etc */
3791 RangeVar *relation; /* in case a table is involved */
3792 Node *object; /* name of the object */
3793 String *extname; /* extension name */
3794 bool remove; /* set true to remove dep rather than add */
3796
3797/* ----------------------
3798 * ALTER object SET SCHEMA Statement
3799 * ----------------------
3800 */
3801typedef struct AlterObjectSchemaStmt
3802{
3803 NodeTag type;
3804 ObjectType objectType; /* OBJECT_TABLE, OBJECT_TYPE, etc */
3805 RangeVar *relation; /* in case it's a table */
3806 Node *object; /* in case it's some other object */
3807 char *newschema; /* the new schema */
3808 bool missing_ok; /* skip error if missing? */
3810
3811/* ----------------------
3812 * Alter Object Owner Statement
3813 * ----------------------
3814 */
3815typedef struct AlterOwnerStmt
3816{
3817 NodeTag type;
3818 ObjectType objectType; /* OBJECT_TABLE, OBJECT_TYPE, etc */
3819 RangeVar *relation; /* in case it's a table */
3820 Node *object; /* in case it's some other object */
3821 RoleSpec *newowner; /* the new owner */
3823
3824/* ----------------------
3825 * Alter Operator Set ( this-n-that )
3826 * ----------------------
3827 */
3828typedef struct AlterOperatorStmt
3829{
3830 NodeTag type;
3831 ObjectWithArgs *opername; /* operator name and argument types */
3832 List *options; /* List of DefElem nodes */
3834
3835/* ------------------------
3836 * Alter Type Set ( this-n-that )
3837 * ------------------------
3838 */
3839typedef struct AlterTypeStmt
3840{
3841 NodeTag type;
3842 List *typeName; /* type name (possibly qualified) */
3843 List *options; /* List of DefElem nodes */
3845
3846/* ----------------------
3847 * Create Rule Statement
3848 * ----------------------
3849 */
3850typedef struct RuleStmt
3851{
3852 NodeTag type;
3853 RangeVar *relation; /* relation the rule is for */
3854 char *rulename; /* name of the rule */
3855 Node *whereClause; /* qualifications */
3856 CmdType event; /* SELECT, INSERT, etc */
3857 bool instead; /* is a 'do instead'? */
3858 List *actions; /* the action statements */
3859 bool replace; /* OR REPLACE */
3860} RuleStmt;
3861
3862/* ----------------------
3863 * Notify Statement
3864 * ----------------------
3865 */
3866typedef struct NotifyStmt
3867{
3868 NodeTag type;
3869 char *conditionname; /* condition name to notify */
3870 char *payload; /* the payload string, or NULL if none */
3871} NotifyStmt;
3872
3873/* ----------------------
3874 * Listen Statement
3875 * ----------------------
3876 */
3877typedef struct ListenStmt
3878{
3879 NodeTag type;
3880 char *conditionname; /* condition name to listen on */
3881} ListenStmt;
3882
3883/* ----------------------
3884 * Unlisten Statement
3885 * ----------------------
3886 */
3887typedef struct UnlistenStmt
3888{
3889 NodeTag type;
3890 char *conditionname; /* name to unlisten on, or NULL for all */
3891} UnlistenStmt;
3892
3893/* ----------------------
3894 * {Begin|Commit|Rollback} Transaction Statement
3895 * ----------------------
3896 */
3897typedef enum TransactionStmtKind
3898{
3900 TRANS_STMT_START, /* semantically identical to BEGIN */
3910
3911typedef struct TransactionStmt
3912{
3913 NodeTag type;
3914 TransactionStmtKind kind; /* see above */
3915 List *options; /* for BEGIN/START commands */
3916 /* for savepoint commands */
3918 /* for two-phase-commit related commands */
3920 bool chain; /* AND CHAIN option */
3921 /* token location, or -1 if unknown */
3924
3925/* ----------------------
3926 * Create Type Statement, composite types
3927 * ----------------------
3928 */
3929typedef struct CompositeTypeStmt
3930{
3931 NodeTag type;
3932 RangeVar *typevar; /* the composite type to be created */
3933 List *coldeflist; /* list of ColumnDef nodes */
3935
3936/* ----------------------
3937 * Create Type Statement, enum types
3938 * ----------------------
3939 */
3940typedef struct CreateEnumStmt
3941{
3942 NodeTag type;
3943 List *typeName; /* qualified name (list of String) */
3944 List *vals; /* enum values (list of String) */
3946
3947/* ----------------------
3948 * Create Type Statement, range types
3949 * ----------------------
3950 */
3951typedef struct CreateRangeStmt
3952{
3953 NodeTag type;
3954 List *typeName; /* qualified name (list of String) */
3955 List *params; /* range parameters (list of DefElem) */
3957
3958/* ----------------------
3959 * Alter Type Statement, enum types
3960 * ----------------------
3961 */
3962typedef struct AlterEnumStmt
3963{
3964 NodeTag type;
3965 List *typeName; /* qualified name (list of String) */
3966 char *oldVal; /* old enum value's name, if renaming */
3967 char *newVal; /* new enum value's name */
3968 char *newValNeighbor; /* neighboring enum value, if specified */
3969 bool newValIsAfter; /* place new enum value after neighbor? */
3970 bool skipIfNewValExists; /* no error if new already exists? */
3972
3973/* ----------------------
3974 * Create View Statement
3975 * ----------------------
3976 */
3977typedef enum ViewCheckOption
3978{
3983
3984typedef struct ViewStmt
3985{
3986 NodeTag type;
3987 RangeVar *view; /* the view to be created */
3988 List *aliases; /* target column names */
3989 Node *query; /* the SELECT query (as a raw parse tree) */
3990 bool replace; /* replace an existing view? */
3991 List *options; /* options from WITH clause */
3992 ViewCheckOption withCheckOption; /* WITH CHECK OPTION */
3993} ViewStmt;
3994
3995/* ----------------------
3996 * Load Statement
3997 * ----------------------
3998 */
3999typedef struct LoadStmt
4000{
4001 NodeTag type;
4002 char *filename; /* file to load */
4003} LoadStmt;
4004
4005/* ----------------------
4006 * Createdb Statement
4007 * ----------------------
4008 */
4009typedef struct CreatedbStmt
4010{
4011 NodeTag type;
4012 char *dbname; /* name of database to create */
4013 List *options; /* List of DefElem nodes */
4014} CreatedbStmt;
4015
4016/* ----------------------
4017 * Alter Database
4018 * ----------------------
4019 */
4020typedef struct AlterDatabaseStmt
4021{
4022 NodeTag type;
4023 char *dbname; /* name of database to alter */
4024 List *options; /* List of DefElem nodes */
4026
4027typedef struct AlterDatabaseRefreshCollStmt
4028{
4029 NodeTag type;
4030 char *dbname;
4032
4033typedef struct AlterDatabaseSetStmt
4034{
4035 NodeTag type;
4036 char *dbname; /* database name */
4037 VariableSetStmt *setstmt; /* SET or RESET subcommand */
4039
4040/* ----------------------
4041 * Dropdb Statement
4042 * ----------------------
4043 */
4044typedef struct DropdbStmt
4045{
4046 NodeTag type;
4047 char *dbname; /* database to drop */
4048 bool missing_ok; /* skip error if db is missing? */
4049 List *options; /* currently only FORCE is supported */
4050} DropdbStmt;
4051
4052/* ----------------------
4053 * Alter System Statement
4054 * ----------------------
4055 */
4056typedef struct AlterSystemStmt
4057{
4058 NodeTag type;
4059 VariableSetStmt *setstmt; /* SET subcommand */
4061
4062/* ----------------------
4063 * Vacuum and Analyze Statements
4064 *
4065 * Even though these are nominally two statements, it's convenient to use
4066 * just one node type for both.
4067 * ----------------------
4068 */
4069typedef struct VacuumStmt
4070{
4071 NodeTag type;
4072 List *options; /* list of DefElem nodes */
4073 List *rels; /* list of VacuumRelation, or NIL for all */
4074 bool is_vacuumcmd; /* true for VACUUM, false otherwise */
4075} VacuumStmt;
4076
4077/*
4078 * Info about a single target table of VACUUM/ANALYZE.
4079 *
4080 * If the OID field is set, it always identifies the table to process.
4081 * Then the relation field can be NULL; if it isn't, it's used only to report
4082 * failure to open/lock the relation.
4083 */
4084typedef struct VacuumRelation
4085{
4086 NodeTag type;
4087 RangeVar *relation; /* table name to process, or NULL */
4088 Oid oid; /* table's OID; InvalidOid if not looked up */
4089 List *va_cols; /* list of column names, or NIL for all */
4091
4092/* ----------------------
4093 * Repack Statement
4094 * ----------------------
4095 */
4096typedef enum RepackCommand
4097{
4102
4103typedef struct RepackStmt
4104{
4105 NodeTag type;
4106 RepackCommand command; /* type of command being run */
4107 VacuumRelation *relation; /* relation being repacked */
4108 char *indexname; /* order tuples by this index */
4109 bool usingindex; /* whether USING INDEX is specified */
4110 List *params; /* list of DefElem nodes */
4111} RepackStmt;
4112
4113/* ----------------------
4114 * Explain Statement
4115 *
4116 * The "query" field is initially a raw parse tree, and is converted to a
4117 * Query node during parse analysis. Note that rewriting and planning
4118 * of the query are always postponed until execution.
4119 * ----------------------
4120 */
4121typedef struct ExplainStmt
4122{
4123 NodeTag type;
4124 Node *query; /* the query (see comments above) */
4125 List *options; /* list of DefElem nodes */
4126} ExplainStmt;
4127
4128/* ----------------------
4129 * CREATE TABLE AS Statement (a/k/a SELECT INTO)
4130 *
4131 * A query written as CREATE TABLE AS will produce this node type natively.
4132 * A query written as SELECT ... INTO will be transformed to this form during
4133 * parse analysis.
4134 * A query written as CREATE MATERIALIZED view will produce this node type,
4135 * during parse analysis, since it needs all the same data.
4136 *
4137 * The "query" field is handled similarly to EXPLAIN, though note that it
4138 * can be a SELECT or an EXECUTE, but not other DML statements.
4139 * ----------------------
4140 */
4141typedef struct CreateTableAsStmt
4142{
4143 NodeTag type;
4144 Node *query; /* the query (see comments above) */
4145 IntoClause *into; /* destination table */
4146 ObjectType objtype; /* OBJECT_TABLE or OBJECT_MATVIEW */
4147 bool is_select_into; /* it was written as SELECT INTO */
4148 bool if_not_exists; /* just do nothing if it already exists? */
4150
4151/* ----------------------
4152 * REFRESH MATERIALIZED VIEW Statement
4153 * ----------------------
4154 */
4155typedef struct RefreshMatViewStmt
4156{
4157 NodeTag type;
4158 bool concurrent; /* allow concurrent access? */
4159 bool skipData; /* true for WITH NO DATA */
4160 RangeVar *relation; /* relation to insert into */
4162
4163/* ----------------------
4164 * Checkpoint Statement
4165 * ----------------------
4166 */
4167typedef struct CheckPointStmt
4168{
4169 NodeTag type;
4170 List *options; /* list of DefElem nodes */
4172
4173/* ----------------------
4174 * Discard Statement
4175 * ----------------------
4176 */
4177
4178typedef enum DiscardMode
4179{
4184} DiscardMode;
4185
4186typedef struct DiscardStmt
4187{
4188 NodeTag type;
4190} DiscardStmt;
4191
4192/* ----------------------
4193 * LOCK Statement
4194 * ----------------------
4195 */
4196typedef struct LockStmt
4197{
4198 NodeTag type;
4199 List *relations; /* relations to lock */
4200 int mode; /* lock mode */
4201 bool nowait; /* no wait mode */
4202} LockStmt;
4203
4204/* ----------------------
4205 * SET CONSTRAINTS Statement
4206 * ----------------------
4207 */
4208typedef struct ConstraintsSetStmt
4209{
4210 NodeTag type;
4211 List *constraints; /* List of names as RangeVars */
4212 bool deferred;
4214
4215/* ----------------------
4216 * REINDEX Statement
4217 * ----------------------
4218 */
4219typedef enum ReindexObjectType
4220{
4221 REINDEX_OBJECT_INDEX, /* index */
4222 REINDEX_OBJECT_TABLE, /* table or materialized view */
4223 REINDEX_OBJECT_SCHEMA, /* schema */
4224 REINDEX_OBJECT_SYSTEM, /* system catalogs */
4225 REINDEX_OBJECT_DATABASE, /* database */
4227
4228typedef struct ReindexStmt
4229{
4230 NodeTag type;
4231 ReindexObjectType kind; /* REINDEX_OBJECT_INDEX, REINDEX_OBJECT_TABLE,
4232 * etc. */
4233 RangeVar *relation; /* Table or index to reindex */
4234 const char *name; /* name of database to reindex */
4235 List *params; /* list of DefElem nodes */
4236} ReindexStmt;
4237
4238/* ----------------------
4239 * CREATE CONVERSION Statement
4240 * ----------------------
4241 */
4242typedef struct CreateConversionStmt
4243{
4244 NodeTag type;
4245 List *conversion_name; /* Name of the conversion */
4246 char *for_encoding_name; /* source encoding name */
4247 char *to_encoding_name; /* destination encoding name */
4248 List *func_name; /* qualified conversion function name */
4249 bool def; /* is this a default conversion? */
4251
4252/* ----------------------
4253 * CREATE CAST Statement
4254 * ----------------------
4255 */
4256typedef struct CreateCastStmt
4257{
4258 NodeTag type;
4263 bool inout;
4265
4266/* ----------------------
4267 * CREATE PROPERTY GRAPH Statement
4268 * ----------------------
4269 */
4270typedef struct CreatePropGraphStmt
4271{
4272 NodeTag type;
4277
4278typedef struct PropGraphVertex
4279{
4280 NodeTag type;
4282 List *vkey;
4283 List *labels;
4286
4287typedef struct PropGraphEdge
4288{
4289 NodeTag type;
4291 List *ekey;
4292 List *esrckey;
4293 char *esrcvertex;
4295 List *edestkey;
4296 char *edestvertex;
4298 List *labels;
4301
4302typedef struct PropGraphLabelAndProperties
4303{
4304 NodeTag type;
4305 const char *label;
4309
4310typedef struct PropGraphProperties
4311{
4312 NodeTag type;
4314 bool all;
4317
4318/* ----------------------
4319 * ALTER PROPERTY GRAPH Statement
4320 * ----------------------
4321 */
4322
4323typedef enum AlterPropGraphElementKind
4324{
4328
4329typedef struct AlterPropGraphStmt
4330{
4331 NodeTag type;
4333 bool missing_ok;
4340 const char *element_alias;
4342 const char *drop_label;
4343 const char *alter_label;
4347
4348/* ----------------------
4349 * CREATE TRANSFORM Statement
4350 * ----------------------
4351 */
4352typedef struct CreateTransformStmt
4353{
4354 NodeTag type;
4355 bool replace;
4357 char *lang;
4361
4362/* ----------------------
4363 * PREPARE Statement
4364 * ----------------------
4365 */
4366typedef struct PrepareStmt
4367{
4368 NodeTag type;
4369 char *name; /* Name of plan, arbitrary */
4370 List *argtypes; /* Types of parameters (List of TypeName) */
4371 Node *query; /* The query itself (as a raw parsetree) */
4372} PrepareStmt;
4373
4374
4375/* ----------------------
4376 * EXECUTE Statement
4377 * ----------------------
4378 */
4379
4380typedef struct ExecuteStmt
4381{
4382 NodeTag type;
4383 char *name; /* The name of the plan to execute */
4384 List *params; /* Values to assign to parameters */
4385} ExecuteStmt;
4386
4387
4388/* ----------------------
4389 * DEALLOCATE Statement
4390 * ----------------------
4391 */
4392typedef struct DeallocateStmt
4393{
4394 NodeTag type;
4395 /* The name of the plan to remove, NULL if DEALLOCATE ALL */
4397
4398 /*
4399 * True if DEALLOCATE ALL. This is redundant with "name == NULL", but we
4400 * make it a separate field so that exactly this condition (and not the
4401 * precise name) will be accounted for in query jumbling.
4402 */
4403 bool isall;
4404 /* token location, or -1 if unknown */
4407
4408/*
4409 * DROP OWNED statement
4410 */
4411typedef struct DropOwnedStmt
4412{
4413 NodeTag type;
4414 List *roles;
4417
4418/*
4419 * REASSIGN OWNED statement
4420 */
4421typedef struct ReassignOwnedStmt
4422{
4423 NodeTag type;
4424 List *roles;
4427
4428/*
4429 * TS Dictionary stmts: DefineStmt, RenameStmt and DropStmt are default
4430 */
4431typedef struct AlterTSDictionaryStmt
4432{
4433 NodeTag type;
4434 List *dictname; /* qualified name (list of String) */
4435 List *options; /* List of DefElem nodes */
4437
4438/*
4439 * TS Configuration stmts: DefineStmt, RenameStmt and DropStmt are default
4440 */
4441typedef enum AlterTSConfigType
4442{
4449
4450typedef struct AlterTSConfigurationStmt
4451{
4452 NodeTag type;
4453 AlterTSConfigType kind; /* ALTER_TSCONFIG_ADD_MAPPING, etc */
4454 List *cfgname; /* qualified name (list of String) */
4455
4456 /*
4457 * dicts will be non-NIL if ADD/ALTER MAPPING was specified. If dicts is
4458 * NIL, but tokentype isn't, DROP MAPPING was specified.
4459 */
4460 List *tokentype; /* list of String */
4461 List *dicts; /* list of list of String */
4462 bool override; /* if true - remove old variant */
4463 bool replace; /* if true - replace dictionary by another */
4464 bool missing_ok; /* for DROP - skip error if missing? */
4466
4467typedef struct PublicationTable
4468{
4469 NodeTag type;
4470 RangeVar *relation; /* publication relation */
4471 Node *whereClause; /* qualifications */
4472 List *columns; /* List of columns in a publication table */
4473 bool except; /* True if listed in the EXCEPT clause */
4475
4476/*
4477 * Publication object type
4478 */
4479typedef enum PublicationObjSpecType
4480{
4481 PUBLICATIONOBJ_TABLE, /* A table */
4482 PUBLICATIONOBJ_EXCEPT_TABLE, /* A table in the EXCEPT clause */
4483 PUBLICATIONOBJ_TABLES_IN_SCHEMA, /* All tables in schema */
4484 PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA, /* All tables in first element of
4485 * search_path */
4486 PUBLICATIONOBJ_CONTINUATION, /* Continuation of previous type */
4488
4489typedef struct PublicationObjSpec
4490{
4491 NodeTag type;
4492 PublicationObjSpecType pubobjtype; /* type of this publication object */
4493 char *name;
4495 ParseLoc location; /* token location, or -1 if unknown */
4497
4498/*
4499 * Types of objects supported by FOR ALL publications
4500 */
4501typedef enum PublicationAllObjType
4502{
4506
4507typedef struct PublicationAllObjSpec
4508{
4509 NodeTag type;
4510 PublicationAllObjType pubobjtype; /* type of this publication object */
4511 List *except_tables; /* tables specified in the EXCEPT clause */
4512 ParseLoc location; /* token location, or -1 if unknown */
4514
4515typedef struct CreatePublicationStmt
4516{
4517 NodeTag type;
4518 char *pubname; /* Name of the publication */
4519 List *options; /* List of DefElem nodes */
4520 List *pubobjects; /* Optional list of publication objects */
4521 bool for_all_tables; /* Special publication for all tables in db */
4522 bool for_all_sequences; /* Special publication for all sequences
4523 * in db */
4525
4526typedef enum AlterPublicationAction
4527{
4528 AP_AddObjects, /* add objects to publication */
4529 AP_DropObjects, /* remove objects from publication */
4530 AP_SetObjects, /* set list of objects */
4532
4533typedef struct AlterPublicationStmt
4534{
4535 NodeTag type;
4536 char *pubname; /* Name of the publication */
4537
4538 /* parameters used for ALTER PUBLICATION ... WITH */
4539 List *options; /* List of DefElem nodes */
4540
4541 /*
4542 * Parameters used for ALTER PUBLICATION ... ADD/DROP/SET publication
4543 * objects.
4544 */
4545 List *pubobjects; /* Optional list of publication objects */
4546 AlterPublicationAction action; /* What action to perform with the given
4547 * objects */
4548 bool for_all_tables; /* True if ALL TABLES is specified */
4549 bool for_all_sequences; /* True if ALL SEQUENCES is specified */
4551
4552typedef struct CreateSubscriptionStmt
4553{
4554 NodeTag type;
4555 char *subname; /* Name of the subscription */
4556 char *servername; /* Server name of publisher */
4557 char *conninfo; /* Connection string to publisher */
4558 List *publication; /* One or more publication to subscribe to */
4559 List *options; /* List of DefElem nodes */
4561
4562typedef enum AlterSubscriptionType
4563{
4575
4576typedef struct AlterSubscriptionStmt
4577{
4578 NodeTag type;
4579 AlterSubscriptionType kind; /* ALTER_SUBSCRIPTION_OPTIONS, etc */
4580 char *subname; /* Name of the subscription */
4581 char *servername; /* Server name of publisher */
4582 char *conninfo; /* Connection string to publisher */
4583 List *publication; /* One or more publication to subscribe to */
4584 List *options; /* List of DefElem nodes */
4586
4587typedef struct DropSubscriptionStmt
4588{
4589 NodeTag type;
4590 char *subname; /* Name of the subscription */
4591 bool missing_ok; /* Skip error if missing? */
4592 DropBehavior behavior; /* RESTRICT or CASCADE behavior */
4594
4595typedef struct WaitStmt
4596{
4597 NodeTag type;
4598 char *lsn_literal; /* LSN string from grammar */
4599 List *options; /* List of DefElem nodes */
4600} WaitStmt;
4601
4602
4603#endif /* PARSENODES_H */
#define PG_INT32_MAX
Definition c.h:673
uint32 SubTransactionId
Definition c.h:740
int16_t int16
Definition c.h:619
uint32_t uint32
Definition c.h:624
unsigned int Index
Definition c.h:698
LockWaitPolicy
Definition lockoptions.h:38
LockClauseStrength
Definition lockoptions.h:22
#define pg_node_attr(...)
Definition nodes.h:126
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:441
int ParseLoc
Definition nodes.h:250
JoinType
Definition nodes.h:298
AlterSubscriptionType
@ ALTER_SUBSCRIPTION_REFRESH_PUBLICATION
@ ALTER_SUBSCRIPTION_ENABLED
@ ALTER_SUBSCRIPTION_DROP_PUBLICATION
@ ALTER_SUBSCRIPTION_SERVER
@ ALTER_SUBSCRIPTION_SET_PUBLICATION
@ ALTER_SUBSCRIPTION_REFRESH_SEQUENCES
@ ALTER_SUBSCRIPTION_SKIP
@ ALTER_SUBSCRIPTION_OPTIONS
@ ALTER_SUBSCRIPTION_CONNECTION
@ ALTER_SUBSCRIPTION_ADD_PUBLICATION
PublicationAllObjType
@ PUBLICATION_ALL_TABLES
@ PUBLICATION_ALL_SEQUENCES
AlterDomainType
@ AD_AddConstraint
@ AD_DropConstraint
@ AD_AlterDefault
@ AD_DropNotNull
@ AD_ValidateConstraint
@ AD_SetNotNull
TransactionStmtKind
@ TRANS_STMT_ROLLBACK_TO
@ TRANS_STMT_START
@ TRANS_STMT_SAVEPOINT
@ TRANS_STMT_BEGIN
@ TRANS_STMT_ROLLBACK
@ TRANS_STMT_COMMIT_PREPARED
@ TRANS_STMT_COMMIT
@ TRANS_STMT_ROLLBACK_PREPARED
@ TRANS_STMT_PREPARE
@ TRANS_STMT_RELEASE
WCOKind
@ WCO_RLS_MERGE_UPDATE_CHECK
@ WCO_RLS_CONFLICT_CHECK
@ WCO_RLS_INSERT_CHECK
@ WCO_VIEW_CHECK
@ WCO_RLS_UPDATE_CHECK
@ WCO_RLS_MERGE_DELETE_CHECK
JsonTableColumnType
@ JTC_FORMATTED
@ JTC_FOR_ORDINALITY
@ JTC_NESTED
@ JTC_EXISTS
@ JTC_REGULAR
SortByNulls
Definition parsenodes.h:53
RepackCommand
@ REPACK_COMMAND_REPACK
@ REPACK_COMMAND_CLUSTER
@ REPACK_COMMAND_VACUUMFULL
GroupingSetKind
@ GROUPING_SET_CUBE
@ GROUPING_SET_SIMPLE
@ GROUPING_SET_ROLLUP
@ GROUPING_SET_SETS
@ GROUPING_SET_EMPTY
SetOperation
@ SETOP_INTERSECT
@ SETOP_UNION
@ SETOP_EXCEPT
@ SETOP_NONE
uint64 AclMode
Definition parsenodes.h:74
JsonQuotes
@ JS_QUOTES_KEEP
@ JS_QUOTES_UNSPEC
@ JS_QUOTES_OMIT
FunctionParameterMode
@ FUNC_PARAM_IN
@ FUNC_PARAM_DEFAULT
@ FUNC_PARAM_OUT
@ FUNC_PARAM_INOUT
@ FUNC_PARAM_TABLE
@ FUNC_PARAM_VARIADIC
AlterTSConfigType
@ ALTER_TSCONFIG_ALTER_MAPPING_FOR_TOKEN
@ ALTER_TSCONFIG_REPLACE_DICT_FOR_TOKEN
@ ALTER_TSCONFIG_REPLACE_DICT
@ ALTER_TSCONFIG_ADD_MAPPING
@ ALTER_TSCONFIG_DROP_MAPPING
PublicationObjSpecType
@ PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA
@ PUBLICATIONOBJ_TABLES_IN_SCHEMA
@ PUBLICATIONOBJ_TABLE
@ PUBLICATIONOBJ_EXCEPT_TABLE
@ PUBLICATIONOBJ_CONTINUATION
PartitionStrategy
Definition parsenodes.h:916
@ PARTITION_STRATEGY_HASH
Definition parsenodes.h:919
@ PARTITION_STRATEGY_LIST
Definition parsenodes.h:917
@ PARTITION_STRATEGY_RANGE
Definition parsenodes.h:918
ImportForeignSchemaType
@ FDW_IMPORT_SCHEMA_LIMIT_TO
@ FDW_IMPORT_SCHEMA_ALL
@ FDW_IMPORT_SCHEMA_EXCEPT
AlterPublicationAction
@ AP_DropObjects
@ AP_SetObjects
@ AP_AddObjects
RTEKind
@ RTE_JOIN
@ RTE_CTE
@ RTE_NAMEDTUPLESTORE
@ RTE_VALUES
@ RTE_SUBQUERY
@ RTE_RESULT
@ RTE_FUNCTION
@ RTE_TABLEFUNC
@ RTE_GROUP
@ RTE_GRAPH_TABLE
@ RTE_RELATION
DefElemAction
Definition parsenodes.h:849
@ DEFELEM_UNSPEC
Definition parsenodes.h:850
@ DEFELEM_DROP
Definition parsenodes.h:853
@ DEFELEM_SET
Definition parsenodes.h:851
@ DEFELEM_ADD
Definition parsenodes.h:852
ConstrType
@ CONSTR_ATTR_ENFORCED
@ CONSTR_FOREIGN
@ CONSTR_ATTR_DEFERRED
@ CONSTR_IDENTITY
@ CONSTR_UNIQUE
@ CONSTR_ATTR_NOT_DEFERRABLE
@ CONSTR_DEFAULT
@ CONSTR_NOTNULL
@ CONSTR_ATTR_IMMEDIATE
@ CONSTR_CHECK
@ CONSTR_NULL
@ CONSTR_GENERATED
@ CONSTR_EXCLUSION
@ CONSTR_ATTR_DEFERRABLE
@ CONSTR_ATTR_NOT_ENFORCED
@ CONSTR_PRIMARY
PartitionRangeDatumKind
Definition parsenodes.h:968
@ PARTITION_RANGE_DATUM_MAXVALUE
Definition parsenodes.h:971
@ PARTITION_RANGE_DATUM_VALUE
Definition parsenodes.h:970
@ PARTITION_RANGE_DATUM_MINVALUE
Definition parsenodes.h:969
GraphElementPatternKind
@ EDGE_PATTERN_RIGHT
@ VERTEX_PATTERN
@ EDGE_PATTERN_LEFT
@ PAREN_EXPR
@ EDGE_PATTERN_ANY
FetchDirection
@ FETCH_RELATIVE
@ FETCH_ABSOLUTE
@ FETCH_FORWARD
@ FETCH_BACKWARD
VariableSetKind
@ VAR_SET_DEFAULT
@ VAR_RESET
@ VAR_SET_MULTI
@ VAR_SET_VALUE
@ VAR_SET_CURRENT
@ VAR_RESET_ALL
DropBehavior
@ DROP_CASCADE
@ DROP_RESTRICT
ObjectType
@ OBJECT_EVENT_TRIGGER
@ OBJECT_FDW
@ OBJECT_TSPARSER
@ OBJECT_COLLATION
@ OBJECT_USER_MAPPING
@ OBJECT_PROPGRAPH
@ OBJECT_ACCESS_METHOD
@ OBJECT_OPCLASS
@ OBJECT_DEFACL
@ OBJECT_AGGREGATE
@ OBJECT_MATVIEW
@ OBJECT_SCHEMA
@ OBJECT_POLICY
@ OBJECT_OPERATOR
@ OBJECT_FOREIGN_TABLE
@ OBJECT_TSCONFIGURATION
@ OBJECT_OPFAMILY
@ OBJECT_DOMAIN
@ OBJECT_COLUMN
@ OBJECT_TABLESPACE
@ OBJECT_ROLE
@ OBJECT_ROUTINE
@ OBJECT_LARGEOBJECT
@ OBJECT_PUBLICATION_NAMESPACE
@ OBJECT_PROCEDURE
@ OBJECT_EXTENSION
@ OBJECT_INDEX
@ OBJECT_DEFAULT
@ OBJECT_DATABASE
@ OBJECT_SEQUENCE
@ OBJECT_TSTEMPLATE
@ OBJECT_LANGUAGE
@ OBJECT_AMOP
@ OBJECT_PUBLICATION_REL
@ OBJECT_FOREIGN_SERVER
@ OBJECT_TSDICTIONARY
@ OBJECT_ATTRIBUTE
@ OBJECT_PUBLICATION
@ OBJECT_RULE
@ OBJECT_CONVERSION
@ OBJECT_AMPROC
@ OBJECT_TABLE
@ OBJECT_VIEW
@ OBJECT_PARAMETER_ACL
@ OBJECT_TYPE
@ OBJECT_FUNCTION
@ OBJECT_TABCONSTRAINT
@ OBJECT_DOMCONSTRAINT
@ OBJECT_SUBSCRIPTION
@ OBJECT_STATISTIC_EXT
@ OBJECT_CAST
@ OBJECT_TRIGGER
@ OBJECT_TRANSFORM
ReindexObjectType
@ REINDEX_OBJECT_DATABASE
@ REINDEX_OBJECT_INDEX
@ REINDEX_OBJECT_SCHEMA
@ REINDEX_OBJECT_SYSTEM
@ REINDEX_OBJECT_TABLE
AlterPropGraphElementKind
@ PROPGRAPH_ELEMENT_KIND_EDGE
@ PROPGRAPH_ELEMENT_KIND_VERTEX
AlterTableType
@ AT_AddIndexConstraint
@ AT_MergePartitions
@ AT_DropOf
@ AT_SetOptions
@ AT_DropIdentity
@ AT_DisableTrigUser
@ AT_DropNotNull
@ AT_AddOf
@ AT_ResetOptions
@ AT_ReplicaIdentity
@ AT_ReplaceRelOptions
@ AT_EnableRowSecurity
@ AT_AddColumnToView
@ AT_ResetRelOptions
@ AT_EnableReplicaTrig
@ AT_DropOids
@ AT_SetIdentity
@ AT_ReAddStatistics
@ AT_SetUnLogged
@ AT_DisableTrig
@ AT_SetCompression
@ AT_DropExpression
@ AT_AddIndex
@ AT_EnableReplicaRule
@ AT_ReAddIndex
@ AT_DropConstraint
@ AT_SetNotNull
@ AT_ClusterOn
@ AT_AddIdentity
@ AT_ForceRowSecurity
@ AT_EnableAlwaysRule
@ AT_SetAccessMethod
@ AT_AlterColumnType
@ AT_DetachPartitionFinalize
@ AT_AddInherit
@ AT_ReAddDomainConstraint
@ AT_EnableTrig
@ AT_DropColumn
@ AT_ReAddComment
@ AT_AlterColumnGenericOptions
@ AT_DisableTrigAll
@ AT_EnableRule
@ AT_NoForceRowSecurity
@ AT_DetachPartition
@ AT_SetStatistics
@ AT_AttachPartition
@ AT_AddConstraint
@ AT_DropInherit
@ AT_EnableAlwaysTrig
@ AT_SetLogged
@ AT_SetStorage
@ AT_DisableRule
@ AT_DisableRowSecurity
@ AT_SetRelOptions
@ AT_ChangeOwner
@ AT_EnableTrigUser
@ AT_SetExpression
@ AT_ReAddConstraint
@ AT_SetTableSpace
@ AT_GenericOptions
@ AT_ColumnDefault
@ AT_CookedColumnDefault
@ AT_AlterConstraint
@ AT_EnableTrigAll
@ AT_SplitPartition
@ AT_DropCluster
@ AT_ValidateConstraint
@ AT_AddColumn
GrantTargetType
@ ACL_TARGET_DEFAULTS
@ ACL_TARGET_OBJECT
@ ACL_TARGET_ALL_IN_SCHEMA
FetchDirectionKeywords
@ FETCH_KEYWORD_LAST
@ FETCH_KEYWORD_RELATIVE
@ FETCH_KEYWORD_PRIOR
@ FETCH_KEYWORD_FIRST
@ FETCH_KEYWORD_NEXT
@ FETCH_KEYWORD_FORWARD_ALL
@ FETCH_KEYWORD_NONE
@ FETCH_KEYWORD_ABSOLUTE
@ FETCH_KEYWORD_FORWARD
@ FETCH_KEYWORD_BACKWARD
@ FETCH_KEYWORD_ALL
@ FETCH_KEYWORD_BACKWARD_ALL
DiscardMode
@ DISCARD_ALL
@ DISCARD_PLANS
@ DISCARD_SEQUENCES
@ DISCARD_TEMP
ReturningOptionKind
@ RETURNING_OPTION_NEW
@ RETURNING_OPTION_OLD
SortByDir
Definition parsenodes.h:45
RoleStmtType
@ ROLESTMT_ROLE
@ ROLESTMT_USER
@ ROLESTMT_GROUP
TableLikeOption
Definition parsenodes.h:804
@ CREATE_TABLE_LIKE_COMMENTS
Definition parsenodes.h:805
@ CREATE_TABLE_LIKE_GENERATED
Definition parsenodes.h:809
@ CREATE_TABLE_LIKE_IDENTITY
Definition parsenodes.h:810
@ CREATE_TABLE_LIKE_COMPRESSION
Definition parsenodes.h:806
@ CREATE_TABLE_LIKE_STORAGE
Definition parsenodes.h:813
@ CREATE_TABLE_LIKE_ALL
Definition parsenodes.h:814
@ CREATE_TABLE_LIKE_INDEXES
Definition parsenodes.h:811
@ CREATE_TABLE_LIKE_DEFAULTS
Definition parsenodes.h:808
@ CREATE_TABLE_LIKE_STATISTICS
Definition parsenodes.h:812
@ CREATE_TABLE_LIKE_CONSTRAINTS
Definition parsenodes.h:807
ViewCheckOption
@ NO_CHECK_OPTION
@ CASCADED_CHECK_OPTION
@ LOCAL_CHECK_OPTION
CTEMaterialize
@ CTEMaterializeNever
@ CTEMaterializeAlways
@ CTEMaterializeDefault
unsigned int Oid
static int fb(int x)
XmlOptionType
Definition primnodes.h:1618
JsonWrapper
Definition primnodes.h:1777
OnCommitAction
Definition primnodes.h:58
JsonExprOp
Definition primnodes.h:1829
OverridingKind
Definition primnodes.h:28
MergeMatchKind
Definition primnodes.h:2023
CoercionContext
Definition primnodes.h:746
Oid RelFileNumber
Definition relpath.h:25
char * priv_name
NodeTag type
List * cols
VariableSetStmt * setstmt
AlterDomainType subtype
DropBehavior behavior
char * newValNeighbor
bool skipIfNewValExists
List * func_options
ObjectWithArgs * func
ObjectType objtype
ObjectWithArgs * opername
RangeVar * relation
RoleSpec * newowner
ObjectType objectType
RangeVar * table
PropGraphProperties * add_properties
const char * alter_label
AlterPropGraphElementKind element_kind
DropBehavior drop_behavior
const char * element_alias
const char * drop_label
AlterPublicationAction action
RoleSpec * role
VariableSetStmt * setstmt
RoleSpec * role
RangeVar * sequence
Node * stxstattarget
AlterSubscriptionType kind
VariableSetStmt * setstmt
AlterTSConfigType kind
RoleSpec * newowner
DropBehavior behavior
AlterTableType subtype
RangeVar * relation
ObjectType objtype
char * cycle_path_column
ParseLoc location
Node * cycle_mark_default
List * cycle_col_list
char * cycle_mark_column
Node * cycle_mark_value
ParseLoc location
char * search_seq_column
bool search_breadth_first
List * search_col_list
FuncExpr * funcexpr
NodeTag type
List * outargs
bool is_not_null
Definition parsenodes.h:775
CollateClause * collClause
Definition parsenodes.h:785
char identity
Definition parsenodes.h:781
RangeVar * identitySequence
Definition parsenodes.h:782
List * constraints
Definition parsenodes.h:787
Node * cooked_default
Definition parsenodes.h:780
char * storage_name
Definition parsenodes.h:778
char * colname
Definition parsenodes.h:770
TypeName * typeName
Definition parsenodes.h:771
char generated
Definition parsenodes.h:784
NodeTag type
Definition parsenodes.h:769
bool is_from_type
Definition parsenodes.h:776
List * fdwoptions
Definition parsenodes.h:788
Node * raw_default
Definition parsenodes.h:779
char storage
Definition parsenodes.h:777
bool is_local
Definition parsenodes.h:774
int16 inhcount
Definition parsenodes.h:773
char * compression
Definition parsenodes.h:772
ParseLoc location
Definition parsenodes.h:789
char * comment
ObjectType objtype
NodeTag type
Node * object
CTEMaterialize ctematerialized
ParseLoc location
RangeVar * typevar
bool initdeferred
List * exclusions
ParseLoc location
bool reset_default_tblspc
List * keys
List * pk_attrs
List * fk_del_set_cols
bool fk_with_period
Node * where_clause
char * indexname
char generated_kind
char * indexspace
ConstrType contype
char * access_method
Oid old_pktable_oid
bool is_no_inherit
List * options
char fk_upd_action
List * old_conpfeqop
bool is_enforced
char fk_matchtype
bool nulls_not_distinct
bool pk_with_period
char * cooked_expr
bool initially_valid
bool skip_validation
bool without_overlaps
bool deferrable
NodeTag type
Node * raw_expr
char * conname
char generated_when
RangeVar * pktable
List * including
char fk_del_action
List * fk_attrs
bool is_program
RangeVar * relation
List * options
bool is_from
char * filename
NodeTag type
List * attlist
Node * whereClause
Node * query
List * handler_name
TypeName * sourcetype
TypeName * targettype
CoercionContext context
ObjectWithArgs * func
TypeName * typeName
CollateClause * collClause
List * func_options
TypeName * returnType
ObjectWithArgs * name
TypeName * storedtype
TypeName * datatype
RangeVar * table
RoleStmtType stmt_type
RoleSpec * authrole
RangeVar * sequence
List * tableElts
List * nnconstraints
TypeName * ofTypename
OnCommitAction oncommit
List * options
bool if_not_exists
List * inhRelations
RangeVar * relation
char * tablespacename
PartitionSpec * partspec
NodeTag type
PartitionBoundSpec * partbound
char * accessMethod
List * constraints
IntoClause * into
ObjectType objtype
ObjectWithArgs * tosql
ObjectWithArgs * fromsql
List * transitionRels
RangeVar * constrrel
RangeVar * relation
char * defnamespace
Definition parsenodes.h:859
NodeTag type
Definition parsenodes.h:858
DefElemAction defaction
Definition parsenodes.h:863
char * defname
Definition parsenodes.h:860
ParseLoc location
Definition parsenodes.h:864
Node * arg
Definition parsenodes.h:861
List * definition
List * defnames
List * args
NodeTag type
ObjectType kind
bool if_not_exists
ReturningClause * returningClause
WithClause * withClause
Node * whereClause
RangeVar * relation
List * usingClause
ForPortionOfClause * forPortionOf
NodeTag type
NodeTag type
DiscardMode target
NodeTag type
List * args
DropBehavior behavior
bool missing_ok
List * objects
ObjectType removeType
bool concurrent
DropBehavior behavior
NodeTag type
DropBehavior behavior
List * options
char * dbname
bool missing_ok
NodeTag type
List * params
NodeTag type
NodeTag type
List * options
FetchDirection direction
char * portalname
FetchDirectionKeywords direction_keyword
NodeTag type
ParseLoc target_location
TypeName * argType
FunctionParameterMode mode
DropBehavior behavior
RoleSpec * grantor
List * grantee_roles
List * granted_roles
ObjectType objtype
bool is_grant
List * objects
bool grant_option
List * grantees
List * privileges
GrantTargetType targtype
NodeTag type
DropBehavior behavior
RoleSpec * grantor
GraphElementPatternKind kind
const char * variable
Node * whereClause
List * path_pattern_list
NodeTag type
List * content
ParseLoc location
ImportForeignSchemaType list_type
Node * expr
Definition parsenodes.h:828
SortByDir ordering
Definition parsenodes.h:833
List * opclassopts
Definition parsenodes.h:832
NodeTag type
Definition parsenodes.h:826
char * indexcolname
Definition parsenodes.h:829
ParseLoc location
Definition parsenodes.h:835
SortByNulls nulls_ordering
Definition parsenodes.h:834
List * opclass
Definition parsenodes.h:831
char * name
Definition parsenodes.h:827
List * collation
Definition parsenodes.h:830
bool reset_default_tblspc
NodeTag type
bool deferrable
List * indexParams
bool initdeferred
RangeVar * relation
SubTransactionId oldFirstRelfilelocatorSubid
bool iswithoutoverlaps
bool transformed
List * options
char * tableSpace
SubTransactionId oldCreateSubid
bool isconstraint
List * excludeOpNames
bool nulls_not_distinct
bool concurrent
char * idxname
Node * whereClause
bool if_not_exists
char * accessMethod
char * idxcomment
RelFileNumber oldNumber
List * indexIncludingParams
NodeTag type
ParseLoc location
char * conname
List * indexElems
Node * whereClause
OnConflictClause * onConflictClause
Node * selectStmt
ReturningClause * returningClause
WithClause * withClause
NodeTag type
RangeVar * relation
List * cols
struct WindowDef * over
JsonOutput * output
JsonValueExpr * val
bool absent_on_null
JsonValueExpr * arg
JsonAggConstructor * constructor
JsonOutput * output
JsonOutput * output
char * column_name
JsonWrapper wrapper
JsonQuotes quotes
JsonExprOp op
JsonBehavior * on_empty
ParseLoc location
Node * pathspec
JsonBehavior * on_error
JsonValueExpr * context_item
JsonValueExpr * value
JsonAggConstructor * constructor
JsonKeyValue * arg
JsonReturning * returning
TypeName * typeName
NodeTag type
JsonValueExpr * expr
ParseLoc location
JsonOutput * output
ParseLoc location
JsonOutput * output
JsonOutput * output
JsonValueExpr * expr
ParseLoc location
JsonTableColumnType coltype
JsonBehavior * on_empty
JsonWrapper wrapper
JsonBehavior * on_error
JsonQuotes quotes
JsonFormat * format
TypeName * typeName
JsonTablePathSpec * pathspec
ParseLoc name_location
JsonBehavior * on_error
List * columns
JsonTablePathSpec * pathspec
Alias * alias
NodeTag type
List * passing
JsonValueExpr * context_item
ParseLoc location
Definition pg_list.h:54
NodeTag type
char * conditionname
NodeTag type
char * filename
NodeTag type
bool nowait
List * relations
List * lockedRels
Definition parsenodes.h:879
LockClauseStrength strength
Definition parsenodes.h:880
LockWaitPolicy waitPolicy
Definition parsenodes.h:881
ReturningClause * returningClause
Node * sourceRelation
List * mergeWhenClauses
RangeVar * relation
Node * joinCondition
WithClause * withClause
NodeTag type
CmdType commandType
MergeMatchKind matchKind
Definition nodes.h:135
char * payload
char * conditionname
NodeTag type
InferClause * infer
OnConflictAction action
LockClauseStrength lockStrength
SelectStmt * val
ParseLoc location
List * indirection
PartitionBoundSpec * bound
List * partlist
RangeVar * name
List * collation
Definition parsenodes.h:910
ParseLoc location
Definition parsenodes.h:912
PartitionRangeDatumKind kind
Definition parsenodes.h:978
List * partParams
Definition parsenodes.h:931
ParseLoc location
Definition parsenodes.h:932
PartitionStrategy strategy
Definition parsenodes.h:930
List * argtypes
NodeTag type
List * edestvertexcols
char * esrcvertex
RangeVar * etable
char * edestvertex
ParseLoc location
List * esrcvertexcols
struct PropGraphProperties * properties
ParseLoc location
RangeVar * vtable
PublicationAllObjType pubobjtype
PublicationObjSpecType pubobjtype
PublicationTable * pubtable
RangeVar * relation
Bitmapset * selectedCols
Bitmapset * insertedCols
Bitmapset * updatedCols
Alias * alias
Definition parsenodes.h:675
List * coldeflist
Definition parsenodes.h:676
List * functions
Definition parsenodes.h:674
struct GraphPattern * graph_pattern
Definition parsenodes.h:723
ParseLoc location
Definition parsenodes.h:726
RangeVar * graph_name
Definition parsenodes.h:722
TypeName * typeName
Definition parsenodes.h:708
List * namespaces
Definition parsenodes.h:692
ParseLoc location
Definition parsenodes.h:695
ParseLoc location
Definition parsenodes.h:746
TableFunc * tablefunc
struct TableSampleClause * tablesample
Query * subquery
List * groupexprs
List * values_lists
JoinType jointype
List * graph_table_columns
GraphPattern * graph_pattern
RTEKind rtekind
ParseLoc stmt_location
ParseLoc stmt_len
Node * stmt
RoleSpec * newrole
RangeVar * relation
const char * name
ReindexObjectType kind
RangeVar * relation
List * params
NodeTag type
RangeVar * relation
bool missing_ok
ObjectType relationType
DropBehavior behavior
ObjectType renameType
NodeTag type
char * newname
char * subname
Node * object
bool usingindex
NodeTag type
VacuumRelation * relation
List * params
char * indexname
RepackCommand command
NodeTag type
Node * returnval
ReturningOptionKind option
ParseLoc location
LockClauseStrength strength
LockWaitPolicy waitPolicy
char * rulename
Node * whereClause
bool instead
RangeVar * relation
bool replace
CmdType event
List * actions
NodeTag type
ObjectType objtype
char * provider
LimitOption limitOption
List * sortClause
List * targetList
IntoClause * intoClause
Node * limitOffset
bool groupDistinct
List * fromClause
bool groupByAll
NodeTag type
List * groupClause
Node * havingClause
List * lockingClause
Node * limitCount
List * windowClause
List * distinctClause
List * valuesLists
struct SelectStmt * larg
struct SelectStmt * rarg
Node * whereClause
SetOperation op
WithClause * withClause
SetOperation op
PartitionBoundSpec * bound
Definition parsenodes.h:994
NodeTag type
char * name
Node * expr
Definition value.h:64
RangeVar * relation
Definition parsenodes.h:798
TransactionStmtKind kind
List * relations
DropBehavior behavior
char * conditionname
List * targetList
ForPortionOfClause * forPortionOf
List * fromClause
NodeTag type
Node * whereClause
ReturningClause * returningClause
RangeVar * relation
WithClause * withClause
RangeVar * relation
NodeTag type
List * options
bool is_vacuumcmd
List * rels
VariableSetKind kind
bool replace
List * options
Node * query
List * aliases
RangeVar * view
NodeTag type
ViewCheckOption withCheckOption
NodeTag type
List * options
char * lsn_literal
Node * startOffset
List * partitionClause
Node * endOffset
List * orderClause
List * ctes
NodeTag type
ParseLoc location
ParseLoc location
Definition parsenodes.h:894
TypeName * typeName
Definition parsenodes.h:892
NodeTag type
Definition parsenodes.h:889
XmlOptionType xmloption
Definition parsenodes.h:890
const char * type
const char * name

◆ FRAMEOPTION_END_CURRENT_ROW

#define FRAMEOPTION_END_CURRENT_ROW   0x00400 /* end is C. R. */

Definition at line 622 of file parsenodes.h.

◆ FRAMEOPTION_END_OFFSET

Definition at line 633 of file parsenodes.h.

◆ FRAMEOPTION_END_OFFSET_FOLLOWING

#define FRAMEOPTION_END_OFFSET_FOLLOWING   0x04000 /* end is O. F. */

Definition at line 626 of file parsenodes.h.

◆ FRAMEOPTION_END_OFFSET_PRECEDING

#define FRAMEOPTION_END_OFFSET_PRECEDING   0x01000 /* end is O. P. */

Definition at line 624 of file parsenodes.h.

◆ FRAMEOPTION_END_UNBOUNDED_FOLLOWING

#define FRAMEOPTION_END_UNBOUNDED_FOLLOWING   0x00100 /* end is U. F. */

Definition at line 620 of file parsenodes.h.

◆ FRAMEOPTION_END_UNBOUNDED_PRECEDING

#define FRAMEOPTION_END_UNBOUNDED_PRECEDING   0x00040 /* (disallowed) */

Definition at line 618 of file parsenodes.h.

◆ FRAMEOPTION_EXCLUDE_CURRENT_ROW

#define FRAMEOPTION_EXCLUDE_CURRENT_ROW   0x08000 /* omit C.R. */

Definition at line 627 of file parsenodes.h.

◆ FRAMEOPTION_EXCLUDE_GROUP

#define FRAMEOPTION_EXCLUDE_GROUP   0x10000 /* omit C.R. & peers */

Definition at line 628 of file parsenodes.h.

◆ FRAMEOPTION_EXCLUDE_TIES

#define FRAMEOPTION_EXCLUDE_TIES   0x20000 /* omit C.R.'s peers */

Definition at line 629 of file parsenodes.h.

◆ FRAMEOPTION_EXCLUSION

#define FRAMEOPTION_EXCLUSION
Value:
#define FRAMEOPTION_EXCLUDE_CURRENT_ROW
Definition parsenodes.h:627
#define FRAMEOPTION_EXCLUDE_TIES
Definition parsenodes.h:629
#define FRAMEOPTION_EXCLUDE_GROUP
Definition parsenodes.h:628

Definition at line 635 of file parsenodes.h.

◆ FRAMEOPTION_GROUPS

#define FRAMEOPTION_GROUPS   0x00008 /* GROUPS behavior */

Definition at line 615 of file parsenodes.h.

◆ FRAMEOPTION_NONDEFAULT

#define FRAMEOPTION_NONDEFAULT   0x00001 /* any specified? */

Definition at line 612 of file parsenodes.h.

◆ FRAMEOPTION_RANGE

#define FRAMEOPTION_RANGE   0x00002 /* RANGE behavior */

Definition at line 613 of file parsenodes.h.

◆ FRAMEOPTION_ROWS

#define FRAMEOPTION_ROWS   0x00004 /* ROWS behavior */

Definition at line 614 of file parsenodes.h.

◆ FRAMEOPTION_START_CURRENT_ROW

#define FRAMEOPTION_START_CURRENT_ROW   0x00200 /* start is C. R. */

Definition at line 621 of file parsenodes.h.

◆ FRAMEOPTION_START_OFFSET

Definition at line 631 of file parsenodes.h.

◆ FRAMEOPTION_START_OFFSET_FOLLOWING

#define FRAMEOPTION_START_OFFSET_FOLLOWING   0x02000 /* start is O. F. */

Definition at line 625 of file parsenodes.h.

◆ FRAMEOPTION_START_OFFSET_PRECEDING

#define FRAMEOPTION_START_OFFSET_PRECEDING   0x00800 /* start is O. P. */

Definition at line 623 of file parsenodes.h.

◆ FRAMEOPTION_START_UNBOUNDED_FOLLOWING

#define FRAMEOPTION_START_UNBOUNDED_FOLLOWING   0x00080 /* (disallowed) */

Definition at line 619 of file parsenodes.h.

◆ FRAMEOPTION_START_UNBOUNDED_PRECEDING

#define FRAMEOPTION_START_UNBOUNDED_PRECEDING   0x00020 /* start is U. P. */

Definition at line 617 of file parsenodes.h.

◆ GetCTETargetList

#define GetCTETargetList (   cte)
Value:
(AssertMacro(IsA((cte)->ctequery, Query)), \
((Query *) (cte)->ctequery)->commandType == CMD_SELECT ? \
((Query *) (cte)->ctequery)->targetList : \
((Query *) (cte)->ctequery)->returningList)
#define AssertMacro(condition)
Definition c.h:944
#define IsA(nodeptr, _type_)
Definition nodes.h:164
@ CMD_SELECT
Definition nodes.h:275

Definition at line 1840 of file parsenodes.h.

1843 : \
1844 ((Query *) (cte)->ctequery)->returningList)

◆ IS_EDGE_PATTERN

#define IS_EDGE_PATTERN (   kind)
Value:
((kind) == EDGE_PATTERN_ANY || \
(kind) == EDGE_PATTERN_RIGHT || \
(kind) == EDGE_PATTERN_LEFT)

Definition at line 1042 of file parsenodes.h.

◆ N_ACL_RIGHTS

#define N_ACL_RIGHTS   15 /* 1 plus the last 1<<x */

Definition at line 91 of file parsenodes.h.

◆ OPCLASS_ITEM_FUNCTION

#define OPCLASS_ITEM_FUNCTION   2

Definition at line 3395 of file parsenodes.h.

◆ OPCLASS_ITEM_OPERATOR

#define OPCLASS_ITEM_OPERATOR   1

Definition at line 3394 of file parsenodes.h.

◆ OPCLASS_ITEM_STORAGETYPE

#define OPCLASS_ITEM_STORAGETYPE   3

Definition at line 3396 of file parsenodes.h.

Typedef Documentation

◆ A_ArrayExpr

◆ A_Const

◆ A_Expr

◆ A_Expr_Kind

◆ A_Indices

◆ A_Indirection

◆ A_Star

◆ AccessPriv

◆ AclMode

Definition at line 74 of file parsenodes.h.

◆ AlterCollationStmt

◆ AlterDatabaseRefreshCollStmt

◆ AlterDatabaseSetStmt

◆ AlterDatabaseStmt

◆ AlterDefaultPrivilegesStmt

◆ AlterDomainStmt

◆ AlterDomainType

◆ AlterEnumStmt

◆ AlterEventTrigStmt

◆ AlterExtensionContentsStmt

◆ AlterExtensionStmt

◆ AlterFdwStmt

◆ AlterForeignServerStmt

◆ AlterFunctionStmt

◆ AlterObjectDependsStmt

◆ AlterObjectSchemaStmt

◆ AlterOperatorStmt

◆ AlterOpFamilyStmt

◆ AlterOwnerStmt

◆ AlterPolicyStmt

◆ AlterPropGraphElementKind

◆ AlterPropGraphStmt

◆ AlterPublicationAction

◆ AlterPublicationStmt

◆ AlterRoleSetStmt

◆ AlterRoleStmt

◆ AlterSeqStmt

◆ AlterStatsStmt

◆ AlterSubscriptionStmt

◆ AlterSubscriptionType

◆ AlterSystemStmt

◆ AlterTableCmd

◆ AlterTableMoveAllStmt

◆ AlterTableSpaceOptionsStmt

◆ AlterTableStmt

◆ AlterTableType

◆ AlterTSConfigType

◆ AlterTSConfigurationStmt

◆ AlterTSDictionaryStmt

◆ AlterTypeStmt

◆ AlterUserMappingStmt

◆ ATAlterConstraint

◆ CallContext

◆ CallStmt

◆ CheckPointStmt

◆ ClosePortalStmt

◆ CollateClause

◆ ColumnDef

◆ ColumnRef

◆ CommentStmt

◆ CommonTableExpr

◆ CompositeTypeStmt

◆ Constraint

◆ ConstraintsSetStmt

◆ ConstrType

◆ CopyStmt

◆ CreateAmStmt

◆ CreateCastStmt

◆ CreateConversionStmt

◆ CreatedbStmt

◆ CreateDomainStmt

◆ CreateEnumStmt

◆ CreateEventTrigStmt

◆ CreateExtensionStmt

◆ CreateFdwStmt

◆ CreateForeignServerStmt

◆ CreateForeignTableStmt

◆ CreateFunctionStmt

◆ CreateOpClassItem

◆ CreateOpClassStmt

◆ CreateOpFamilyStmt

◆ CreatePLangStmt

◆ CreatePolicyStmt

◆ CreatePropGraphStmt

◆ CreatePublicationStmt

◆ CreateRangeStmt

◆ CreateRoleStmt

◆ CreateSchemaStmt

◆ CreateSeqStmt

◆ CreateStatsStmt

◆ CreateStmt

◆ CreateSubscriptionStmt

◆ CreateTableAsStmt

◆ CreateTableSpaceStmt

◆ CreateTransformStmt

◆ CreateTrigStmt

◆ CreateUserMappingStmt

◆ CTECycleClause

◆ CTEMaterialize

◆ CTESearchClause

◆ DeallocateStmt

◆ DeclareCursorStmt

◆ DefElem

◆ DefElemAction

◆ DefineStmt

◆ DeleteStmt

◆ DiscardMode

◆ DiscardStmt

◆ DoStmt

◆ DropBehavior

◆ DropdbStmt

◆ DropOwnedStmt

◆ DropRoleStmt

◆ DropStmt

◆ DropSubscriptionStmt

◆ DropTableSpaceStmt

◆ DropUserMappingStmt

◆ ExecuteStmt

◆ ExplainStmt

◆ FetchDirection

◆ FetchDirectionKeywords

◆ FetchStmt

◆ ForPortionOfClause

◆ FuncCall

◆ FunctionParameter

◆ FunctionParameterMode

◆ GrantRoleStmt

◆ GrantStmt

◆ GrantTargetType

◆ GraphElementPattern

◆ GraphElementPatternKind

◆ GraphPattern

◆ GroupingSet

◆ GroupingSetKind

◆ ImportForeignSchemaStmt

◆ ImportForeignSchemaType

◆ IndexElem

◆ IndexStmt

◆ InferClause

◆ InlineCodeBlock

◆ InsertStmt

◆ JsonAggConstructor

◆ JsonArgument

◆ JsonArrayAgg

◆ JsonArrayConstructor

◆ JsonArrayQueryConstructor

◆ JsonFuncExpr

◆ JsonKeyValue

◆ JsonObjectAgg

◆ JsonObjectConstructor

◆ JsonOutput

◆ JsonParseExpr

◆ JsonQuotes

◆ JsonScalarExpr

◆ JsonSerializeExpr

◆ JsonTable

◆ JsonTableColumn

◆ JsonTableColumnType

◆ JsonTablePathSpec

◆ ListenStmt

◆ LoadStmt

◆ LockingClause

◆ LockStmt

◆ MergeStmt

◆ MergeWhenClause

◆ MultiAssignRef

◆ NotifyStmt

◆ ObjectType

◆ ObjectWithArgs

◆ OnConflictClause

◆ ParamRef

◆ PartitionCmd

◆ PartitionElem

◆ PartitionRangeDatum

◆ PartitionRangeDatumKind

◆ PartitionSpec

◆ PartitionStrategy

◆ PLAssignStmt

◆ PrepareStmt

◆ PropGraphEdge

◆ PropGraphLabelAndProperties

◆ PropGraphProperties

◆ PropGraphVertex

◆ PublicationAllObjSpec

◆ PublicationAllObjType

◆ PublicationObjSpec

◆ PublicationObjSpecType

◆ PublicationTable

◆ Query

◆ QuerySource

◆ RangeFunction

◆ RangeGraphTable

◆ RangeSubselect

◆ RangeTableFunc

◆ RangeTableFuncCol

◆ RangeTableSample

◆ RangeTblEntry

◆ RangeTblFunction

◆ RawStmt

◆ ReassignOwnedStmt

◆ RefreshMatViewStmt

◆ ReindexObjectType

◆ ReindexStmt

◆ RenameStmt

◆ RepackCommand

◆ RepackStmt

◆ ReplicaIdentityStmt

◆ ResTarget

◆ ReturningClause

◆ ReturningOption

◆ ReturningOptionKind

◆ ReturnStmt

◆ RoleSpec

◆ RoleSpecType

◆ RoleStmtType

◆ RowMarkClause

◆ RTEKind

◆ RTEPermissionInfo

◆ RuleStmt

◆ SecLabelStmt

◆ SelectStmt

◆ SetOperation

◆ SetOperationStmt

◆ SetQuantifier

◆ SinglePartitionSpec

◆ SortBy

◆ SortByDir

◆ SortByNulls

◆ SortGroupClause

◆ StatsElem

◆ TableLikeClause

◆ TableLikeOption

◆ TableSampleClause

◆ TransactionStmt

◆ TransactionStmtKind

◆ TriggerTransition

◆ TruncateStmt

◆ TypeCast

◆ TypeName

◆ UnlistenStmt

◆ UpdateStmt

◆ VacuumRelation

◆ VacuumStmt

◆ VariableSetKind

◆ VariableSetStmt

◆ VariableShowStmt

◆ ViewCheckOption

◆ ViewStmt

◆ WaitStmt

◆ WCOKind

◆ WindowClause

◆ WindowDef

◆ WithCheckOption

◆ WithClause

◆ XmlSerialize

Enumeration Type Documentation

◆ A_Expr_Kind

Enumerator
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 

Definition at line 331 of file parsenodes.h.

332{
333 AEXPR_OP, /* normal operator */
334 AEXPR_OP_ANY, /* scalar op ANY (array) */
335 AEXPR_OP_ALL, /* scalar op ALL (array) */
336 AEXPR_DISTINCT, /* IS DISTINCT FROM - name must be "=" */
337 AEXPR_NOT_DISTINCT, /* IS NOT DISTINCT FROM - name must be "=" */
338 AEXPR_NULLIF, /* NULLIF - name must be "=" */
339 AEXPR_IN, /* [NOT] IN - name must be "=" or "<>" */
340 AEXPR_LIKE, /* [NOT] LIKE - name must be "~~" or "!~~" */
341 AEXPR_ILIKE, /* [NOT] ILIKE - name must be "~~*" or "!~~*" */
342 AEXPR_SIMILAR, /* [NOT] SIMILAR - name must be "~" or "!~" */
343 AEXPR_BETWEEN, /* name must be "BETWEEN" */
344 AEXPR_NOT_BETWEEN, /* name must be "NOT BETWEEN" */
345 AEXPR_BETWEEN_SYM, /* name must be "BETWEEN SYMMETRIC" */
346 AEXPR_NOT_BETWEEN_SYM, /* name must be "NOT BETWEEN SYMMETRIC" */
A_Expr_Kind
Definition parsenodes.h:332
@ AEXPR_BETWEEN
Definition parsenodes.h:343
@ AEXPR_NULLIF
Definition parsenodes.h:338
@ AEXPR_NOT_DISTINCT
Definition parsenodes.h:337
@ AEXPR_BETWEEN_SYM
Definition parsenodes.h:345
@ AEXPR_NOT_BETWEEN_SYM
Definition parsenodes.h:346
@ AEXPR_ILIKE
Definition parsenodes.h:341
@ AEXPR_IN
Definition parsenodes.h:339
@ AEXPR_NOT_BETWEEN
Definition parsenodes.h:344
@ AEXPR_DISTINCT
Definition parsenodes.h:336
@ AEXPR_SIMILAR
Definition parsenodes.h:342
@ AEXPR_LIKE
Definition parsenodes.h:340
@ AEXPR_OP
Definition parsenodes.h:333
@ AEXPR_OP_ANY
Definition parsenodes.h:334
@ AEXPR_OP_ALL
Definition parsenodes.h:335

◆ AlterDomainType

Enumerator
AD_AlterDefault 
AD_DropNotNull 
AD_SetNotNull 
AD_AddConstraint 
AD_DropConstraint 
AD_ValidateConstraint 

Definition at line 2651 of file parsenodes.h.

2652{
2653 AD_AlterDefault = 'T', /* SET|DROP DEFAULT */
2654 AD_DropNotNull = 'N', /* DROP NOT NULL */
2655 AD_SetNotNull = 'O', /* SET NOT NULL */
2656 AD_AddConstraint = 'C', /* ADD CONSTRAINT */
2657 AD_DropConstraint = 'X', /* DROP CONSTRAINT */
2658 AD_ValidateConstraint = 'V', /* VALIDATE CONSTRAINT */

◆ AlterPropGraphElementKind

Enumerator
PROPGRAPH_ELEMENT_KIND_VERTEX 
PROPGRAPH_ELEMENT_KIND_EDGE 

Definition at line 4324 of file parsenodes.h.

◆ AlterPublicationAction

Enumerator
AP_AddObjects 
AP_DropObjects 
AP_SetObjects 

Definition at line 4527 of file parsenodes.h.

4528{
4529 AP_AddObjects, /* add objects to publication */
4530 AP_DropObjects, /* remove objects from publication */
4531 AP_SetObjects, /* set list of objects */

◆ AlterSubscriptionType

Enumerator
ALTER_SUBSCRIPTION_OPTIONS 
ALTER_SUBSCRIPTION_SERVER 
ALTER_SUBSCRIPTION_CONNECTION 
ALTER_SUBSCRIPTION_SET_PUBLICATION 
ALTER_SUBSCRIPTION_ADD_PUBLICATION 
ALTER_SUBSCRIPTION_DROP_PUBLICATION 
ALTER_SUBSCRIPTION_REFRESH_PUBLICATION 
ALTER_SUBSCRIPTION_REFRESH_SEQUENCES 
ALTER_SUBSCRIPTION_ENABLED 
ALTER_SUBSCRIPTION_SKIP 

Definition at line 4563 of file parsenodes.h.

◆ AlterTableType

Enumerator
AT_AddColumn 
AT_AddColumnToView 
AT_ColumnDefault 
AT_CookedColumnDefault 
AT_DropNotNull 
AT_SetNotNull 
AT_SetExpression 
AT_DropExpression 
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_SplitPartition 
AT_MergePartitions 
AT_AddIdentity 
AT_SetIdentity 
AT_DropIdentity 
AT_ReAddStatistics 

Definition at line 2522 of file parsenodes.h.

2523{
2524 AT_AddColumn, /* add column */
2525 AT_AddColumnToView, /* implicitly via CREATE OR REPLACE VIEW */
2526 AT_ColumnDefault, /* alter column default */
2527 AT_CookedColumnDefault, /* add a pre-cooked column default */
2528 AT_DropNotNull, /* alter column drop not null */
2529 AT_SetNotNull, /* alter column set not null */
2530 AT_SetExpression, /* alter column set expression */
2531 AT_DropExpression, /* alter column drop expression */
2532 AT_SetStatistics, /* alter column set statistics */
2533 AT_SetOptions, /* alter column set ( options ) */
2534 AT_ResetOptions, /* alter column reset ( options ) */
2535 AT_SetStorage, /* alter column set storage */
2536 AT_SetCompression, /* alter column set compression */
2537 AT_DropColumn, /* drop column */
2538 AT_AddIndex, /* add index */
2539 AT_ReAddIndex, /* internal to commands/tablecmds.c */
2540 AT_AddConstraint, /* add constraint */
2541 AT_ReAddConstraint, /* internal to commands/tablecmds.c */
2542 AT_ReAddDomainConstraint, /* internal to commands/tablecmds.c */
2543 AT_AlterConstraint, /* alter constraint */
2544 AT_ValidateConstraint, /* validate constraint */
2545 AT_AddIndexConstraint, /* add constraint using existing index */
2546 AT_DropConstraint, /* drop constraint */
2547 AT_ReAddComment, /* internal to commands/tablecmds.c */
2548 AT_AlterColumnType, /* alter column type */
2549 AT_AlterColumnGenericOptions, /* alter column OPTIONS (...) */
2550 AT_ChangeOwner, /* change owner */
2551 AT_ClusterOn, /* CLUSTER ON */
2552 AT_DropCluster, /* SET WITHOUT CLUSTER */
2553 AT_SetLogged, /* SET LOGGED */
2554 AT_SetUnLogged, /* SET UNLOGGED */
2555 AT_DropOids, /* SET WITHOUT OIDS */
2556 AT_SetAccessMethod, /* SET ACCESS METHOD */
2557 AT_SetTableSpace, /* SET TABLESPACE */
2558 AT_SetRelOptions, /* SET (...) -- AM specific parameters */
2559 AT_ResetRelOptions, /* RESET (...) -- AM specific parameters */
2560 AT_ReplaceRelOptions, /* replace reloption list in its entirety */
2561 AT_EnableTrig, /* ENABLE TRIGGER name */
2562 AT_EnableAlwaysTrig, /* ENABLE ALWAYS TRIGGER name */
2563 AT_EnableReplicaTrig, /* ENABLE REPLICA TRIGGER name */
2564 AT_DisableTrig, /* DISABLE TRIGGER name */
2565 AT_EnableTrigAll, /* ENABLE TRIGGER ALL */
2566 AT_DisableTrigAll, /* DISABLE TRIGGER ALL */
2567 AT_EnableTrigUser, /* ENABLE TRIGGER USER */
2568 AT_DisableTrigUser, /* DISABLE TRIGGER USER */
2569 AT_EnableRule, /* ENABLE RULE name */
2570 AT_EnableAlwaysRule, /* ENABLE ALWAYS RULE name */
2571 AT_EnableReplicaRule, /* ENABLE REPLICA RULE name */
2572 AT_DisableRule, /* DISABLE RULE name */
2573 AT_AddInherit, /* INHERIT parent */
2574 AT_DropInherit, /* NO INHERIT parent */
2575 AT_AddOf, /* OF <type_name> */
2576 AT_DropOf, /* NOT OF */
2577 AT_ReplicaIdentity, /* REPLICA IDENTITY */
2578 AT_EnableRowSecurity, /* ENABLE ROW SECURITY */
2579 AT_DisableRowSecurity, /* DISABLE ROW SECURITY */
2580 AT_ForceRowSecurity, /* FORCE ROW SECURITY */
2581 AT_NoForceRowSecurity, /* NO FORCE ROW SECURITY */
2582 AT_GenericOptions, /* OPTIONS (...) */
2583 AT_AttachPartition, /* ATTACH PARTITION */
2584 AT_DetachPartition, /* DETACH PARTITION */
2585 AT_DetachPartitionFinalize, /* DETACH PARTITION FINALIZE */
2586 AT_SplitPartition, /* SPLIT PARTITION */
2587 AT_MergePartitions, /* MERGE PARTITIONS */
2588 AT_AddIdentity, /* ADD IDENTITY */
2589 AT_SetIdentity, /* SET identity column options */
2590 AT_DropIdentity, /* DROP IDENTITY */
2591 AT_ReAddStatistics, /* internal to commands/tablecmds.c */

◆ AlterTSConfigType

Enumerator
ALTER_TSCONFIG_ADD_MAPPING 
ALTER_TSCONFIG_ALTER_MAPPING_FOR_TOKEN 
ALTER_TSCONFIG_REPLACE_DICT 
ALTER_TSCONFIG_REPLACE_DICT_FOR_TOKEN 
ALTER_TSCONFIG_DROP_MAPPING 

Definition at line 4442 of file parsenodes.h.

◆ ConstrType

Enumerator
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 
CONSTR_ATTR_ENFORCED 
CONSTR_ATTR_NOT_ENFORCED 

Definition at line 2906 of file parsenodes.h.

2907{
2908 CONSTR_NULL, /* not standard SQL, but a lot of people
2909 * expect it */
2919 CONSTR_ATTR_DEFERRABLE, /* attributes for previous constraint node */
2925} ConstrType;

◆ CTEMaterialize

Enumerator
CTEMaterializeDefault 
CTEMaterializeAlways 
CTEMaterializeNever 

Definition at line 1771 of file parsenodes.h.

1772{
1773 CTEMaterializeDefault, /* no option specified */
1774 CTEMaterializeAlways, /* MATERIALIZED */
1775 CTEMaterializeNever, /* NOT MATERIALIZED */

◆ DefElemAction

Enumerator
DEFELEM_UNSPEC 
DEFELEM_SET 
DEFELEM_ADD 
DEFELEM_DROP 

Definition at line 848 of file parsenodes.h.

849{
850 DEFELEM_UNSPEC, /* no action given */

◆ DiscardMode

Enumerator
DISCARD_ALL 
DISCARD_PLANS 
DISCARD_SEQUENCES 
DISCARD_TEMP 

Definition at line 4179 of file parsenodes.h.

4180{
4185} DiscardMode;

◆ DropBehavior

Enumerator
DROP_RESTRICT 
DROP_CASCADE 

Definition at line 2503 of file parsenodes.h.

2504{
2505 DROP_RESTRICT, /* drop fails if any dependent objects */
2506 DROP_CASCADE, /* remove dependent objects too */
2507} DropBehavior;

◆ FetchDirection

Enumerator
FETCH_FORWARD 
FETCH_BACKWARD 
FETCH_ABSOLUTE 
FETCH_RELATIVE 

Definition at line 3530 of file parsenodes.h.

3531{
3532 /* for these, howMany is how many rows to fetch; FETCH_ALL means ALL */
3535 /* for these, howMany indicates a position; only one row is fetched */

◆ FetchDirectionKeywords

Enumerator
FETCH_KEYWORD_NONE 
FETCH_KEYWORD_NEXT 
FETCH_KEYWORD_PRIOR 
FETCH_KEYWORD_FIRST 
FETCH_KEYWORD_LAST 
FETCH_KEYWORD_ABSOLUTE 
FETCH_KEYWORD_RELATIVE 
FETCH_KEYWORD_ALL 
FETCH_KEYWORD_FORWARD 
FETCH_KEYWORD_FORWARD_ALL 
FETCH_KEYWORD_BACKWARD 
FETCH_KEYWORD_BACKWARD_ALL 

Definition at line 3540 of file parsenodes.h.

◆ FunctionParameterMode

Enumerator
FUNC_PARAM_IN 
FUNC_PARAM_OUT 
FUNC_PARAM_INOUT 
FUNC_PARAM_VARIADIC 
FUNC_PARAM_TABLE 
FUNC_PARAM_DEFAULT 

Definition at line 3683 of file parsenodes.h.

3684{
3685 /* the assigned enum values appear in pg_proc, don't change 'em! */
3686 FUNC_PARAM_IN = 'i', /* input only */
3687 FUNC_PARAM_OUT = 'o', /* output only */
3688 FUNC_PARAM_INOUT = 'b', /* both */
3689 FUNC_PARAM_VARIADIC = 'v', /* variadic (always input) */
3690 FUNC_PARAM_TABLE = 't', /* table function output column */
3691 /* this is not used in pg_proc: */
3692 FUNC_PARAM_DEFAULT = 'd', /* default; effectively same as IN */

◆ GrantTargetType

Enumerator
ACL_TARGET_OBJECT 
ACL_TARGET_ALL_IN_SCHEMA 
ACL_TARGET_DEFAULTS 

Definition at line 2677 of file parsenodes.h.

2678{
2679 ACL_TARGET_OBJECT, /* grant on specific named object(s) */
2680 ACL_TARGET_ALL_IN_SCHEMA, /* grant on all objects in given schema(s) */
2681 ACL_TARGET_DEFAULTS, /* ALTER DEFAULT PRIVILEGES */

◆ GraphElementPatternKind

Enumerator
VERTEX_PATTERN 
EDGE_PATTERN_LEFT 
EDGE_PATTERN_RIGHT 
EDGE_PATTERN_ANY 
PAREN_EXPR 

Definition at line 1033 of file parsenodes.h.

◆ GroupingSetKind

Enumerator
GROUPING_SET_EMPTY 
GROUPING_SET_SIMPLE 
GROUPING_SET_ROLLUP 
GROUPING_SET_CUBE 
GROUPING_SET_SETS 

Definition at line 1615 of file parsenodes.h.

◆ ImportForeignSchemaType

Enumerator
FDW_IMPORT_SCHEMA_ALL 
FDW_IMPORT_SCHEMA_LIMIT_TO 
FDW_IMPORT_SCHEMA_EXCEPT 

Definition at line 3151 of file parsenodes.h.

3152{
3153 FDW_IMPORT_SCHEMA_ALL, /* all relations wanted */
3154 FDW_IMPORT_SCHEMA_LIMIT_TO, /* include only listed tables in import */
3155 FDW_IMPORT_SCHEMA_EXCEPT, /* exclude listed tables from import */

◆ JsonQuotes

Enumerator
JS_QUOTES_UNSPEC 
JS_QUOTES_KEEP 
JS_QUOTES_OMIT 

Definition at line 1943 of file parsenodes.h.

1944{
1945 JS_QUOTES_UNSPEC, /* unspecified */
1946 JS_QUOTES_KEEP, /* KEEP QUOTES */
1947 JS_QUOTES_OMIT, /* OMIT QUOTES */
1948} JsonQuotes;

◆ JsonTableColumnType

Enumerator
JTC_FOR_ORDINALITY 
JTC_REGULAR 
JTC_EXISTS 
JTC_FORMATTED 
JTC_NESTED 

Definition at line 2008 of file parsenodes.h.

◆ ObjectType

Enumerator
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_PROPGRAPH 
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 

Definition at line 2429 of file parsenodes.h.

◆ PartitionRangeDatumKind

Enumerator
PARTITION_RANGE_DATUM_MINVALUE 
PARTITION_RANGE_DATUM_VALUE 
PARTITION_RANGE_DATUM_MAXVALUE 

Definition at line 967 of file parsenodes.h.

968{
969 PARTITION_RANGE_DATUM_MINVALUE = -1, /* less than any other value */
970 PARTITION_RANGE_DATUM_VALUE = 0, /* a specific (bounded) value */
971 PARTITION_RANGE_DATUM_MAXVALUE = 1, /* greater than any other value */

◆ PartitionStrategy

Enumerator
PARTITION_STRATEGY_LIST 
PARTITION_STRATEGY_RANGE 
PARTITION_STRATEGY_HASH 

Definition at line 915 of file parsenodes.h.

◆ PublicationAllObjType

Enumerator
PUBLICATION_ALL_TABLES 
PUBLICATION_ALL_SEQUENCES 

Definition at line 4502 of file parsenodes.h.

◆ PublicationObjSpecType

Enumerator
PUBLICATIONOBJ_TABLE 
PUBLICATIONOBJ_EXCEPT_TABLE 
PUBLICATIONOBJ_TABLES_IN_SCHEMA 
PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA 
PUBLICATIONOBJ_CONTINUATION 

Definition at line 4480 of file parsenodes.h.

4481{
4482 PUBLICATIONOBJ_TABLE, /* A table */
4483 PUBLICATIONOBJ_EXCEPT_TABLE, /* A table in the EXCEPT clause */
4484 PUBLICATIONOBJ_TABLES_IN_SCHEMA, /* All tables in schema */
4485 PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA, /* All tables in first element of
4486 * search_path */
4487 PUBLICATIONOBJ_CONTINUATION, /* Continuation of previous type */

◆ QuerySource

Enumerator
QSRC_ORIGINAL 
QSRC_PARSER 
QSRC_INSTEAD_RULE 
QSRC_QUAL_INSTEAD_RULE 
QSRC_NON_INSTEAD_RULE 

Definition at line 34 of file parsenodes.h.

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 */
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

◆ ReindexObjectType

Enumerator
REINDEX_OBJECT_INDEX 
REINDEX_OBJECT_TABLE 
REINDEX_OBJECT_SCHEMA 
REINDEX_OBJECT_SYSTEM 
REINDEX_OBJECT_DATABASE 

Definition at line 4220 of file parsenodes.h.

4221{
4222 REINDEX_OBJECT_INDEX, /* index */
4223 REINDEX_OBJECT_TABLE, /* table or materialized view */
4224 REINDEX_OBJECT_SCHEMA, /* schema */
4225 REINDEX_OBJECT_SYSTEM, /* system catalogs */
4226 REINDEX_OBJECT_DATABASE, /* database */

◆ RepackCommand

Enumerator
REPACK_COMMAND_CLUSTER 
REPACK_COMMAND_REPACK 
REPACK_COMMAND_VACUUMFULL 

Definition at line 4097 of file parsenodes.h.

◆ ReturningOptionKind

Enumerator
RETURNING_OPTION_OLD 
RETURNING_OPTION_NEW 

Definition at line 1870 of file parsenodes.h.

1871{
1872 RETURNING_OPTION_OLD, /* specify alias for OLD in RETURNING */
1873 RETURNING_OPTION_NEW, /* specify alias for NEW in RETURNING */

◆ RoleSpecType

Enumerator
ROLESPEC_CSTRING 
ROLESPEC_CURRENT_ROLE 
ROLESPEC_CURRENT_USER 
ROLESPEC_SESSION_USER 
ROLESPEC_PUBLIC 

Definition at line 420 of file parsenodes.h.

421{
422 ROLESPEC_CSTRING, /* role name is stored as a C string */
423 ROLESPEC_CURRENT_ROLE, /* role spec is CURRENT_ROLE */
424 ROLESPEC_CURRENT_USER, /* role spec is CURRENT_USER */
425 ROLESPEC_SESSION_USER, /* role spec is SESSION_USER */
426 ROLESPEC_PUBLIC, /* role name is "public" */
RoleSpecType
Definition parsenodes.h:421
@ ROLESPEC_CURRENT_USER
Definition parsenodes.h:424
@ ROLESPEC_CSTRING
Definition parsenodes.h:422
@ ROLESPEC_SESSION_USER
Definition parsenodes.h:425
@ ROLESPEC_CURRENT_ROLE
Definition parsenodes.h:423
@ ROLESPEC_PUBLIC
Definition parsenodes.h:426

◆ RoleStmtType

Enumerator
ROLESTMT_ROLE 
ROLESTMT_USER 
ROLESTMT_GROUP 

Definition at line 3288 of file parsenodes.h.

3289{
3293} RoleStmtType;

◆ RTEKind

Enumerator
RTE_RELATION 
RTE_SUBQUERY 
RTE_JOIN 
RTE_FUNCTION 
RTE_TABLEFUNC 
RTE_VALUES 
RTE_CTE 
RTE_NAMEDTUPLESTORE 
RTE_GRAPH_TABLE 
RTE_RESULT 
RTE_GROUP 

Definition at line 1120 of file parsenodes.h.

1121{
1122 RTE_RELATION, /* ordinary relation reference */
1123 RTE_SUBQUERY, /* subquery in FROM */
1124 RTE_JOIN, /* join */
1125 RTE_FUNCTION, /* function in FROM */
1126 RTE_TABLEFUNC, /* TableFunc(.., column list) */
1127 RTE_VALUES, /* VALUES (<exprlist>), (<exprlist>), ... */
1128 RTE_CTE, /* common table expr (WITH list element) */
1129 RTE_NAMEDTUPLESTORE, /* tuplestore, e.g. for AFTER triggers */
1130 RTE_GRAPH_TABLE, /* GRAPH_TABLE clause */
1131 RTE_RESULT, /* RTE represents an empty FROM clause; such
1132 * RTEs are added by the planner, they're not
1133 * present during parsing or rewriting */
1134 RTE_GROUP, /* the grouping step */
1135} RTEKind;

◆ SetOperation

Enumerator
SETOP_NONE 
SETOP_UNION 
SETOP_INTERSECT 
SETOP_EXCEPT 

Definition at line 2280 of file parsenodes.h.

2281{
2282 SETOP_NONE = 0,
2286} SetOperation;

◆ SetQuantifier

Enumerator
SET_QUANTIFIER_DEFAULT 
SET_QUANTIFIER_ALL 
SET_QUANTIFIER_DISTINCT 

Definition at line 60 of file parsenodes.h.

61{
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

◆ SortByDir

Enumerator
SORTBY_DEFAULT 
SORTBY_ASC 
SORTBY_DESC 
SORTBY_USING 

Definition at line 44 of file parsenodes.h.

45{
49 SORTBY_USING, /* not allowed in CREATE INDEX ... */
50} SortByDir;
@ SORTBY_USING
Definition parsenodes.h:49
@ SORTBY_DESC
Definition parsenodes.h:48
@ SORTBY_ASC
Definition parsenodes.h:47
@ SORTBY_DEFAULT
Definition parsenodes.h:46

◆ SortByNulls

Enumerator
SORTBY_NULLS_DEFAULT 
SORTBY_NULLS_FIRST 
SORTBY_NULLS_LAST 

Definition at line 52 of file parsenodes.h.

53{
@ SORTBY_NULLS_DEFAULT
Definition parsenodes.h:54
@ SORTBY_NULLS_LAST
Definition parsenodes.h:56
@ SORTBY_NULLS_FIRST
Definition parsenodes.h:55

◆ TableLikeOption

Enumerator
CREATE_TABLE_LIKE_COMMENTS 
CREATE_TABLE_LIKE_COMPRESSION 
CREATE_TABLE_LIKE_CONSTRAINTS 
CREATE_TABLE_LIKE_DEFAULTS 
CREATE_TABLE_LIKE_GENERATED 
CREATE_TABLE_LIKE_IDENTITY 
CREATE_TABLE_LIKE_INDEXES 
CREATE_TABLE_LIKE_STATISTICS 
CREATE_TABLE_LIKE_STORAGE 
CREATE_TABLE_LIKE_ALL 

Definition at line 803 of file parsenodes.h.

◆ TransactionStmtKind

Enumerator
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 

Definition at line 3898 of file parsenodes.h.

◆ VariableSetKind

Enumerator
VAR_SET_VALUE 
VAR_SET_DEFAULT 
VAR_SET_CURRENT 
VAR_SET_MULTI 
VAR_RESET 
VAR_RESET_ALL 

Definition at line 2801 of file parsenodes.h.

2802{
2803 VAR_SET_VALUE, /* SET var = value */
2804 VAR_SET_DEFAULT, /* SET var TO DEFAULT */
2805 VAR_SET_CURRENT, /* SET var FROM CURRENT */
2806 VAR_SET_MULTI, /* special case for SET TRANSACTION ... */
2807 VAR_RESET, /* RESET var */
2808 VAR_RESET_ALL, /* RESET ALL */

◆ ViewCheckOption

Enumerator
NO_CHECK_OPTION 
LOCAL_CHECK_OPTION 
CASCADED_CHECK_OPTION 

Definition at line 3978 of file parsenodes.h.

◆ WCOKind

Enumerator
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 

Definition at line 1474 of file parsenodes.h.

1475{
1476 WCO_VIEW_CHECK, /* WCO on an auto-updatable view */
1477 WCO_RLS_INSERT_CHECK, /* RLS INSERT WITH CHECK policy */
1478 WCO_RLS_UPDATE_CHECK, /* RLS UPDATE WITH CHECK policy */
1479 WCO_RLS_CONFLICT_CHECK, /* RLS ON CONFLICT DO SELECT/UPDATE USING
1480 * policy */
1481 WCO_RLS_MERGE_UPDATE_CHECK, /* RLS MERGE UPDATE USING policy */
1482 WCO_RLS_MERGE_DELETE_CHECK, /* RLS MERGE DELETE USING policy */
1483} WCOKind;