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  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  RangeTblEntry
 
struct  RTEPermissionInfo
 
struct  RangeTblFunction
 
struct  TableSampleClause
 
struct  WithCheckOption
 
struct  SortGroupClause
 
struct  GroupingSet
 
struct  WindowClause
 
struct  RowMarkClause
 
struct  WithClause
 
struct  InferClause
 
struct  OnConflictClause
 
struct  CTESearchClause
 
struct  CTECycleClause
 
struct  CommonTableExpr
 
struct  MergeWhenClause
 
struct  ReturningOption
 
struct  ReturningClause
 
struct  TriggerTransition
 
struct  JsonOutput
 
struct  JsonArgument
 
struct  JsonFuncExpr
 
struct  JsonTablePathSpec
 
struct  JsonTable
 
struct  JsonTableColumn
 
struct  JsonKeyValue
 
struct  JsonParseExpr
 
struct  JsonScalarExpr
 
struct  JsonSerializeExpr
 
struct  JsonObjectConstructor
 
struct  JsonArrayConstructor
 
struct  JsonArrayQueryConstructor
 
struct  JsonAggConstructor
 
struct  JsonObjectAgg
 
struct  JsonArrayAgg
 
struct  RawStmt
 
struct  InsertStmt
 
struct  DeleteStmt
 
struct  UpdateStmt
 
struct  MergeStmt
 
struct  SelectStmt
 
struct  SetOperationStmt
 
struct  ReturnStmt
 
struct  PLAssignStmt
 
struct  CreateSchemaStmt
 
struct  AlterTableStmt
 
struct  AlterTableCmd
 
struct  ATAlterConstraint
 
struct  ReplicaIdentityStmt
 
struct  AlterCollationStmt
 
struct  AlterDomainStmt
 
struct  GrantStmt
 
struct  ObjectWithArgs
 
struct  AccessPriv
 
struct  GrantRoleStmt
 
struct  AlterDefaultPrivilegesStmt
 
struct  CopyStmt
 
struct  VariableSetStmt
 
struct  VariableShowStmt
 
struct  CreateStmt
 
struct  Constraint
 
struct  CreateTableSpaceStmt
 
struct  DropTableSpaceStmt
 
struct  AlterTableSpaceOptionsStmt
 
struct  AlterTableMoveAllStmt
 
struct  CreateExtensionStmt
 
struct  AlterExtensionStmt
 
struct  AlterExtensionContentsStmt
 
struct  CreateFdwStmt
 
struct  AlterFdwStmt
 
struct  CreateForeignServerStmt
 
struct  AlterForeignServerStmt
 
struct  CreateForeignTableStmt
 
struct  CreateUserMappingStmt
 
struct  AlterUserMappingStmt
 
struct  DropUserMappingStmt
 
struct  ImportForeignSchemaStmt
 
struct  CreatePolicyStmt
 
struct  AlterPolicyStmt
 
struct  CreateAmStmt
 
struct  CreateTrigStmt
 
struct  CreateEventTrigStmt
 
struct  AlterEventTrigStmt
 
struct  CreatePLangStmt
 
struct  CreateRoleStmt
 
struct  AlterRoleStmt
 
struct  AlterRoleSetStmt
 
struct  DropRoleStmt
 
struct  CreateSeqStmt
 
struct  AlterSeqStmt
 
struct  DefineStmt
 
struct  CreateDomainStmt
 
struct  CreateOpClassStmt
 
struct  CreateOpClassItem
 
struct  CreateOpFamilyStmt
 
struct  AlterOpFamilyStmt
 
struct  DropStmt
 
struct  TruncateStmt
 
struct  CommentStmt
 
struct  SecLabelStmt
 
struct  DeclareCursorStmt
 
struct  ClosePortalStmt
 
struct  FetchStmt
 
struct  IndexStmt
 
struct  CreateStatsStmt
 
struct  StatsElem
 
struct  AlterStatsStmt
 
struct  CreateFunctionStmt
 
struct  FunctionParameter
 
struct  AlterFunctionStmt
 
struct  DoStmt
 
struct  InlineCodeBlock
 
struct  CallStmt
 
struct  CallContext
 
struct  RenameStmt
 
struct  AlterObjectDependsStmt
 
struct  AlterObjectSchemaStmt
 
struct  AlterOwnerStmt
 
struct  AlterOperatorStmt
 
struct  AlterTypeStmt
 
struct  RuleStmt
 
struct  NotifyStmt
 
struct  ListenStmt
 
struct  UnlistenStmt
 
struct  TransactionStmt
 
struct  CompositeTypeStmt
 
struct  CreateEnumStmt
 
struct  CreateRangeStmt
 
struct  AlterEnumStmt
 
struct  ViewStmt
 
struct  LoadStmt
 
struct  CreatedbStmt
 
struct  AlterDatabaseStmt
 
struct  AlterDatabaseRefreshCollStmt
 
struct  AlterDatabaseSetStmt
 
struct  DropdbStmt
 
struct  AlterSystemStmt
 
struct  ClusterStmt
 
struct  VacuumStmt
 
struct  VacuumRelation
 
struct  ExplainStmt
 
struct  CreateTableAsStmt
 
struct  RefreshMatViewStmt
 
struct  CheckPointStmt
 
struct  DiscardStmt
 
struct  LockStmt
 
struct  ConstraintsSetStmt
 
struct  ReindexStmt
 
struct  CreateConversionStmt
 
struct  CreateCastStmt
 
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 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 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 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 WithClause WithClause
 
typedef struct InferClause InferClause
 
typedef struct OnConflictClause OnConflictClause
 
typedef enum CTEMaterialize CTEMaterialize
 
typedef struct CTESearchClause CTESearchClause
 
typedef struct CTECycleClause CTECycleClause
 
typedef struct CommonTableExpr CommonTableExpr
 
typedef struct MergeWhenClause MergeWhenClause
 
typedef enum ReturningOptionKind ReturningOptionKind
 
typedef struct ReturningOption ReturningOption
 
typedef struct ReturningClause ReturningClause
 
typedef struct TriggerTransition TriggerTransition
 
typedef struct JsonOutput JsonOutput
 
typedef struct JsonArgument JsonArgument
 
typedef enum JsonQuotes JsonQuotes
 
typedef struct JsonFuncExpr JsonFuncExpr
 
typedef struct JsonTablePathSpec JsonTablePathSpec
 
typedef struct JsonTable JsonTable
 
typedef enum JsonTableColumnType JsonTableColumnType
 
typedef struct JsonTableColumn JsonTableColumn
 
typedef struct JsonKeyValue JsonKeyValue
 
typedef struct JsonParseExpr JsonParseExpr
 
typedef struct JsonScalarExpr JsonScalarExpr
 
typedef struct JsonSerializeExpr JsonSerializeExpr
 
typedef struct JsonObjectConstructor JsonObjectConstructor
 
typedef struct JsonArrayConstructor JsonArrayConstructor
 
typedef struct JsonArrayQueryConstructor JsonArrayQueryConstructor
 
typedef struct JsonAggConstructor JsonAggConstructor
 
typedef struct JsonObjectAgg JsonObjectAgg
 
typedef struct JsonArrayAgg JsonArrayAgg
 
typedef struct RawStmt RawStmt
 
typedef struct InsertStmt InsertStmt
 
typedef struct DeleteStmt DeleteStmt
 
typedef struct UpdateStmt UpdateStmt
 
typedef struct MergeStmt MergeStmt
 
typedef enum SetOperation SetOperation
 
typedef struct SelectStmt SelectStmt
 
typedef struct SetOperationStmt SetOperationStmt
 
typedef struct ReturnStmt ReturnStmt
 
typedef struct PLAssignStmt PLAssignStmt
 
typedef enum ObjectType ObjectType
 
typedef struct CreateSchemaStmt CreateSchemaStmt
 
typedef enum DropBehavior DropBehavior
 
typedef struct AlterTableStmt AlterTableStmt
 
typedef enum AlterTableType AlterTableType
 
typedef struct AlterTableCmd AlterTableCmd
 
typedef struct ATAlterConstraint ATAlterConstraint
 
typedef struct ReplicaIdentityStmt ReplicaIdentityStmt
 
typedef struct AlterCollationStmt AlterCollationStmt
 
typedef enum AlterDomainType AlterDomainType
 
typedef struct AlterDomainStmt AlterDomainStmt
 
typedef enum GrantTargetType GrantTargetType
 
typedef struct GrantStmt GrantStmt
 
typedef struct ObjectWithArgs ObjectWithArgs
 
typedef struct AccessPriv AccessPriv
 
typedef struct GrantRoleStmt GrantRoleStmt
 
typedef struct AlterDefaultPrivilegesStmt AlterDefaultPrivilegesStmt
 
typedef struct CopyStmt CopyStmt
 
typedef enum VariableSetKind VariableSetKind
 
typedef struct VariableSetStmt VariableSetStmt
 
typedef struct VariableShowStmt VariableShowStmt
 
typedef struct CreateStmt CreateStmt
 
typedef enum ConstrType ConstrType
 
typedef struct Constraint Constraint
 
typedef struct CreateTableSpaceStmt CreateTableSpaceStmt
 
typedef struct DropTableSpaceStmt DropTableSpaceStmt
 
typedef struct AlterTableSpaceOptionsStmt AlterTableSpaceOptionsStmt
 
typedef struct AlterTableMoveAllStmt AlterTableMoveAllStmt
 
typedef struct CreateExtensionStmt CreateExtensionStmt
 
typedef struct AlterExtensionStmt AlterExtensionStmt
 
typedef struct AlterExtensionContentsStmt AlterExtensionContentsStmt
 
typedef struct CreateFdwStmt CreateFdwStmt
 
typedef struct AlterFdwStmt AlterFdwStmt
 
typedef struct CreateForeignServerStmt CreateForeignServerStmt
 
typedef struct AlterForeignServerStmt AlterForeignServerStmt
 
typedef struct CreateForeignTableStmt CreateForeignTableStmt
 
typedef struct CreateUserMappingStmt CreateUserMappingStmt
 
typedef struct AlterUserMappingStmt AlterUserMappingStmt
 
typedef struct DropUserMappingStmt DropUserMappingStmt
 
typedef enum ImportForeignSchemaType ImportForeignSchemaType
 
typedef struct ImportForeignSchemaStmt ImportForeignSchemaStmt
 
typedef struct CreatePolicyStmt CreatePolicyStmt
 
typedef struct AlterPolicyStmt AlterPolicyStmt
 
typedef struct CreateAmStmt CreateAmStmt
 
typedef struct CreateTrigStmt CreateTrigStmt
 
typedef struct CreateEventTrigStmt CreateEventTrigStmt
 
typedef struct AlterEventTrigStmt AlterEventTrigStmt
 
typedef struct CreatePLangStmt CreatePLangStmt
 
typedef enum RoleStmtType RoleStmtType
 
typedef struct CreateRoleStmt CreateRoleStmt
 
typedef struct AlterRoleStmt AlterRoleStmt
 
typedef struct AlterRoleSetStmt AlterRoleSetStmt
 
typedef struct DropRoleStmt DropRoleStmt
 
typedef struct CreateSeqStmt CreateSeqStmt
 
typedef struct AlterSeqStmt AlterSeqStmt
 
typedef struct DefineStmt DefineStmt
 
typedef struct CreateDomainStmt CreateDomainStmt
 
typedef struct CreateOpClassStmt CreateOpClassStmt
 
typedef struct CreateOpClassItem CreateOpClassItem
 
typedef struct CreateOpFamilyStmt CreateOpFamilyStmt
 
typedef struct AlterOpFamilyStmt AlterOpFamilyStmt
 
typedef struct DropStmt DropStmt
 
typedef struct TruncateStmt TruncateStmt
 
typedef struct CommentStmt CommentStmt
 
typedef struct SecLabelStmt SecLabelStmt
 
typedef struct DeclareCursorStmt DeclareCursorStmt
 
typedef struct ClosePortalStmt ClosePortalStmt
 
typedef enum FetchDirection FetchDirection
 
typedef enum FetchDirectionKeywords FetchDirectionKeywords
 
typedef struct FetchStmt FetchStmt
 
typedef struct IndexStmt IndexStmt
 
typedef struct CreateStatsStmt CreateStatsStmt
 
typedef struct StatsElem StatsElem
 
typedef struct AlterStatsStmt AlterStatsStmt
 
typedef struct CreateFunctionStmt CreateFunctionStmt
 
typedef enum FunctionParameterMode FunctionParameterMode
 
typedef struct FunctionParameter FunctionParameter
 
typedef struct AlterFunctionStmt AlterFunctionStmt
 
typedef struct DoStmt DoStmt
 
typedef struct InlineCodeBlock InlineCodeBlock
 
typedef struct CallStmt CallStmt
 
typedef struct CallContext CallContext
 
typedef struct RenameStmt RenameStmt
 
typedef struct AlterObjectDependsStmt AlterObjectDependsStmt
 
typedef struct AlterObjectSchemaStmt AlterObjectSchemaStmt
 
typedef struct AlterOwnerStmt AlterOwnerStmt
 
typedef struct AlterOperatorStmt AlterOperatorStmt
 
typedef struct AlterTypeStmt AlterTypeStmt
 
typedef struct RuleStmt RuleStmt
 
typedef struct NotifyStmt NotifyStmt
 
typedef struct ListenStmt ListenStmt
 
typedef struct UnlistenStmt UnlistenStmt
 
typedef enum TransactionStmtKind TransactionStmtKind
 
typedef struct TransactionStmt TransactionStmt
 
typedef struct CompositeTypeStmt CompositeTypeStmt
 
typedef struct CreateEnumStmt CreateEnumStmt
 
typedef struct CreateRangeStmt CreateRangeStmt
 
typedef struct AlterEnumStmt AlterEnumStmt
 
typedef enum ViewCheckOption ViewCheckOption
 
typedef struct ViewStmt ViewStmt
 
typedef struct LoadStmt LoadStmt
 
typedef struct CreatedbStmt CreatedbStmt
 
typedef struct AlterDatabaseStmt AlterDatabaseStmt
 
typedef struct AlterDatabaseRefreshCollStmt AlterDatabaseRefreshCollStmt
 
typedef struct AlterDatabaseSetStmt AlterDatabaseSetStmt
 
typedef struct DropdbStmt DropdbStmt
 
typedef struct AlterSystemStmt AlterSystemStmt
 
typedef struct ClusterStmt ClusterStmt
 
typedef struct VacuumStmt VacuumStmt
 
typedef struct VacuumRelation VacuumRelation
 
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 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  RTEKind {
  RTE_RELATION , RTE_SUBQUERY , RTE_JOIN , RTE_FUNCTION ,
  RTE_TABLEFUNC , RTE_VALUES , RTE_CTE , RTE_NAMEDTUPLESTORE ,
  RTE_RESULT , RTE_GROUP
}
 
enum  WCOKind {
  WCO_VIEW_CHECK , WCO_RLS_INSERT_CHECK , WCO_RLS_UPDATE_CHECK , WCO_RLS_CONFLICT_CHECK ,
  WCO_RLS_MERGE_UPDATE_CHECK , WCO_RLS_MERGE_DELETE_CHECK
}
 
enum  GroupingSetKind {
  GROUPING_SET_EMPTY , GROUPING_SET_SIMPLE , GROUPING_SET_ROLLUP , GROUPING_SET_CUBE ,
  GROUPING_SET_SETS
}
 
enum  CTEMaterialize { CTEMaterializeDefault , CTEMaterializeAlways , CTEMaterializeNever }
 
enum  ReturningOptionKind { RETURNING_OPTION_OLD , RETURNING_OPTION_NEW }
 
enum  JsonQuotes { JS_QUOTES_UNSPEC , JS_QUOTES_KEEP , JS_QUOTES_OMIT }
 
enum  JsonTableColumnType {
  JTC_FOR_ORDINALITY , JTC_REGULAR , JTC_EXISTS , JTC_FORMATTED ,
  JTC_NESTED
}
 
enum  SetOperation { SETOP_NONE = 0 , SETOP_UNION , SETOP_INTERSECT , SETOP_EXCEPT }
 
enum  ObjectType {
  OBJECT_ACCESS_METHOD , OBJECT_AGGREGATE , OBJECT_AMOP , OBJECT_AMPROC ,
  OBJECT_ATTRIBUTE , OBJECT_CAST , OBJECT_COLUMN , OBJECT_COLLATION ,
  OBJECT_CONVERSION , OBJECT_DATABASE , OBJECT_DEFAULT , OBJECT_DEFACL ,
  OBJECT_DOMAIN , OBJECT_DOMCONSTRAINT , OBJECT_EVENT_TRIGGER , OBJECT_EXTENSION ,
  OBJECT_FDW , OBJECT_FOREIGN_SERVER , OBJECT_FOREIGN_TABLE , OBJECT_FUNCTION ,
  OBJECT_INDEX , OBJECT_LANGUAGE , OBJECT_LARGEOBJECT , OBJECT_MATVIEW ,
  OBJECT_OPCLASS , OBJECT_OPERATOR , OBJECT_OPFAMILY , OBJECT_PARAMETER_ACL ,
  OBJECT_POLICY , OBJECT_PROCEDURE , OBJECT_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  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  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_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_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 3419 of file parsenodes.h.

◆ CURSOR_OPT_BINARY

#define CURSOR_OPT_BINARY   0x0001 /* BINARY */

Definition at line 3415 of file parsenodes.h.

◆ CURSOR_OPT_CUSTOM_PLAN

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

Definition at line 3424 of file parsenodes.h.

◆ CURSOR_OPT_FAST_PLAN

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

Definition at line 3422 of file parsenodes.h.

◆ CURSOR_OPT_GENERIC_PLAN

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

Definition at line 3423 of file parsenodes.h.

◆ CURSOR_OPT_HOLD

#define CURSOR_OPT_HOLD   0x0020 /* WITH HOLD */

Definition at line 3420 of file parsenodes.h.

◆ CURSOR_OPT_INSENSITIVE

#define CURSOR_OPT_INSENSITIVE   0x0008 /* INSENSITIVE */

Definition at line 3418 of file parsenodes.h.

◆ CURSOR_OPT_NO_SCROLL

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

Definition at line 3417 of file parsenodes.h.

◆ CURSOR_OPT_PARALLEL_OK

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

Definition at line 3425 of file parsenodes.h.

◆ CURSOR_OPT_SCROLL

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

Definition at line 3416 of file parsenodes.h.

◆ FETCH_ALL

#define FETCH_ALL   LONG_MAX

Definition at line 3476 of file parsenodes.h.

◆ FKCONSTR_ACTION_CASCADE

#define FKCONSTR_ACTION_CASCADE   'c'

Definition at line 2850 of file parsenodes.h.

◆ FKCONSTR_ACTION_NOACTION

#define FKCONSTR_ACTION_NOACTION   'a'

Definition at line 2848 of file parsenodes.h.

◆ FKCONSTR_ACTION_RESTRICT

#define FKCONSTR_ACTION_RESTRICT   'r'

Definition at line 2849 of file parsenodes.h.

◆ FKCONSTR_ACTION_SETDEFAULT

#define FKCONSTR_ACTION_SETDEFAULT   'd'

Definition at line 2852 of file parsenodes.h.

◆ FKCONSTR_ACTION_SETNULL

#define FKCONSTR_ACTION_SETNULL   'n'

Definition at line 2851 of file parsenodes.h.

◆ FKCONSTR_MATCH_FULL

#define FKCONSTR_MATCH_FULL   'f'

Definition at line 2855 of file parsenodes.h.

◆ FKCONSTR_MATCH_PARTIAL

#define FKCONSTR_MATCH_PARTIAL   'p'

Definition at line 2856 of file parsenodes.h.

◆ FKCONSTR_MATCH_SIMPLE

#define FKCONSTR_MATCH_SIMPLE   's'

Definition at line 2857 of file parsenodes.h.

◆ FRAMEOPTION_BETWEEN

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

Definition at line 613 of file parsenodes.h.

◆ FRAMEOPTION_DEFAULTS

#define FRAMEOPTION_DEFAULTS
Value:
#define FRAMEOPTION_END_CURRENT_ROW
Definition parsenodes.h:619
#define FRAMEOPTION_START_UNBOUNDED_PRECEDING
Definition parsenodes.h:614
#define FRAMEOPTION_RANGE
Definition parsenodes.h:610

Definition at line 636 of file parsenodes.h.

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

◆ FRAMEOPTION_END_CURRENT_ROW

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

Definition at line 619 of file parsenodes.h.

◆ FRAMEOPTION_END_OFFSET

Definition at line 630 of file parsenodes.h.

◆ FRAMEOPTION_END_OFFSET_FOLLOWING

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

Definition at line 623 of file parsenodes.h.

◆ FRAMEOPTION_END_OFFSET_PRECEDING

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

Definition at line 621 of file parsenodes.h.

◆ FRAMEOPTION_END_UNBOUNDED_FOLLOWING

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

Definition at line 617 of file parsenodes.h.

◆ FRAMEOPTION_END_UNBOUNDED_PRECEDING

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

Definition at line 615 of file parsenodes.h.

◆ FRAMEOPTION_EXCLUDE_CURRENT_ROW

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

Definition at line 624 of file parsenodes.h.

◆ FRAMEOPTION_EXCLUDE_GROUP

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

Definition at line 625 of file parsenodes.h.

◆ FRAMEOPTION_EXCLUDE_TIES

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

Definition at line 626 of file parsenodes.h.

◆ FRAMEOPTION_EXCLUSION

#define FRAMEOPTION_EXCLUSION
Value:
#define FRAMEOPTION_EXCLUDE_CURRENT_ROW
Definition parsenodes.h:624
#define FRAMEOPTION_EXCLUDE_TIES
Definition parsenodes.h:626
#define FRAMEOPTION_EXCLUDE_GROUP
Definition parsenodes.h:625

Definition at line 632 of file parsenodes.h.

◆ FRAMEOPTION_GROUPS

#define FRAMEOPTION_GROUPS   0x00008 /* GROUPS behavior */

Definition at line 612 of file parsenodes.h.

◆ FRAMEOPTION_NONDEFAULT

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

Definition at line 609 of file parsenodes.h.

◆ FRAMEOPTION_RANGE

#define FRAMEOPTION_RANGE   0x00002 /* RANGE behavior */

Definition at line 610 of file parsenodes.h.

◆ FRAMEOPTION_ROWS

#define FRAMEOPTION_ROWS   0x00004 /* ROWS behavior */

Definition at line 611 of file parsenodes.h.

◆ FRAMEOPTION_START_CURRENT_ROW

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

Definition at line 618 of file parsenodes.h.

◆ FRAMEOPTION_START_OFFSET

Definition at line 628 of file parsenodes.h.

◆ FRAMEOPTION_START_OFFSET_FOLLOWING

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

Definition at line 622 of file parsenodes.h.

◆ FRAMEOPTION_START_OFFSET_PRECEDING

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

Definition at line 620 of file parsenodes.h.

◆ FRAMEOPTION_START_UNBOUNDED_FOLLOWING

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

Definition at line 616 of file parsenodes.h.

◆ FRAMEOPTION_START_UNBOUNDED_PRECEDING

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

Definition at line 614 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:874
#define IsA(nodeptr, _type_)
Definition nodes.h:164
@ CMD_SELECT
Definition nodes.h:275

Definition at line 1763 of file parsenodes.h.

1766 : \
1767 ((Query *) (cte)->ctequery)->returningList)

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

◆ OPCLASS_ITEM_OPERATOR

#define OPCLASS_ITEM_OPERATOR   1

Definition at line 3314 of file parsenodes.h.

◆ OPCLASS_ITEM_STORAGETYPE

#define OPCLASS_ITEM_STORAGETYPE   3

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

◆ AlterPublicationAction

◆ AlterPublicationStmt

◆ AlterRoleSetStmt

◆ AlterRoleStmt

◆ AlterSeqStmt

◆ AlterStatsStmt

◆ AlterSubscriptionStmt

◆ AlterSubscriptionType

◆ AlterSystemStmt

◆ AlterTableCmd

◆ AlterTableMoveAllStmt

◆ AlterTableSpaceOptionsStmt

◆ AlterTableStmt

◆ AlterTableType

◆ AlterTSConfigType

◆ AlterTSConfigurationStmt

◆ AlterTSDictionaryStmt

◆ AlterTypeStmt

◆ AlterUserMappingStmt

◆ ATAlterConstraint

◆ CallContext

◆ CallStmt

◆ CheckPointStmt

◆ ClosePortalStmt

◆ ClusterStmt

◆ 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

◆ 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

◆ FuncCall

◆ FunctionParameter

◆ FunctionParameterMode

◆ GrantRoleStmt

◆ GrantStmt

◆ GrantTargetType

◆ GroupingSet

◆ GroupingSetKind

◆ ImportForeignSchemaStmt

◆ ImportForeignSchemaType

◆ IndexElem

◆ IndexStmt

◆ InferClause

◆ InlineCodeBlock

◆ InsertStmt

◆ JsonAggConstructor

◆ JsonArgument

◆ JsonArrayAgg

◆ JsonArrayConstructor

◆ JsonArrayQueryConstructor

◆ JsonFuncExpr

◆ JsonKeyValue

◆ JsonObjectAgg

◆ JsonObjectConstructor

◆ JsonOutput

◆ JsonParseExpr

◆ JsonQuotes

◆ JsonScalarExpr

◆ JsonSerializeExpr

◆ JsonTable

◆ JsonTableColumn

◆ JsonTableColumnType

◆ JsonTablePathSpec

◆ ListenStmt

◆ LoadStmt

◆ LockingClause

◆ LockStmt

◆ MergeStmt

◆ MergeWhenClause

◆ MultiAssignRef

◆ NotifyStmt

◆ ObjectType

◆ ObjectWithArgs

◆ OnConflictClause

◆ ParamRef

◆ PartitionCmd

◆ PartitionElem

◆ PartitionRangeDatum

◆ PartitionRangeDatumKind

◆ PartitionSpec

◆ PartitionStrategy

◆ PLAssignStmt

◆ PrepareStmt

◆ PublicationAllObjSpec

◆ PublicationAllObjType

◆ PublicationObjSpec

◆ PublicationObjSpecType

◆ PublicationTable

◆ Query

◆ QuerySource

◆ RangeFunction

◆ RangeSubselect

◆ RangeTableFunc

◆ RangeTableFuncCol

◆ RangeTableSample

◆ RangeTblEntry

◆ RangeTblFunction

◆ RawStmt

◆ ReassignOwnedStmt

◆ RefreshMatViewStmt

◆ ReindexObjectType

◆ ReindexStmt

◆ RenameStmt

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

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

◆ AlterDomainType

Enumerator
AD_AlterDefault 
AD_DropNotNull 
AD_SetNotNull 
AD_AddConstraint 
AD_DropConstraint 
AD_ValidateConstraint 

Definition at line 2571 of file parsenodes.h.

2572{
2573 AD_AlterDefault = 'T', /* SET|DROP DEFAULT */
2574 AD_DropNotNull = 'N', /* DROP NOT NULL */
2575 AD_SetNotNull = 'O', /* SET NOT NULL */
2576 AD_AddConstraint = 'C', /* ADD CONSTRAINT */
2577 AD_DropConstraint = 'X', /* DROP CONSTRAINT */
2578 AD_ValidateConstraint = 'V', /* VALIDATE CONSTRAINT */

◆ AlterPublicationAction

Enumerator
AP_AddObjects 
AP_DropObjects 
AP_SetObjects 

Definition at line 4353 of file parsenodes.h.

4354{
4355 AP_AddObjects, /* add objects to publication */
4356 AP_DropObjects, /* remove objects from publication */
4357 AP_SetObjects, /* set list of objects */

◆ AlterSubscriptionType

Enumerator
ALTER_SUBSCRIPTION_OPTIONS 
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 4386 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 2442 of file parsenodes.h.

2443{
2444 AT_AddColumn, /* add column */
2445 AT_AddColumnToView, /* implicitly via CREATE OR REPLACE VIEW */
2446 AT_ColumnDefault, /* alter column default */
2447 AT_CookedColumnDefault, /* add a pre-cooked column default */
2448 AT_DropNotNull, /* alter column drop not null */
2449 AT_SetNotNull, /* alter column set not null */
2450 AT_SetExpression, /* alter column set expression */
2451 AT_DropExpression, /* alter column drop expression */
2452 AT_SetStatistics, /* alter column set statistics */
2453 AT_SetOptions, /* alter column set ( options ) */
2454 AT_ResetOptions, /* alter column reset ( options ) */
2455 AT_SetStorage, /* alter column set storage */
2456 AT_SetCompression, /* alter column set compression */
2457 AT_DropColumn, /* drop column */
2458 AT_AddIndex, /* add index */
2459 AT_ReAddIndex, /* internal to commands/tablecmds.c */
2460 AT_AddConstraint, /* add constraint */
2461 AT_ReAddConstraint, /* internal to commands/tablecmds.c */
2462 AT_ReAddDomainConstraint, /* internal to commands/tablecmds.c */
2463 AT_AlterConstraint, /* alter constraint */
2464 AT_ValidateConstraint, /* validate constraint */
2465 AT_AddIndexConstraint, /* add constraint using existing index */
2466 AT_DropConstraint, /* drop constraint */
2467 AT_ReAddComment, /* internal to commands/tablecmds.c */
2468 AT_AlterColumnType, /* alter column type */
2469 AT_AlterColumnGenericOptions, /* alter column OPTIONS (...) */
2470 AT_ChangeOwner, /* change owner */
2471 AT_ClusterOn, /* CLUSTER ON */
2472 AT_DropCluster, /* SET WITHOUT CLUSTER */
2473 AT_SetLogged, /* SET LOGGED */
2474 AT_SetUnLogged, /* SET UNLOGGED */
2475 AT_DropOids, /* SET WITHOUT OIDS */
2476 AT_SetAccessMethod, /* SET ACCESS METHOD */
2477 AT_SetTableSpace, /* SET TABLESPACE */
2478 AT_SetRelOptions, /* SET (...) -- AM specific parameters */
2479 AT_ResetRelOptions, /* RESET (...) -- AM specific parameters */
2480 AT_ReplaceRelOptions, /* replace reloption list in its entirety */
2481 AT_EnableTrig, /* ENABLE TRIGGER name */
2482 AT_EnableAlwaysTrig, /* ENABLE ALWAYS TRIGGER name */
2483 AT_EnableReplicaTrig, /* ENABLE REPLICA TRIGGER name */
2484 AT_DisableTrig, /* DISABLE TRIGGER name */
2485 AT_EnableTrigAll, /* ENABLE TRIGGER ALL */
2486 AT_DisableTrigAll, /* DISABLE TRIGGER ALL */
2487 AT_EnableTrigUser, /* ENABLE TRIGGER USER */
2488 AT_DisableTrigUser, /* DISABLE TRIGGER USER */
2489 AT_EnableRule, /* ENABLE RULE name */
2490 AT_EnableAlwaysRule, /* ENABLE ALWAYS RULE name */
2491 AT_EnableReplicaRule, /* ENABLE REPLICA RULE name */
2492 AT_DisableRule, /* DISABLE RULE name */
2493 AT_AddInherit, /* INHERIT parent */
2494 AT_DropInherit, /* NO INHERIT parent */
2495 AT_AddOf, /* OF <type_name> */
2496 AT_DropOf, /* NOT OF */
2497 AT_ReplicaIdentity, /* REPLICA IDENTITY */
2498 AT_EnableRowSecurity, /* ENABLE ROW SECURITY */
2499 AT_DisableRowSecurity, /* DISABLE ROW SECURITY */
2500 AT_ForceRowSecurity, /* FORCE ROW SECURITY */
2501 AT_NoForceRowSecurity, /* NO FORCE ROW SECURITY */
2502 AT_GenericOptions, /* OPTIONS (...) */
2503 AT_AttachPartition, /* ATTACH PARTITION */
2504 AT_DetachPartition, /* DETACH PARTITION */
2505 AT_DetachPartitionFinalize, /* DETACH PARTITION FINALIZE */
2506 AT_SplitPartition, /* SPLIT PARTITION */
2507 AT_MergePartitions, /* MERGE PARTITIONS */
2508 AT_AddIdentity, /* ADD IDENTITY */
2509 AT_SetIdentity, /* SET identity column options */
2510 AT_DropIdentity, /* DROP IDENTITY */
2511 AT_ReAddStatistics, /* internal to commands/tablecmds.c */

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

2827{
2828 CONSTR_NULL, /* not standard SQL, but a lot of people
2829 * expect it */
2839 CONSTR_ATTR_DEFERRABLE, /* attributes for previous constraint node */
2845} ConstrType;

◆ CTEMaterialize

Enumerator
CTEMaterializeDefault 
CTEMaterializeAlways 
CTEMaterializeNever 

Definition at line 1694 of file parsenodes.h.

1695{
1696 CTEMaterializeDefault, /* no option specified */
1697 CTEMaterializeAlways, /* MATERIALIZED */
1698 CTEMaterializeNever, /* NOT MATERIALIZED */

◆ DefElemAction

Enumerator
DEFELEM_UNSPEC 
DEFELEM_SET 
DEFELEM_ADD 
DEFELEM_DROP 

Definition at line 832 of file parsenodes.h.

833{
834 DEFELEM_UNSPEC, /* no action given */

◆ DiscardMode

Enumerator
DISCARD_ALL 
DISCARD_PLANS 
DISCARD_SEQUENCES 
DISCARD_TEMP 

Definition at line 4090 of file parsenodes.h.

4091{
4096} DiscardMode;

◆ DropBehavior

Enumerator
DROP_RESTRICT 
DROP_CASCADE 

Definition at line 2423 of file parsenodes.h.

2424{
2425 DROP_RESTRICT, /* drop fails if any dependent objects */
2426 DROP_CASCADE, /* remove dependent objects too */
2427} DropBehavior;

◆ FetchDirection

Enumerator
FETCH_FORWARD 
FETCH_BACKWARD 
FETCH_ABSOLUTE 
FETCH_RELATIVE 

Definition at line 3450 of file parsenodes.h.

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

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

3604{
3605 /* the assigned enum values appear in pg_proc, don't change 'em! */
3606 FUNC_PARAM_IN = 'i', /* input only */
3607 FUNC_PARAM_OUT = 'o', /* output only */
3608 FUNC_PARAM_INOUT = 'b', /* both */
3609 FUNC_PARAM_VARIADIC = 'v', /* variadic (always input) */
3610 FUNC_PARAM_TABLE = 't', /* table function output column */
3611 /* this is not used in pg_proc: */
3612 FUNC_PARAM_DEFAULT = 'd', /* default; effectively same as IN */

◆ GrantTargetType

Enumerator
ACL_TARGET_OBJECT 
ACL_TARGET_ALL_IN_SCHEMA 
ACL_TARGET_DEFAULTS 

Definition at line 2597 of file parsenodes.h.

2598{
2599 ACL_TARGET_OBJECT, /* grant on specific named object(s) */
2600 ACL_TARGET_ALL_IN_SCHEMA, /* grant on all objects in given schema(s) */
2601 ACL_TARGET_DEFAULTS, /* ALTER DEFAULT PRIVILEGES */

◆ GroupingSetKind

Enumerator
GROUPING_SET_EMPTY 
GROUPING_SET_SIMPLE 
GROUPING_SET_ROLLUP 
GROUPING_SET_CUBE 
GROUPING_SET_SETS 

Definition at line 1555 of file parsenodes.h.

◆ ImportForeignSchemaType

Enumerator
FDW_IMPORT_SCHEMA_ALL 
FDW_IMPORT_SCHEMA_LIMIT_TO 
FDW_IMPORT_SCHEMA_EXCEPT 

Definition at line 3071 of file parsenodes.h.

3072{
3073 FDW_IMPORT_SCHEMA_ALL, /* all relations wanted */
3074 FDW_IMPORT_SCHEMA_LIMIT_TO, /* include only listed tables in import */
3075 FDW_IMPORT_SCHEMA_EXCEPT, /* exclude listed tables from import */

◆ JsonQuotes

Enumerator
JS_QUOTES_UNSPEC 
JS_QUOTES_KEEP 
JS_QUOTES_OMIT 

Definition at line 1866 of file parsenodes.h.

1867{
1868 JS_QUOTES_UNSPEC, /* unspecified */
1869 JS_QUOTES_KEEP, /* KEEP QUOTES */
1870 JS_QUOTES_OMIT, /* OMIT QUOTES */
1871} JsonQuotes;

◆ JsonTableColumnType

Enumerator
JTC_FOR_ORDINALITY 
JTC_REGULAR 
JTC_EXISTS 
JTC_FORMATTED 
JTC_NESTED 

Definition at line 1931 of file parsenodes.h.

◆ ObjectType

Enumerator
OBJECT_ACCESS_METHOD 
OBJECT_AGGREGATE 
OBJECT_AMOP 
OBJECT_AMPROC 
OBJECT_ATTRIBUTE 
OBJECT_CAST 
OBJECT_COLUMN 
OBJECT_COLLATION 
OBJECT_CONVERSION 
OBJECT_DATABASE 
OBJECT_DEFAULT 
OBJECT_DEFACL 
OBJECT_DOMAIN 
OBJECT_DOMCONSTRAINT 
OBJECT_EVENT_TRIGGER 
OBJECT_EXTENSION 
OBJECT_FDW 
OBJECT_FOREIGN_SERVER 
OBJECT_FOREIGN_TABLE 
OBJECT_FUNCTION 
OBJECT_INDEX 
OBJECT_LANGUAGE 
OBJECT_LARGEOBJECT 
OBJECT_MATVIEW 
OBJECT_OPCLASS 
OBJECT_OPERATOR 
OBJECT_OPFAMILY 
OBJECT_PARAMETER_ACL 
OBJECT_POLICY 
OBJECT_PROCEDURE 
OBJECT_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 2350 of file parsenodes.h.

◆ PartitionRangeDatumKind

Enumerator
PARTITION_RANGE_DATUM_MINVALUE 
PARTITION_RANGE_DATUM_VALUE 
PARTITION_RANGE_DATUM_MAXVALUE 

Definition at line 951 of file parsenodes.h.

952{
953 PARTITION_RANGE_DATUM_MINVALUE = -1, /* less than any other value */
954 PARTITION_RANGE_DATUM_VALUE = 0, /* a specific (bounded) value */
955 PARTITION_RANGE_DATUM_MAXVALUE = 1, /* greater than any other value */

◆ PartitionStrategy

Enumerator
PARTITION_STRATEGY_LIST 
PARTITION_STRATEGY_RANGE 
PARTITION_STRATEGY_HASH 

Definition at line 899 of file parsenodes.h.

◆ PublicationAllObjType

Enumerator
PUBLICATION_ALL_TABLES 
PUBLICATION_ALL_SEQUENCES 

Definition at line 4329 of file parsenodes.h.

◆ PublicationObjSpecType

Enumerator
PUBLICATIONOBJ_TABLE 
PUBLICATIONOBJ_TABLES_IN_SCHEMA 
PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA 
PUBLICATIONOBJ_CONTINUATION 

Definition at line 4308 of file parsenodes.h.

4309{
4310 PUBLICATIONOBJ_TABLE, /* A table */
4311 PUBLICATIONOBJ_TABLES_IN_SCHEMA, /* All tables in schema */
4312 PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA, /* All tables in first element of
4313 * search_path */
4314 PUBLICATIONOBJ_CONTINUATION, /* Continuation of previous type */

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

4132{
4133 REINDEX_OBJECT_INDEX, /* index */
4134 REINDEX_OBJECT_TABLE, /* table or materialized view */
4135 REINDEX_OBJECT_SCHEMA, /* schema */
4136 REINDEX_OBJECT_SYSTEM, /* system catalogs */
4137 REINDEX_OBJECT_DATABASE, /* database */

◆ ReturningOptionKind

Enumerator
RETURNING_OPTION_OLD 
RETURNING_OPTION_NEW 

Definition at line 1793 of file parsenodes.h.

1794{
1795 RETURNING_OPTION_OLD, /* specify alias for OLD in RETURNING */
1796 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 417 of file parsenodes.h.

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

◆ RoleStmtType

Enumerator
ROLESTMT_ROLE 
ROLESTMT_USER 
ROLESTMT_GROUP 

Definition at line 3208 of file parsenodes.h.

3209{
3213} RoleStmtType;

◆ RTEKind

Enumerator
RTE_RELATION 
RTE_SUBQUERY 
RTE_JOIN 
RTE_FUNCTION 
RTE_TABLEFUNC 
RTE_VALUES 
RTE_CTE 
RTE_NAMEDTUPLESTORE 
RTE_RESULT 
RTE_GROUP 

Definition at line 1068 of file parsenodes.h.

1069{
1070 RTE_RELATION, /* ordinary relation reference */
1071 RTE_SUBQUERY, /* subquery in FROM */
1072 RTE_JOIN, /* join */
1073 RTE_FUNCTION, /* function in FROM */
1074 RTE_TABLEFUNC, /* TableFunc(.., column list) */
1075 RTE_VALUES, /* VALUES (<exprlist>), (<exprlist>), ... */
1076 RTE_CTE, /* common table expr (WITH list element) */
1077 RTE_NAMEDTUPLESTORE, /* tuplestore, e.g. for AFTER triggers */
1078 RTE_RESULT, /* RTE represents an empty FROM clause; such
1079 * RTEs are added by the planner, they're not
1080 * present during parsing or rewriting */
1081 RTE_GROUP, /* the grouping step */
1082} RTEKind;

◆ SetOperation

Enumerator
SETOP_NONE 
SETOP_UNION 
SETOP_INTERSECT 
SETOP_EXCEPT 

Definition at line 2201 of file parsenodes.h.

2202{
2203 SETOP_NONE = 0,
2207} 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 787 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 3818 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 2721 of file parsenodes.h.

2722{
2723 VAR_SET_VALUE, /* SET var = value */
2724 VAR_SET_DEFAULT, /* SET var TO DEFAULT */
2725 VAR_SET_CURRENT, /* SET var FROM CURRENT */
2726 VAR_SET_MULTI, /* special case for SET TRANSACTION ... */
2727 VAR_RESET, /* RESET var */
2728 VAR_RESET_ALL, /* RESET ALL */

◆ ViewCheckOption

Enumerator
NO_CHECK_OPTION 
LOCAL_CHECK_OPTION 
CASCADED_CHECK_OPTION 

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

1416{
1417 WCO_VIEW_CHECK, /* WCO on an auto-updatable view */
1418 WCO_RLS_INSERT_CHECK, /* RLS INSERT WITH CHECK policy */
1419 WCO_RLS_UPDATE_CHECK, /* RLS UPDATE WITH CHECK policy */
1420 WCO_RLS_CONFLICT_CHECK, /* RLS ON CONFLICT DO UPDATE USING policy */
1421 WCO_RLS_MERGE_UPDATE_CHECK, /* RLS MERGE UPDATE USING policy */
1422 WCO_RLS_MERGE_DELETE_CHECK, /* RLS MERGE DELETE USING policy */
1423} WCOKind;