Adds alter database rename stmt propagation

pull/7253/head
gindibay 2023-10-11 19:59:33 +03:00
parent fd521f2792
commit 6a333ca742
5 changed files with 58 additions and 3 deletions

View File

@ -184,7 +184,7 @@ PreprocessAlterDatabaseStmt(Node *node, const char *queryString,
if (strstr(sql, "SET TABLESPACE") != NULL) if (strstr(sql, "SET TABLESPACE") != NULL)
{ {
if (IsCoordinatorNode()) if (IsCoordinator())
{ {
ereport(NOTICE, (errmsg( ereport(NOTICE, (errmsg(
"Citus partially supports ALTER DATABASE SET TABLESPACE for " "Citus partially supports ALTER DATABASE SET TABLESPACE for "
@ -240,9 +240,31 @@ PreprocessAlterDatabaseRefreshCollStmt(Node *node, const char *queryString,
return NodeDDLTaskList(NON_COORDINATOR_NODES, commands); return NodeDDLTaskList(NON_COORDINATOR_NODES, commands);
} }
#endif #endif
List *
PreprocessAlterDatabaseRenameStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext)
{
if (!ShouldPropagate())
{
return NIL;
}
RenameStmt *stmt = castNode(RenameStmt, node);
EnsureCoordinator();
char *sql = DeparseTreeNode((Node *) stmt);
List *commands = list_make3(DISABLE_DDL_PROPAGATION,
(void *) sql,
ENABLE_DDL_PROPAGATION);
return NodeDDLTaskList(NON_COORDINATOR_NODES, commands);
}
/* /*
* CreateDDLTaskList creates a task list for running a single DDL command. * CreateDDLTaskList creates a task list for running a single DDL command.
*/ */

View File

@ -512,6 +512,16 @@ static DistributeObjectOps Database_Set = {
.markDistributed = false, .markDistributed = false,
}; };
static DistributeObjectOps Database_Rename = {
.deparse = DeparseAlterDatabaseRenameStmt,
.qualify = NULL,
.preprocess = PreprocessAlterDatabaseRenameStmt,
.postprocess = NULL,
.objectType = OBJECT_DATABASE,
.operationType = DIST_OPS_ALTER,
.address = NULL,
.markDistributed = false,
};
static DistributeObjectOps Domain_Alter = { static DistributeObjectOps Domain_Alter = {
.deparse = DeparseAlterDomainStmt, .deparse = DeparseAlterDomainStmt,
@ -2072,6 +2082,11 @@ GetDistributeObjectOps(Node *node)
return &Collation_Rename; return &Collation_Rename;
} }
case OBJECT_DATABASE:
{
return &Database_Rename;
}
case OBJECT_DOMAIN: case OBJECT_DOMAIN:
{ {
return &Domain_Rename; return &Domain_Rename;

View File

@ -208,9 +208,23 @@ DeparseAlterDatabaseRefreshCollStmt(Node *node)
return str.data; return str.data;
} }
#endif #endif
char *
DeparseAlterDatabaseRenameStmt(Node *node)
{
RenameStmt *stmt = (RenameStmt *) node;
StringInfoData str;
initStringInfo(&str);
appendStringInfo(&str, "ALTER DATABASE %s RENAME TO %s",
quote_identifier(stmt->subname),
quote_identifier(stmt->newname));
return str.data;
}
static void static void
AppendAlterDatabaseSetStmt(StringInfo buf, AlterDatabaseSetStmt *stmt) AppendAlterDatabaseSetStmt(StringInfo buf, AlterDatabaseSetStmt *stmt)
{ {

View File

@ -231,6 +231,9 @@ extern List * PostprocessCreateDatabaseStmt(Node *node, const char *queryString)
extern List * PreprocessDropDatabaseStmt(Node *node, const char *queryString, extern List * PreprocessDropDatabaseStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern List * PreprocessAlterDatabaseRenameStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
/* domain.c - forward declarations */ /* domain.c - forward declarations */
extern List * CreateDomainStmtObjectAddress(Node *node, bool missing_ok, bool extern List * CreateDomainStmtObjectAddress(Node *node, bool missing_ok, bool
isPostprocess); isPostprocess);

View File

@ -243,6 +243,7 @@ extern char * DeparseAlterDatabaseRefreshCollStmt(Node *node);
extern char * DeparseAlterDatabaseSetStmt(Node *node); extern char * DeparseAlterDatabaseSetStmt(Node *node);
extern char * DeparseCreateDatabaseStmt(Node *node); extern char * DeparseCreateDatabaseStmt(Node *node);
extern char * DeparseDropDatabaseStmt(Node *node); extern char * DeparseDropDatabaseStmt(Node *node);
extern char * DeparseAlterDatabaseRenameStmt(Node *node);
/* forward declaration for deparse_publication_stmts.c */ /* forward declaration for deparse_publication_stmts.c */