Adds undistribute sql

pull/7274/head
gindibay 2023-10-23 10:01:18 +03:00
parent 1e91b144e2
commit dad81042a5
1 changed files with 14 additions and 1 deletions

View File

@ -240,6 +240,8 @@ PreprocessAlterDatabaseSetStmt(Node *node, const char *queryString,
return NIL; return NIL;
} }
AlterDatabaseSetStmt *stmt = castNode(AlterDatabaseSetStmt, node); AlterDatabaseSetStmt *stmt = castNode(AlterDatabaseSetStmt, node);
EnsureCoordinator(); EnsureCoordinator();
@ -351,6 +353,13 @@ citus_internal_database_command(PG_FUNCTION_ARGS)
PG_RETURN_VOID(); PG_RETURN_VOID();
} }
static char * GetUnmarkDatabaseDistributedSql(char* dbName){
StringInfoData pg_dist_object_delete = { 0 };
initStringInfo(&pg_dist_object_delete);
appendStringInfo(&pg_dist_object_delete, "delete from pg_dist_object where "
"object_id in (select oid from pg_database where datname = '%s')",dbName);
return pg_dist_object_delete.data;
}
List * List *
PreprocessDropDatabaseStmt(Node *node, const char *queryString, PreprocessDropDatabaseStmt(Node *node, const char *queryString,
@ -373,6 +382,8 @@ PreprocessDropDatabaseStmt(Node *node, const char *queryString,
return NIL; return NIL;
} }
ObjectAddress dbAddress = { 0 }; ObjectAddress dbAddress = { 0 };
ObjectAddressSet(dbAddress, DatabaseRelationId, databaseOid); ObjectAddressSet(dbAddress, DatabaseRelationId, databaseOid);
if (!IsObjectDistributed(&dbAddress)) if (!IsObjectDistributed(&dbAddress))
@ -381,6 +392,7 @@ PreprocessDropDatabaseStmt(Node *node, const char *queryString,
} }
UnmarkObjectDistributed(&dbAddress); UnmarkObjectDistributed(&dbAddress);
char *unmarkDatabaseDistributedSql = GetUnmarkDatabaseDistributedSql(stmt->dbname);
char *dropDatabaseCommand = DeparseTreeNode(node); char *dropDatabaseCommand = DeparseTreeNode(node);
@ -390,7 +402,8 @@ PreprocessDropDatabaseStmt(Node *node, const char *queryString,
quote_literal_cstr(dropDatabaseCommand)); quote_literal_cstr(dropDatabaseCommand));
List *commands = list_make3(DISABLE_DDL_PROPAGATION, List *commands = list_make4(DISABLE_DDL_PROPAGATION,
unmarkDatabaseDistributedSql,
(void *) internalDropCommand->data, (void *) internalDropCommand->data,
ENABLE_DDL_PROPAGATION); ENABLE_DDL_PROPAGATION);