/*------------------------------------------------------------------------- * * commands.h * Declarations for public functions and variables used for all commands * and DDL operations for citus. All declarations are grouped by the * file that implements them. * * Copyright (c) Citus Data, Inc. * *------------------------------------------------------------------------- */ #ifndef CITUS_COMMANDS_H #define CITUS_COMMANDS_H #include "postgres.h" #include "utils/rel.h" #include "nodes/parsenodes.h" #include "tcop/dest.h" /* cluster.c - forward declarations */ extern List * PlanClusterStmt(ClusterStmt *clusterStmt, const char *clusterCommand); /* call.c */ extern bool CallDistributedProcedureRemotely(CallStmt *callStmt, DestReceiver *dest); /* collation.c - forward declarations */ extern char * CreateCollationDDL(Oid collationId); extern List * CreateCollationDDLsIdempotent(Oid collationId); extern ObjectAddress AlterCollationOwnerObjectAddress(AlterOwnerStmt *stmt); extern List * PlanDropCollationStmt(DropStmt *stmt); extern List * PlanAlterCollationOwnerStmt(AlterOwnerStmt *stmt, const char *queryString); extern List * PlanAlterCollationSchemaStmt(AlterObjectSchemaStmt *stmt, const char *queryString); extern List * PlanRenameCollationStmt(RenameStmt *stmt, const char *queryString); extern ObjectAddress * RenameCollationStmtObjectAddress(RenameStmt *stmt, bool missing_ok); extern ObjectAddress * AlterCollationSchemaStmtObjectAddress(AlterObjectSchemaStmt *stmt, bool missing_ok); extern void ProcessAlterCollationSchemaStmt(AlterObjectSchemaStmt *stmt, const char *queryString); extern char * GenerateBackupNameForCollationCollision(const ObjectAddress *address); extern ObjectAddress * DefineCollationStmtObjectAddress(DefineStmt *stmt, bool missing_ok); extern List * ProcessCollationDefineStmt(DefineStmt *stmt, const char *queryString); /* extension.c - forward declarations */ extern bool IsCreateAlterExtensionUpdateCitusStmt(Node *parsetree); extern void ErrorIfUnstableCreateOrAlterExtensionStmt(Node *parsetree); extern List * PlanCreateExtensionStmt(CreateExtensionStmt *stmt, const char *queryString); extern void ProcessCreateExtensionStmt(CreateExtensionStmt *stmt, const char *queryString); extern List * PlanDropExtensionStmt(DropStmt *stmt, const char *queryString); extern List * PlanAlterExtensionSchemaStmt(AlterObjectSchemaStmt *alterExtensionStmt, const char *queryString); extern void ProcessAlterExtensionSchemaStmt(AlterObjectSchemaStmt *alterExtensionStmt, const char *queryString); extern List * PlanAlterExtensionUpdateStmt(AlterExtensionStmt *alterExtensionStmt, const char *queryString); extern List * CreateExtensionDDLCommand(const ObjectAddress *extensionAddress); extern ObjectAddress * AlterExtensionSchemaStmtObjectAddress(AlterObjectSchemaStmt *stmt, bool missing_ok); extern ObjectAddress * AlterExtensionUpdateStmtObjectAddress( AlterExtensionStmt *alterExtensionStmt, bool missing_ok); /* foreign_constraint.c - forward declarations */ extern bool ConstraintIsAForeignKeyToReferenceTable(char *constraintName, Oid leftRelationId); extern void ErrorIfUnsupportedForeignConstraintExists(Relation relation, char distributionMethod, Var *distributionColumn, uint32 colocationId); extern bool ColumnAppearsInForeignKeyToReferenceTable(char *columnName, Oid relationId); extern List * GetTableForeignConstraintCommands(Oid relationId); extern bool HasForeignKeyToReferenceTable(Oid relationId); extern bool TableReferenced(Oid relationId); extern bool TableReferencing(Oid relationId); extern bool ConstraintIsAForeignKey(char *constraintName, Oid relationId); /* function.c - forward declarations */ extern List * PlanCreateFunctionStmt(CreateFunctionStmt *stmt, const char *queryString); extern List * ProcessCreateFunctionStmt(CreateFunctionStmt *stmt, const char *queryString); extern ObjectAddress * CreateFunctionStmtObjectAddress(CreateFunctionStmt *stmt, bool missing_ok); extern ObjectAddress * DefineAggregateStmtObjectAddress(DefineStmt *stmt, bool missing_ok); extern List * PlanAlterFunctionStmt(AlterFunctionStmt *stmt, const char *queryString); extern ObjectAddress * AlterFunctionStmtObjectAddress(AlterFunctionStmt *stmt, bool missing_ok); extern List * PlanRenameFunctionStmt(RenameStmt *stmt, const char *queryString); extern ObjectAddress * RenameFunctionStmtObjectAddress(RenameStmt *stmt, bool missing_ok); extern List * PlanAlterFunctionOwnerStmt(AlterOwnerStmt *stmt, const char *queryString); extern ObjectAddress * AlterFunctionOwnerObjectAddress(AlterOwnerStmt *stmt, bool missing_ok); extern List * PlanAlterFunctionSchemaStmt(AlterObjectSchemaStmt *stmt, const char *queryString); extern ObjectAddress * AlterFunctionSchemaStmtObjectAddress(AlterObjectSchemaStmt *stmt, bool missing_ok); extern void ProcessAlterFunctionSchemaStmt(AlterObjectSchemaStmt *stmt, const char *queryString); extern List * PlanDropFunctionStmt(DropStmt *stmt, const char *queryString); extern List * PlanAlterFunctionDependsStmt(AlterObjectDependsStmt *stmt, const char *queryString); extern ObjectAddress * AlterFunctionDependsStmtObjectAddress(AlterObjectDependsStmt *stmt, bool missing_ok); /* grant.c - forward declarations */ extern List * PlanGrantStmt(GrantStmt *grantStmt); /* index.c - forward declarations */ extern bool IsIndexRenameStmt(RenameStmt *renameStmt); extern List * PlanIndexStmt(IndexStmt *createIndexStatement, const char *createIndexCommand); extern List * PlanReindexStmt(ReindexStmt *ReindexStatement, const char *ReindexCommand); extern List * PlanDropIndexStmt(DropStmt *dropIndexStatement, const char *dropIndexCommand); extern void PostProcessIndexStmt(IndexStmt *indexStmt); extern void ErrorIfUnsupportedAlterIndexStmt(AlterTableStmt *alterTableStatement); /* policy.c - forward declarations */ extern List * CreatePolicyCommands(Oid relationId); extern void ErrorIfUnsupportedPolicy(Relation relation); extern void ErrorIfUnsupportedPolicyExpr(Node *expr); extern List * PlanCreatePolicyStmt(CreatePolicyStmt *stmt); extern List * PlanAlterPolicyStmt(AlterPolicyStmt *stmt); extern List * PlanDropPolicyStmt(DropStmt *stmt, const char *queryString); extern bool IsPolicyRenameStmt(RenameStmt *stmt); extern void CreatePolicyEventExtendNames(CreatePolicyStmt *stmt, const char *schemaName, uint64 shardId); extern void AlterPolicyEventExtendNames(AlterPolicyStmt *stmt, const char *schemaName, uint64 shardId); extern void RenamePolicyEventExtendNames(RenameStmt *stmt, const char *schemaName, uint64 shardId); extern void DropPolicyEventExtendNames(DropStmt *stmt, const char *schemaName, uint64 shardId); /* rename.c - forward declarations*/ extern List * PlanRenameStmt(RenameStmt *renameStmt, const char *renameCommand); extern void ErrorIfUnsupportedRenameStmt(RenameStmt *renameStmt); /* role.c - forward declarations*/ extern List * ProcessAlterRoleStmt(AlterRoleStmt *stmt, const char *queryString); extern List * GenerateAlterRoleIfExistsCommandAllRoles(void); /* schema.c - forward declarations */ extern void ProcessDropSchemaStmt(DropStmt *dropSchemaStatement); extern List * PlanAlterTableSchemaStmt(AlterObjectSchemaStmt *stmt, const char *queryString); extern List * PlanAlterObjectSchemaStmt(AlterObjectSchemaStmt *alterObjectSchemaStmt, const char *alterObjectSchemaCommand); extern void ProcessAlterObjectSchemaStmt(AlterObjectSchemaStmt *stmt, const char *queryString); /* sequence.c - forward declarations */ extern void ErrorIfUnsupportedSeqStmt(CreateSeqStmt *createSeqStmt); extern void ErrorIfDistributedAlterSeqOwnedBy(AlterSeqStmt *alterSeqStmt); /* subscription.c - forward declarations */ extern Node * ProcessCreateSubscriptionStmt(CreateSubscriptionStmt *createSubStmt); /* table.c - forward declarations */ extern void ProcessDropTableStmt(DropStmt *dropTableStatement); extern void ProcessCreateTableStmtPartitionOf(CreateStmt *createStatement); extern void ProcessAlterTableStmtAttachPartition(AlterTableStmt *alterTableStatement); extern List * PlanAlterTableStmt(AlterTableStmt *alterTableStatement, const char *alterTableCommand); extern Node * WorkerProcessAlterTableStmt(AlterTableStmt *alterTableStatement, const char *alterTableCommand); extern bool IsAlterTableRenameStmt(RenameStmt *renameStmt); extern void ErrorIfAlterDropsPartitionColumn(AlterTableStmt *alterTableStatement); extern void PostProcessAlterTableStmt(AlterTableStmt *pStmt); extern void ErrorUnsupportedAlterTableAddColumn(Oid relationId, AlterTableCmd *command, Constraint *constraint); extern void ErrorIfUnsupportedConstraint(Relation relation, char distributionMethod, Var *distributionColumn, uint32 colocationId); /* truncate.c - forward declarations */ extern void ProcessTruncateStatement(TruncateStmt *truncateStatement); /* type.c - forward declarations */ extern List * PlanCompositeTypeStmt(CompositeTypeStmt *stmt, const char *queryString); extern void ProcessCompositeTypeStmt(CompositeTypeStmt *stmt, const char *queryString); extern List * PlanAlterTypeStmt(AlterTableStmt *stmt, const char *queryString); extern List * PlanCreateEnumStmt(CreateEnumStmt *createEnumStmt, const char *queryString); extern void ProcessCreateEnumStmt(CreateEnumStmt *stmt, const char *queryString); extern List * PlanAlterEnumStmt(AlterEnumStmt *stmt, const char *queryString); extern void ProcessAlterEnumStmt(AlterEnumStmt *stmt, const char *queryString); extern List * PlanDropTypeStmt(DropStmt *stmt, const char *queryString); extern List * PlanRenameTypeStmt(RenameStmt *stmt, const char *queryString); extern List * PlanRenameTypeAttributeStmt(RenameStmt *stmt, const char *queryString); extern List * PlanAlterTypeSchemaStmt(AlterObjectSchemaStmt *stmt, const char *queryString); extern List * PlanAlterTypeOwnerStmt(AlterOwnerStmt *stmt, const char *queryString); extern void ProcessAlterTypeSchemaStmt(AlterObjectSchemaStmt *stmt, const char *queryString); extern Node * CreateTypeStmtByObjectAddress(const ObjectAddress *address); extern ObjectAddress * CompositeTypeStmtObjectAddress(CompositeTypeStmt *stmt, bool missing_ok); extern ObjectAddress * CreateEnumStmtObjectAddress(CreateEnumStmt *stmt, bool missing_ok); extern ObjectAddress * AlterTypeStmtObjectAddress(AlterTableStmt *stmt, bool missing_ok); extern ObjectAddress * AlterEnumStmtObjectAddress(AlterEnumStmt *stmt, bool missing_ok); extern ObjectAddress * RenameTypeStmtObjectAddress(RenameStmt *stmt, bool missing_ok); extern ObjectAddress * AlterTypeSchemaStmtObjectAddress(AlterObjectSchemaStmt *stmt, bool missing_ok); extern ObjectAddress * RenameTypeAttributeStmtObjectAddress(RenameStmt *stmt, bool missing_ok); extern ObjectAddress * AlterTypeOwnerObjectAddress(AlterOwnerStmt *stmt, bool missing_ok); extern List * CreateTypeDDLCommandsIdempotent(const ObjectAddress *typeAddress); extern char * GenerateBackupNameForTypeCollision(const ObjectAddress *address); /* function.c - forward declarations */ extern List * CreateFunctionDDLCommandsIdempotent(const ObjectAddress *functionAddress); extern char * GetFunctionDDLCommand(const RegProcedure funcOid, bool useCreateOrReplace); extern char * GenerateBackupNameForProcCollision(const ObjectAddress *address); extern ObjectWithArgs * ObjectWithArgsFromOid(Oid funcOid); /* vacuum.c - froward declarations */ extern void ProcessVacuumStmt(VacuumStmt *vacuumStmt, const char *vacuumCommand); extern bool ShouldPropagateSetCommand(VariableSetStmt *setStmt); extern void ProcessVariableSetStmt(VariableSetStmt *setStmt, const char *setCommand); #endif /*CITUS_COMMANDS_H */