use sea_query::{ColumnDef, Table, TableAlterStatement};
use evento_sql::Event;
pub struct Operation;
fn up_statement() -> TableAlterStatement {
Table::alter()
.table(Event::Table)
.add_column(
ColumnDef::new(Event::TimestampSubsec)
.big_integer()
.not_null()
.default(0),
)
.to_owned()
}
fn down_statement() -> TableAlterStatement {
Table::alter()
.table(Event::Table)
.drop_column(Event::TimestampSubsec)
.to_owned()
}
#[cfg(feature = "sqlite")]
#[async_trait::async_trait]
impl sqlx_migrator::Operation<sqlx::Sqlite> for Operation {
async fn up(
&self,
connection: &mut sqlx::SqliteConnection,
) -> Result<(), sqlx_migrator::Error> {
let statment = up_statement().to_string(sea_query::SqliteQueryBuilder);
sqlx::query(sqlx::AssertSqlSafe(statment.as_str()))
.execute(connection)
.await?;
Ok(())
}
async fn down(
&self,
connection: &mut sqlx::SqliteConnection,
) -> Result<(), sqlx_migrator::Error> {
let statment = down_statement().to_string(sea_query::SqliteQueryBuilder);
sqlx::query(sqlx::AssertSqlSafe(statment.as_str()))
.execute(connection)
.await?;
Ok(())
}
}
#[cfg(feature = "mysql")]
#[async_trait::async_trait]
impl sqlx_migrator::Operation<sqlx::MySql> for Operation {
async fn up(&self, connection: &mut sqlx::MySqlConnection) -> Result<(), sqlx_migrator::Error> {
let statment = up_statement().to_string(sea_query::MysqlQueryBuilder);
sqlx::query(sqlx::AssertSqlSafe(statment.as_str()))
.execute(connection)
.await?;
Ok(())
}
async fn down(
&self,
connection: &mut sqlx::MySqlConnection,
) -> Result<(), sqlx_migrator::Error> {
let statment = down_statement().to_string(sea_query::MysqlQueryBuilder);
sqlx::query(sqlx::AssertSqlSafe(statment.as_str()))
.execute(connection)
.await?;
Ok(())
}
}
#[cfg(feature = "postgres")]
#[async_trait::async_trait]
impl sqlx_migrator::Operation<sqlx::Postgres> for Operation {
async fn up(&self, connection: &mut sqlx::PgConnection) -> Result<(), sqlx_migrator::Error> {
let statment = up_statement().to_string(sea_query::PostgresQueryBuilder);
sqlx::query(sqlx::AssertSqlSafe(statment.as_str()))
.execute(connection)
.await?;
Ok(())
}
async fn down(&self, connection: &mut sqlx::PgConnection) -> Result<(), sqlx_migrator::Error> {
let statment = down_statement().to_string(sea_query::PostgresQueryBuilder);
sqlx::query(sqlx::AssertSqlSafe(statment.as_str()))
.execute(connection)
.await?;
Ok(())
}
}