From cc86236fa164afa542a7483d371193771e0dd3ba Mon Sep 17 00:00:00 2001 From: Nils Dijk Date: Fri, 7 Feb 2020 01:36:56 +0100 Subject: [PATCH] extract table DistributeObjectOps --- .../commands/distribute_object_ops.c | 58 ----------------- src/backend/distributed/commands/table.c | 62 +++++++++++++++++-- src/include/distributed/commands.h | 8 --- 3 files changed, 56 insertions(+), 72 deletions(-) diff --git a/src/backend/distributed/commands/distribute_object_ops.c b/src/backend/distributed/commands/distribute_object_ops.c index 7974b9fd5..ddfb05841 100644 --- a/src/backend/distributed/commands/distribute_object_ops.c +++ b/src/backend/distributed/commands/distribute_object_ops.c @@ -23,15 +23,6 @@ static DistributeObjectOps NoDistributeOps = { .address = NULL, }; -static DistributeObjectOps Any_AlterTableMoveAll = { - .deparse = NULL, - .qualify = NULL, - .preprocess = PreprocessAlterTableMoveAllStmt, - .postprocess = NULL, - .address = NULL, -}; -REGISTER_DISTRIBUTED_OPERATION(AlterTableMoveAllStmt, Any_AlterTableMoveAll); - static DistributeObjectOps Any_Cluster = { .deparse = NULL, .qualify = NULL, @@ -135,26 +126,6 @@ static DistributeObjectOps Collation_Rename = { REGISTER_DISTRIBUTED_OPERATION_NESTED(RenameStmt, renameType, OBJECT_COLLATION, Collation_Rename); -static DistributeObjectOps ForeignTable_AlterTable = { - .deparse = NULL, - .qualify = NULL, - .preprocess = PreprocessAlterTableStmt, - .postprocess = NULL, - .address = NULL, -}; -REGISTER_DISTRIBUTED_OPERATION_NESTED(AlterTableStmt, relkind, OBJECT_FOREIGN_TABLE, - ForeignTable_AlterTable); - -static DistributeObjectOps Index_AlterTable = { - .deparse = NULL, - .qualify = NULL, - .preprocess = PreprocessAlterTableStmt, - .postprocess = NULL, - .address = NULL, -}; -REGISTER_DISTRIBUTED_OPERATION_NESTED(AlterTableStmt, relkind, OBJECT_INDEX, - Index_AlterTable); - static DistributeObjectOps Index_Drop = { .deparse = NULL, .qualify = NULL, @@ -182,35 +153,6 @@ static DistributeObjectOps Schema_Grant = { }; REGISTER_DISTRIBUTED_OPERATION_NESTED(GrantStmt, objtype, OBJECT_SCHEMA, Schema_Grant); -static DistributeObjectOps Table_AlterTable = { - .deparse = NULL, - .qualify = NULL, - .preprocess = PreprocessAlterTableStmt, - .postprocess = NULL, - .address = NULL, -}; -REGISTER_DISTRIBUTED_OPERATION_NESTED(AlterTableStmt, relkind, OBJECT_TABLE, - Table_AlterTable); - -static DistributeObjectOps Table_AlterObjectSchema = { - .deparse = DeparseAlterTableSchemaStmt, - .qualify = QualifyAlterTableSchemaStmt, - .preprocess = PreprocessAlterTableSchemaStmt, - .postprocess = PostprocessAlterTableSchemaStmt, - .address = AlterTableSchemaStmtObjectAddress, -}; -REGISTER_DISTRIBUTED_OPERATION_NESTED(AlterObjectSchemaStmt, objectType, OBJECT_TABLE, - Table_AlterObjectSchema); - -static DistributeObjectOps Table_Drop = { - .deparse = NULL, - .qualify = NULL, - .preprocess = PreprocessDropTableStmt, - .postprocess = NULL, - .address = NULL, -}; -REGISTER_DISTRIBUTED_OPERATION_NESTED(DropStmt, removeType, OBJECT_TABLE, Table_Drop); - /* linker provided pointers */ SECTION_ARRAY(DistributedObjectOpsContainer *, opscontainer); diff --git a/src/backend/distributed/commands/table.c b/src/backend/distributed/commands/table.c index 174429bff..8334f3f23 100644 --- a/src/backend/distributed/commands/table.c +++ b/src/backend/distributed/commands/table.c @@ -53,6 +53,56 @@ static void ErrorIfUnsupportedAlterAddConstraintStmt(AlterTableStmt *alterTableS */ static bool SetupExecutionModeForAlterTable(Oid relationId, AlterTableCmd *command); +/* DistributeObjectOps */ +static List * PreprocessAlterTableMoveAllStmt(Node *node, const char *queryString); +static DistributeObjectOps Any_AlterTableMoveAll = { + .deparse = NULL, + .qualify = NULL, + .preprocess = PreprocessAlterTableMoveAllStmt, + .postprocess = NULL, + .address = NULL, +}; +REGISTER_DISTRIBUTED_OPERATION(AlterTableMoveAllStmt, Any_AlterTableMoveAll); + +static List * PreprocessAlterTableSchemaStmt(Node *node, const char *queryString); +static List * PostprocessAlterTableSchemaStmt(Node *node, const char *queryString); +static ObjectAddress AlterTableSchemaStmtObjectAddress(Node *node, bool missing_ok); +static DistributeObjectOps Table_AlterObjectSchema = { + .deparse = DeparseAlterTableSchemaStmt, + .qualify = QualifyAlterTableSchemaStmt, + .preprocess = PreprocessAlterTableSchemaStmt, + .postprocess = PostprocessAlterTableSchemaStmt, + .address = AlterTableSchemaStmtObjectAddress, +}; +REGISTER_DISTRIBUTED_OPERATION_NESTED(AlterObjectSchemaStmt, objectType, OBJECT_TABLE, + Table_AlterObjectSchema); + +static List * PreprocessAlterTableStmt(Node *node, const char *alterTableCommand); +static DistributeObjectOps Table_AlterTable = { + .deparse = NULL, + .qualify = NULL, + .preprocess = PreprocessAlterTableStmt, + .postprocess = NULL, + .address = NULL, +}; +REGISTER_DISTRIBUTED_OPERATION_NESTED(AlterTableStmt, relkind, OBJECT_TABLE, + Table_AlterTable); +REGISTER_DISTRIBUTED_OPERATION_NESTED(AlterTableStmt, relkind, OBJECT_FOREIGN_TABLE, + Table_AlterTable); +REGISTER_DISTRIBUTED_OPERATION_NESTED(AlterTableStmt, relkind, OBJECT_INDEX, + Table_AlterTable); + +static List * PreprocessDropTableStmt(Node *node, const char *queryString); +static DistributeObjectOps Table_Drop = { + .deparse = NULL, + .qualify = NULL, + .preprocess = PreprocessDropTableStmt, + .postprocess = NULL, + .address = NULL, +}; +REGISTER_DISTRIBUTED_OPERATION_NESTED(DropStmt, removeType, OBJECT_TABLE, Table_Drop); + + /* * PreprocessDropTableStmt processes DROP TABLE commands for partitioned tables. * If we are trying to DROP partitioned tables, we first need to go to MX nodes @@ -63,7 +113,7 @@ static bool SetupExecutionModeForAlterTable(Oid relationId, AlterTableCmd *comma * Postgres catalogs via performDeletion function, thus we need to be cautious * about not processing same DROP command twice. */ -List * +static List * PreprocessDropTableStmt(Node *node, const char *queryString) { DropStmt *dropTableStatement = castNode(DropStmt, node); @@ -258,7 +308,7 @@ PostprocessAlterTableStmtAttachPartition(AlterTableStmt *alterTableStatement, * can now use the new dependencies of the table to ensure all its dependencies exist on * the workers before we apply the commands remotely. */ -List * +static List * PostprocessAlterTableSchemaStmt(Node *node, const char *queryString) { AlterObjectSchemaStmt *stmt = castNode(AlterObjectSchemaStmt, node); @@ -285,7 +335,7 @@ PostprocessAlterTableSchemaStmt(Node *node, const char *queryString) * during the worker node portion of DDL execution before returning that DDLJob * in a List. If no distributed table is involved, this function returns NIL. */ -List * +static List * PreprocessAlterTableStmt(Node *node, const char *alterTableCommand) { AlterTableStmt *alterTableStatement = castNode(AlterTableStmt, node); @@ -490,7 +540,7 @@ PreprocessAlterTableStmt(Node *node, const char *alterTableCommand) * AlterTableMoveAllStmt. At the moment we do not support this functionality in * the distributed environment. We warn out here. */ -List * +static List * PreprocessAlterTableMoveAllStmt(Node *node, const char *queryString) { ereport(WARNING, (errmsg("not propagating ALTER TABLE ALL IN TABLESPACE " @@ -508,7 +558,7 @@ PreprocessAlterTableMoveAllStmt(Node *node, const char *queryString) * * In this stage we can prepare the commands that will alter the schemas of the shards. */ -List * +static List * PreprocessAlterTableSchemaStmt(Node *node, const char *queryString) { AlterObjectSchemaStmt *stmt = castNode(AlterObjectSchemaStmt, node); @@ -1462,7 +1512,7 @@ ErrorIfUnsupportedAlterAddConstraintStmt(AlterTableStmt *alterTableStatement) * new schema. Errors if missing_ok is false and the table cannot be found in either of the * schemas. */ -ObjectAddress +static ObjectAddress AlterTableSchemaStmtObjectAddress(Node *node, bool missing_ok) { AlterObjectSchemaStmt *stmt = castNode(AlterObjectSchemaStmt, node); diff --git a/src/include/distributed/commands.h b/src/include/distributed/commands.h index 928a03ab2..ab1960541 100644 --- a/src/include/distributed/commands.h +++ b/src/include/distributed/commands.h @@ -226,16 +226,11 @@ extern Node * ProcessCreateSubscriptionStmt(CreateSubscriptionStmt *createSubStm /* table.c - forward declarations */ -extern List * PreprocessDropTableStmt(Node *stmt, const char *queryString); extern List * PostprocessCreateTableStmtPartitionOf(CreateStmt *createStatement, const char *queryString); extern List * PostprocessAlterTableStmtAttachPartition( AlterTableStmt *alterTableStatement, const char *queryString); -extern List * PostprocessAlterTableSchemaStmt(Node *node, const char *queryString); -extern List * PreprocessAlterTableStmt(Node *node, const char *alterTableCommand); -extern List * PreprocessAlterTableMoveAllStmt(Node *node, const char *queryString); -extern List * PreprocessAlterTableSchemaStmt(Node *node, const char *queryString); extern Node * WorkerProcessAlterTableStmt(AlterTableStmt *alterTableStatement, const char *alterTableCommand); extern bool IsAlterTableRenameStmt(RenameStmt *renameStmt); @@ -245,9 +240,6 @@ extern void ErrorUnsupportedAlterTableAddColumn(Oid relationId, AlterTableCmd *c Constraint *constraint); extern void ErrorIfUnsupportedConstraint(Relation relation, char distributionMethod, Var *distributionColumn, uint32 colocationId); -extern ObjectAddress AlterTableSchemaStmtObjectAddress(Node *stmt, - bool missing_ok); - /* truncate.c - forward declarations */ extern void PostprocessTruncateStatement(TruncateStmt *truncateStatement);