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  JsonTablePlanSpec
 
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 enum JsonTablePlanType JsonTablePlanType
 
typedef enum JsonTablePlanJoinType JsonTablePlanJoinType
 
typedef struct JsonTablePlanSpec JsonTablePlanSpec
 
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  JsonTablePlanType { JSTP_DEFAULT , JSTP_SIMPLE , JSTP_JOINED }
 
enum  JsonTablePlanJoinType { JSTP_JOIN_INNER = 0x01 , JSTP_JOIN_OUTER = 0x02 , JSTP_JOIN_CROSS = 0x04 , JSTP_JOIN_UNION = 0x08 }
 
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 3538 of file parsenodes.h.

◆ CURSOR_OPT_BINARY

#define CURSOR_OPT_BINARY   0x0001 /* BINARY */

Definition at line 3534 of file parsenodes.h.

◆ CURSOR_OPT_CUSTOM_PLAN

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

Definition at line 3543 of file parsenodes.h.

◆ CURSOR_OPT_FAST_PLAN

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

Definition at line 3541 of file parsenodes.h.

◆ CURSOR_OPT_GENERIC_PLAN

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

Definition at line 3542 of file parsenodes.h.

◆ CURSOR_OPT_HOLD

#define CURSOR_OPT_HOLD   0x0020 /* WITH HOLD */

Definition at line 3539 of file parsenodes.h.

◆ CURSOR_OPT_INSENSITIVE

#define CURSOR_OPT_INSENSITIVE   0x0008 /* INSENSITIVE */

Definition at line 3537 of file parsenodes.h.

◆ CURSOR_OPT_NO_SCROLL

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

Definition at line 3536 of file parsenodes.h.

◆ CURSOR_OPT_PARALLEL_OK

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

Definition at line 3544 of file parsenodes.h.

◆ CURSOR_OPT_SCROLL

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

Definition at line 3535 of file parsenodes.h.

◆ FETCH_ALL

#define FETCH_ALL   LONG_MAX

Definition at line 3595 of file parsenodes.h.

◆ FKCONSTR_ACTION_CASCADE

#define FKCONSTR_ACTION_CASCADE   'c'

Definition at line 2969 of file parsenodes.h.

◆ FKCONSTR_ACTION_NOACTION

#define FKCONSTR_ACTION_NOACTION   'a'

Definition at line 2967 of file parsenodes.h.

◆ FKCONSTR_ACTION_RESTRICT

#define FKCONSTR_ACTION_RESTRICT   'r'

Definition at line 2968 of file parsenodes.h.

◆ FKCONSTR_ACTION_SETDEFAULT

#define FKCONSTR_ACTION_SETDEFAULT   'd'

Definition at line 2971 of file parsenodes.h.

◆ FKCONSTR_ACTION_SETNULL

#define FKCONSTR_ACTION_SETNULL   'n'

Definition at line 2970 of file parsenodes.h.

◆ FKCONSTR_MATCH_FULL

#define FKCONSTR_MATCH_FULL   'f'

Definition at line 2974 of file parsenodes.h.

◆ FKCONSTR_MATCH_PARTIAL

#define FKCONSTR_MATCH_PARTIAL   'p'

Definition at line 2975 of file parsenodes.h.

◆ FKCONSTR_MATCH_SIMPLE

#define FKCONSTR_MATCH_SIMPLE   's'

Definition at line 2976 of file parsenodes.h.

◆ FRAMEOPTION_BETWEEN

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

Definition at line 617 of file parsenodes.h.

◆ FRAMEOPTION_DEFAULTS

#define FRAMEOPTION_DEFAULTS
Value:
#define FRAMEOPTION_END_CURRENT_ROW
Definition parsenodes.h:623
#define FRAMEOPTION_START_UNBOUNDED_PRECEDING
Definition parsenodes.h:618
#define FRAMEOPTION_RANGE
Definition parsenodes.h:614

Definition at line 640 of file parsenodes.h.

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

◆ FRAMEOPTION_END_CURRENT_ROW

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

Definition at line 623 of file parsenodes.h.

◆ FRAMEOPTION_END_OFFSET

Definition at line 634 of file parsenodes.h.

◆ FRAMEOPTION_END_OFFSET_FOLLOWING

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

Definition at line 627 of file parsenodes.h.

◆ FRAMEOPTION_END_OFFSET_PRECEDING

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

Definition at line 625 of file parsenodes.h.

◆ FRAMEOPTION_END_UNBOUNDED_FOLLOWING

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

Definition at line 621 of file parsenodes.h.

◆ FRAMEOPTION_END_UNBOUNDED_PRECEDING

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

Definition at line 619 of file parsenodes.h.

◆ FRAMEOPTION_EXCLUDE_CURRENT_ROW

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

Definition at line 628 of file parsenodes.h.

◆ FRAMEOPTION_EXCLUDE_GROUP

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

Definition at line 629 of file parsenodes.h.

◆ FRAMEOPTION_EXCLUDE_TIES

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

Definition at line 630 of file parsenodes.h.

◆ FRAMEOPTION_EXCLUSION

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

Definition at line 636 of file parsenodes.h.

◆ FRAMEOPTION_GROUPS

#define FRAMEOPTION_GROUPS   0x00008 /* GROUPS behavior */

Definition at line 616 of file parsenodes.h.

◆ FRAMEOPTION_NONDEFAULT

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

Definition at line 613 of file parsenodes.h.

◆ FRAMEOPTION_RANGE

#define FRAMEOPTION_RANGE   0x00002 /* RANGE behavior */

Definition at line 614 of file parsenodes.h.

◆ FRAMEOPTION_ROWS

#define FRAMEOPTION_ROWS   0x00004 /* ROWS behavior */

Definition at line 615 of file parsenodes.h.

◆ FRAMEOPTION_START_CURRENT_ROW

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

Definition at line 622 of file parsenodes.h.

◆ FRAMEOPTION_START_OFFSET

Definition at line 632 of file parsenodes.h.

◆ FRAMEOPTION_START_OFFSET_FOLLOWING

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

Definition at line 626 of file parsenodes.h.

◆ FRAMEOPTION_START_OFFSET_PRECEDING

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

Definition at line 624 of file parsenodes.h.

◆ FRAMEOPTION_START_UNBOUNDED_FOLLOWING

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

Definition at line 620 of file parsenodes.h.

◆ FRAMEOPTION_START_UNBOUNDED_PRECEDING

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

Definition at line 618 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:1003
#define IsA(nodeptr, _type_)
Definition nodes.h:162
@ CMD_SELECT
Definition nodes.h:273

Definition at line 1837 of file parsenodes.h.

1840 : \
1841 ((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 1044 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 3434 of file parsenodes.h.

◆ OPCLASS_ITEM_OPERATOR

#define OPCLASS_ITEM_OPERATOR   1

Definition at line 3433 of file parsenodes.h.

◆ OPCLASS_ITEM_STORAGETYPE

#define OPCLASS_ITEM_STORAGETYPE   3

Definition at line 3435 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

◆ JsonTablePlanJoinType

◆ JsonTablePlanSpec

◆ JsonTablePlanType

◆ 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 332 of file parsenodes.h.

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

◆ AlterDomainType

Enumerator
AD_AlterDefault 
AD_DropNotNull 
AD_SetNotNull 
AD_AddConstraint 
AD_DropConstraint 
AD_ValidateConstraint 

Definition at line 2690 of file parsenodes.h.

2691{
2692 AD_AlterDefault = 'T', /* SET|DROP DEFAULT */
2693 AD_DropNotNull = 'N', /* DROP NOT NULL */
2694 AD_SetNotNull = 'O', /* SET NOT NULL */
2695 AD_AddConstraint = 'C', /* ADD CONSTRAINT */
2696 AD_DropConstraint = 'X', /* DROP CONSTRAINT */
2697 AD_ValidateConstraint = 'V', /* VALIDATE CONSTRAINT */

◆ AlterPropGraphElementKind

Enumerator
PROPGRAPH_ELEMENT_KIND_VERTEX 
PROPGRAPH_ELEMENT_KIND_EDGE 

Definition at line 4361 of file parsenodes.h.

◆ AlterPublicationAction

Enumerator
AP_AddObjects 
AP_DropObjects 
AP_SetObjects 

Definition at line 4564 of file parsenodes.h.

4565{
4566 AP_AddObjects, /* add objects to publication */
4567 AP_DropObjects, /* remove objects from publication */
4568 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 4600 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 2561 of file parsenodes.h.

2562{
2563 AT_AddColumn, /* add column */
2564 AT_AddColumnToView, /* implicitly via CREATE OR REPLACE VIEW */
2565 AT_ColumnDefault, /* alter column default */
2566 AT_CookedColumnDefault, /* add a pre-cooked column default */
2567 AT_DropNotNull, /* alter column drop not null */
2568 AT_SetNotNull, /* alter column set not null */
2569 AT_SetExpression, /* alter column set expression */
2570 AT_DropExpression, /* alter column drop expression */
2571 AT_SetStatistics, /* alter column set statistics */
2572 AT_SetOptions, /* alter column set ( options ) */
2573 AT_ResetOptions, /* alter column reset ( options ) */
2574 AT_SetStorage, /* alter column set storage */
2575 AT_SetCompression, /* alter column set compression */
2576 AT_DropColumn, /* drop column */
2577 AT_AddIndex, /* add index */
2578 AT_ReAddIndex, /* internal to commands/tablecmds.c */
2579 AT_AddConstraint, /* add constraint */
2580 AT_ReAddConstraint, /* internal to commands/tablecmds.c */
2581 AT_ReAddDomainConstraint, /* internal to commands/tablecmds.c */
2582 AT_AlterConstraint, /* alter constraint */
2583 AT_ValidateConstraint, /* validate constraint */
2584 AT_AddIndexConstraint, /* add constraint using existing index */
2585 AT_DropConstraint, /* drop constraint */
2586 AT_ReAddComment, /* internal to commands/tablecmds.c */
2587 AT_AlterColumnType, /* alter column type */
2588 AT_AlterColumnGenericOptions, /* alter column OPTIONS (...) */
2589 AT_ChangeOwner, /* change owner */
2590 AT_ClusterOn, /* CLUSTER ON */
2591 AT_DropCluster, /* SET WITHOUT CLUSTER */
2592 AT_SetLogged, /* SET LOGGED */
2593 AT_SetUnLogged, /* SET UNLOGGED */
2594 AT_DropOids, /* SET WITHOUT OIDS */
2595 AT_SetAccessMethod, /* SET ACCESS METHOD */
2596 AT_SetTableSpace, /* SET TABLESPACE */
2597 AT_SetRelOptions, /* SET (...) -- AM specific parameters */
2598 AT_ResetRelOptions, /* RESET (...) -- AM specific parameters */
2599 AT_ReplaceRelOptions, /* replace reloption list in its entirety */
2600 AT_EnableTrig, /* ENABLE TRIGGER name */
2601 AT_EnableAlwaysTrig, /* ENABLE ALWAYS TRIGGER name */
2602 AT_EnableReplicaTrig, /* ENABLE REPLICA TRIGGER name */
2603 AT_DisableTrig, /* DISABLE TRIGGER name */
2604 AT_EnableTrigAll, /* ENABLE TRIGGER ALL */
2605 AT_DisableTrigAll, /* DISABLE TRIGGER ALL */
2606 AT_EnableTrigUser, /* ENABLE TRIGGER USER */
2607 AT_DisableTrigUser, /* DISABLE TRIGGER USER */
2608 AT_EnableRule, /* ENABLE RULE name */
2609 AT_EnableAlwaysRule, /* ENABLE ALWAYS RULE name */
2610 AT_EnableReplicaRule, /* ENABLE REPLICA RULE name */
2611 AT_DisableRule, /* DISABLE RULE name */
2612 AT_AddInherit, /* INHERIT parent */
2613 AT_DropInherit, /* NO INHERIT parent */
2614 AT_AddOf, /* OF <type_name> */
2615 AT_DropOf, /* NOT OF */
2616 AT_ReplicaIdentity, /* REPLICA IDENTITY */
2617 AT_EnableRowSecurity, /* ENABLE ROW SECURITY */
2618 AT_DisableRowSecurity, /* DISABLE ROW SECURITY */
2619 AT_ForceRowSecurity, /* FORCE ROW SECURITY */
2620 AT_NoForceRowSecurity, /* NO FORCE ROW SECURITY */
2621 AT_GenericOptions, /* OPTIONS (...) */
2622 AT_AttachPartition, /* ATTACH PARTITION */
2623 AT_DetachPartition, /* DETACH PARTITION */
2624 AT_DetachPartitionFinalize, /* DETACH PARTITION FINALIZE */
2625 AT_SplitPartition, /* SPLIT PARTITION */
2626 AT_MergePartitions, /* MERGE PARTITIONS */
2627 AT_AddIdentity, /* ADD IDENTITY */
2628 AT_SetIdentity, /* SET identity column options */
2629 AT_DropIdentity, /* DROP IDENTITY */
2630 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 4479 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 2945 of file parsenodes.h.

2946{
2947 CONSTR_NULL, /* not standard SQL, but a lot of people
2948 * expect it */
2958 CONSTR_ATTR_DEFERRABLE, /* attributes for previous constraint node */
2964} ConstrType;

◆ CTEMaterialize

Enumerator
CTEMaterializeDefault 
CTEMaterializeAlways 
CTEMaterializeNever 

Definition at line 1768 of file parsenodes.h.

1769{
1770 CTEMaterializeDefault, /* no option specified */
1771 CTEMaterializeAlways, /* MATERIALIZED */
1772 CTEMaterializeNever, /* NOT MATERIALIZED */

◆ DefElemAction

Enumerator
DEFELEM_UNSPEC 
DEFELEM_SET 
DEFELEM_ADD 
DEFELEM_DROP 

Definition at line 850 of file parsenodes.h.

851{
852 DEFELEM_UNSPEC, /* no action given */

◆ DiscardMode

Enumerator
DISCARD_ALL 
DISCARD_PLANS 
DISCARD_SEQUENCES 
DISCARD_TEMP 

Definition at line 4216 of file parsenodes.h.

4217{
4222} DiscardMode;

◆ DropBehavior

Enumerator
DROP_RESTRICT 
DROP_CASCADE 

Definition at line 2542 of file parsenodes.h.

2543{
2544 DROP_RESTRICT, /* drop fails if any dependent objects */
2545 DROP_CASCADE, /* remove dependent objects too */
2546} DropBehavior;

◆ FetchDirection

Enumerator
FETCH_FORWARD 
FETCH_BACKWARD 
FETCH_ABSOLUTE 
FETCH_RELATIVE 

Definition at line 3569 of file parsenodes.h.

3570{
3571 /* for these, howMany is how many rows to fetch; FETCH_ALL means ALL */
3574 /* 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 3579 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 3722 of file parsenodes.h.

3723{
3724 /* the assigned enum values appear in pg_proc, don't change 'em! */
3725 FUNC_PARAM_IN = 'i', /* input only */
3726 FUNC_PARAM_OUT = 'o', /* output only */
3727 FUNC_PARAM_INOUT = 'b', /* both */
3728 FUNC_PARAM_VARIADIC = 'v', /* variadic (always input) */
3729 FUNC_PARAM_TABLE = 't', /* table function output column */
3730 /* this is not used in pg_proc: */
3731 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 2716 of file parsenodes.h.

2717{
2718 ACL_TARGET_OBJECT, /* grant on specific named object(s) */
2719 ACL_TARGET_ALL_IN_SCHEMA, /* grant on all objects in given schema(s) */
2720 ACL_TARGET_DEFAULTS, /* ALTER DEFAULT PRIVILEGES */

◆ GraphElementPatternKind

Enumerator
VERTEX_PATTERN 
EDGE_PATTERN_LEFT 
EDGE_PATTERN_RIGHT 
EDGE_PATTERN_ANY 
PAREN_EXPR 

Definition at line 1035 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 3190 of file parsenodes.h.

3191{
3192 FDW_IMPORT_SCHEMA_ALL, /* all relations wanted */
3193 FDW_IMPORT_SCHEMA_LIMIT_TO, /* include only listed tables in import */
3194 FDW_IMPORT_SCHEMA_EXCEPT, /* exclude listed tables from import */

◆ JsonQuotes

Enumerator
JS_QUOTES_UNSPEC 
JS_QUOTES_KEEP 
JS_QUOTES_OMIT 

Definition at line 1940 of file parsenodes.h.

1941{
1942 JS_QUOTES_UNSPEC, /* unspecified */
1943 JS_QUOTES_KEEP, /* KEEP QUOTES */
1944 JS_QUOTES_OMIT, /* OMIT QUOTES */
1945} JsonQuotes;

◆ JsonTableColumnType

Enumerator
JTC_FOR_ORDINALITY 
JTC_REGULAR 
JTC_EXISTS 
JTC_FORMATTED 
JTC_NESTED 

Definition at line 2048 of file parsenodes.h.

◆ JsonTablePlanJoinType

Enumerator
JSTP_JOIN_INNER 
JSTP_JOIN_OUTER 
JSTP_JOIN_CROSS 
JSTP_JOIN_UNION 

Definition at line 1999 of file parsenodes.h.

2000{
2001 JSTP_JOIN_INNER = 0x01,
2002 JSTP_JOIN_OUTER = 0x02,
2003 JSTP_JOIN_CROSS = 0x04,
2004 JSTP_JOIN_UNION = 0x08,

◆ JsonTablePlanType

Enumerator
JSTP_DEFAULT 
JSTP_SIMPLE 
JSTP_JOINED 

Definition at line 1988 of file parsenodes.h.

1989{

◆ 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 2468 of file parsenodes.h.

◆ PartitionRangeDatumKind

Enumerator
PARTITION_RANGE_DATUM_MINVALUE 
PARTITION_RANGE_DATUM_VALUE 
PARTITION_RANGE_DATUM_MAXVALUE 

Definition at line 969 of file parsenodes.h.

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

◆ PartitionStrategy

Enumerator
PARTITION_STRATEGY_LIST 
PARTITION_STRATEGY_RANGE 
PARTITION_STRATEGY_HASH 

Definition at line 917 of file parsenodes.h.

◆ PublicationAllObjType

Enumerator
PUBLICATION_ALL_TABLES 
PUBLICATION_ALL_SEQUENCES 

Definition at line 4539 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 4517 of file parsenodes.h.

4518{
4519 PUBLICATIONOBJ_TABLE, /* A table */
4520 PUBLICATIONOBJ_EXCEPT_TABLE, /* A table in the EXCEPT clause */
4521 PUBLICATIONOBJ_TABLES_IN_SCHEMA, /* All tables in schema */
4522 PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA, /* All tables in first element of
4523 * search_path */
4524 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 4257 of file parsenodes.h.

4258{
4259 REINDEX_OBJECT_INDEX, /* index */
4260 REINDEX_OBJECT_TABLE, /* table or materialized view */
4261 REINDEX_OBJECT_SCHEMA, /* schema */
4262 REINDEX_OBJECT_SYSTEM, /* system catalogs */
4263 REINDEX_OBJECT_DATABASE, /* database */

◆ RepackCommand

Enumerator
REPACK_COMMAND_CLUSTER 
REPACK_COMMAND_REPACK 
REPACK_COMMAND_VACUUMFULL 

Definition at line 4134 of file parsenodes.h.

◆ ReturningOptionKind

Enumerator
RETURNING_OPTION_OLD 
RETURNING_OPTION_NEW 

Definition at line 1867 of file parsenodes.h.

1868{
1869 RETURNING_OPTION_OLD, /* specify alias for OLD in RETURNING */
1870 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 421 of file parsenodes.h.

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

◆ RoleStmtType

Enumerator
ROLESTMT_ROLE 
ROLESTMT_USER 
ROLESTMT_GROUP 

Definition at line 3327 of file parsenodes.h.

3328{
3332} 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 1122 of file parsenodes.h.

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

◆ SetOperation

Enumerator
SETOP_NONE 
SETOP_UNION 
SETOP_INTERSECT 
SETOP_EXCEPT 

Definition at line 2320 of file parsenodes.h.

2321{
2322 SETOP_NONE = 0,
2326} 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 804 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 3935 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 2840 of file parsenodes.h.

2841{
2842 VAR_SET_VALUE, /* SET var = value */
2843 VAR_SET_DEFAULT, /* SET var TO DEFAULT */
2844 VAR_SET_CURRENT, /* SET var FROM CURRENT */
2845 VAR_SET_MULTI, /* special case for SET TRANSACTION ... */
2846 VAR_RESET, /* RESET var */
2847 VAR_RESET_ALL, /* RESET ALL */

◆ ViewCheckOption

Enumerator
NO_CHECK_OPTION 
LOCAL_CHECK_OPTION 
CASCADED_CHECK_OPTION 

Definition at line 4015 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;