From ba3123455ea43102b9e86d9b48e36931b7a721b6 Mon Sep 17 00:00:00 2001 From: gindibay Date: Fri, 13 Oct 2023 18:43:06 +0300 Subject: [PATCH] Fixes review notes --- src/backend/distributed/commands/database.c | 23 ++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/backend/distributed/commands/database.c b/src/backend/distributed/commands/database.c index aa6bb8e96..d9bbc663a 100644 --- a/src/backend/distributed/commands/database.c +++ b/src/backend/distributed/commands/database.c @@ -159,6 +159,20 @@ PreprocessGrantOnDatabaseStmt(Node *node, const char *queryString, return NodeDDLTaskList(NON_COORDINATOR_NODES, commands); } +static bool isSetTablespaceStatement(AlterDatabaseStmt *stmt) +{ + ListCell *lc = NULL; + foreach(lc, stmt->options) + { + DefElem *def = (DefElem *) lfirst(lc); + if (strcmp(def->defname, "tablespace") == 0) + { + return true; + } + } + return false; +} + /* * PreprocessAlterDatabaseStmt is executed before the statement is applied to the local @@ -178,11 +192,14 @@ PreprocessAlterDatabaseStmt(Node *node, const char *queryString, AlterDatabaseStmt *stmt = castNode(AlterDatabaseStmt, node); + + + char *sql = DeparseTreeNode((Node *) stmt); List *commands = NULL; - if (strstr(sql, "SET TABLESPACE") != NULL) + if (isSetTablespaceStatement(stmt)) { /*Set tablespace does not work inside a transaction.Therefore, we close the transaction before set tablespace * and open it again after set tablespace. @@ -248,10 +265,10 @@ PreprocessAlterDatabaseRenameStmt(Node *node, const char *queryString, return NIL; } - RenameStmt *stmt = castNode(RenameStmt, node); - EnsureCoordinator(); + RenameStmt *stmt = castNode(RenameStmt, node); + char *sql = DeparseTreeNode((Node *) stmt); List *commands = list_make3(DISABLE_DDL_PROPAGATION,