use crate::database::migrations::CustomMigrationError;
use crate::database::versions::{exec, introspect, view};
use crate::database::DatabaseConnection;
pub fn supports_versions(connection: &DatabaseConnection) -> bool {
matches!(connection, DatabaseConnection::Pg(_))
}
pub(super) async fn publish(
connection: &DatabaseConnection,
schema: &str,
version: &str,
renames: &[(String, String, String)],
) -> Result<(), CustomMigrationError> {
if !supports_versions(connection) {
return Ok(());
}
let snapshot = introspect::read_schema(connection, schema, renames).await?;
if snapshot.tables.is_empty() {
return Ok(());
}
let major = introspect::major_version(connection).await;
for statement in view::create_version(schema, version, &snapshot, major) {
exec::run(connection, &statement, &[]).await?;
}
Ok(())
}
pub(super) async fn unpublish(
connection: &DatabaseConnection,
schema: &str,
version: &str,
) -> Result<(), CustomMigrationError> {
if !supports_versions(connection) {
return Ok(());
}
exec::run(connection, &view::drop_schema(schema, version), &[]).await
}