fix: fix migrations
This commit is contained in:
parent
b5b3c77ba3
commit
5155c59293
@ -318,7 +318,7 @@ pub trait CustomSchemaManagerExt {
|
||||
}
|
||||
|
||||
async fn create_foreign_key_if_not_exists<
|
||||
T: IntoIden + 'static + Send,
|
||||
T: ToString + 'static + Send,
|
||||
S: IntoIden + 'static + Send,
|
||||
>(
|
||||
&self,
|
||||
@ -328,7 +328,7 @@ pub trait CustomSchemaManagerExt {
|
||||
) -> Result<(), DbErr>;
|
||||
|
||||
async fn drop_foreign_key_if_exists<
|
||||
T: IntoIden + 'static + Send,
|
||||
T: ToString + 'static + Send,
|
||||
S: IntoIden + 'static + Send,
|
||||
>(
|
||||
&self,
|
||||
@ -424,7 +424,7 @@ impl CustomSchemaManagerExt for SchemaManager<'_> {
|
||||
}
|
||||
|
||||
async fn create_foreign_key_if_not_exists<
|
||||
T: IntoIden + 'static + Send,
|
||||
T: ToString + 'static + Send,
|
||||
S: IntoIden + 'static + Send,
|
||||
>(
|
||||
&self,
|
||||
@ -432,7 +432,7 @@ impl CustomSchemaManagerExt for SchemaManager<'_> {
|
||||
foreign_key: S,
|
||||
stmt: ForeignKeyCreateStatement,
|
||||
) -> Result<(), DbErr> {
|
||||
let from_tbl = from_tbl.into_iden().to_string();
|
||||
let from_tbl = from_tbl.to_string();
|
||||
let foreign_key = foreign_key.into_iden().to_string();
|
||||
let db = self
|
||||
.get_connection()
|
||||
@ -442,7 +442,7 @@ impl CustomSchemaManagerExt for SchemaManager<'_> {
|
||||
"
|
||||
SELECT CONSTRAINT_NAME
|
||||
FROM information_schema.KEY_COLUMN_USAGE
|
||||
WHERE TABLE_NAME = '{from_tbl}' AND CONSTRAINT_NAME = '{foreign_key}'
|
||||
WHERE TABLE_NAME = {from_tbl} AND CONSTRAINT_NAME = '{foreign_key}'
|
||||
"
|
||||
),
|
||||
))
|
||||
@ -457,7 +457,7 @@ impl CustomSchemaManagerExt for SchemaManager<'_> {
|
||||
}
|
||||
|
||||
async fn drop_foreign_key_if_exists<
|
||||
T: IntoIden + 'static + Send,
|
||||
T: ToString + 'static + Send,
|
||||
S: IntoIden + 'static + Send,
|
||||
>(
|
||||
&self,
|
||||
@ -465,7 +465,7 @@ impl CustomSchemaManagerExt for SchemaManager<'_> {
|
||||
foreign_key: S,
|
||||
stmt: ForeignKeyDropStatement,
|
||||
) -> Result<(), DbErr> {
|
||||
let from_tbl = from_tbl.into_iden().to_string();
|
||||
let from_tbl = from_tbl.to_string();
|
||||
let foreign_key = foreign_key.into_iden().to_string();
|
||||
let db = self
|
||||
.get_connection()
|
||||
@ -475,7 +475,7 @@ impl CustomSchemaManagerExt for SchemaManager<'_> {
|
||||
"
|
||||
SELECT CONSTRAINT_NAME
|
||||
FROM information_schema.KEY_COLUMN_USAGE
|
||||
WHERE TABLE_NAME = '{from_tbl}' AND CONSTRAINT_NAME = '{foreign_key}'
|
||||
WHERE TABLE_NAME = {from_tbl} AND CONSTRAINT_NAME = '{foreign_key}'
|
||||
"
|
||||
),
|
||||
))
|
||||
|
@ -78,7 +78,7 @@ impl MigrationTrait for Migration {
|
||||
|
||||
manager
|
||||
.create_foreign_key_if_not_exists(
|
||||
Subscriptions::Table,
|
||||
Subscriptions::Table.to_string(),
|
||||
"fk_subscriptions_credential_id",
|
||||
ForeignKeyCreateStatement::new()
|
||||
.name("fk_subscriptions_credential_id")
|
||||
|
@ -61,7 +61,7 @@ impl MigrationTrait for Migration {
|
||||
)).await?;
|
||||
|
||||
db.execute_unprepared(&format!(
|
||||
r#"CREATE OR REPLACE FUNCTION {SETUP_APALIS_JOBS_EXTRA_FOREIGN_KEYS_FUNCTION_NAME}() RETURNS trigger AS $$
|
||||
r#"CREATE OR REPLACE FUNCTION {apalis_schema}.{SETUP_APALIS_JOBS_EXTRA_FOREIGN_KEYS_FUNCTION_NAME}() RETURNS trigger AS $$
|
||||
DECLARE
|
||||
new_job_subscriber_id integer;
|
||||
new_job_subscription_id integer;
|
||||
@ -70,18 +70,19 @@ impl MigrationTrait for Migration {
|
||||
new_job_subscriber_id = (NEW.{job} ->> '{subscriber_id}')::integer;
|
||||
new_job_subscription_id = (NEW.{job} ->> '{subscription_id}')::integer;
|
||||
new_job_task_type = (NEW.{job} ->> '{task_type}')::text;
|
||||
IF new_job_subscriber_id != (OLD.{job} ->> '{subscriber_id}')::integer AND new_job_subscriber_id != NEW.{subscriber_id} THEN
|
||||
IF new_job_subscriber_id IS DISTINCT FROM (OLD.{job} ->> '{subscriber_id}')::integer AND new_job_subscriber_id IS DISTINCT FROM NEW.{subscriber_id} THEN
|
||||
NEW.{subscriber_id} = new_job_subscriber_id;
|
||||
END IF;
|
||||
IF new_job_subscription_id != (OLD.{job} ->> '{subscription_id}')::integer AND new_job_subscription_id != NEW.{subscription_id} THEN
|
||||
IF new_job_subscription_id IS DISTINCT FROM (OLD.{job} ->> '{subscription_id}')::integer AND new_job_subscription_id IS DISTINCT FROM NEW.{subscription_id} THEN
|
||||
NEW.{subscription_id} = new_job_subscription_id;
|
||||
END IF;
|
||||
IF new_job_task_type != (OLD.{job} ->> '{task_type}')::text AND new_job_task_type != NEW.{task_type} THEN
|
||||
IF new_job_task_type IS DISTINCT FROM (OLD.{job} ->> '{task_type}')::text AND new_job_task_type IS DISTINCT FROM NEW.{task_type} THEN
|
||||
NEW.{task_type} = new_job_task_type;
|
||||
END IF;
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;"#,
|
||||
apalis_schema = ApalisSchema::Schema.to_string(),
|
||||
job = ApalisJobs::Job.to_string(),
|
||||
subscriber_id = ApalisJobs::SubscriberId.to_string(),
|
||||
subscription_id = ApalisJobs::SubscriptionId.to_string(),
|
||||
@ -92,7 +93,7 @@ impl MigrationTrait for Migration {
|
||||
r#"CREATE OR REPLACE TRIGGER {SETUP_APALIS_JOBS_EXTRA_FOREIGN_KEYS_TRIGGER_NAME}
|
||||
BEFORE INSERT OR UPDATE ON {apalis_schema}.{apalis_table}
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION {SETUP_APALIS_JOBS_EXTRA_FOREIGN_KEYS_FUNCTION_NAME}();"#,
|
||||
EXECUTE FUNCTION {apalis_schema}.{SETUP_APALIS_JOBS_EXTRA_FOREIGN_KEYS_FUNCTION_NAME}();"#,
|
||||
apalis_schema = ApalisSchema::Schema.to_string(),
|
||||
apalis_table = ApalisJobs::Table.to_string()
|
||||
))
|
||||
@ -198,7 +199,8 @@ impl MigrationTrait for Migration {
|
||||
)).await?;
|
||||
|
||||
db.execute_unprepared(&format!(
|
||||
r#"DROP FUNCTION IF EXISTS {SETUP_APALIS_JOBS_EXTRA_FOREIGN_KEYS_FUNCTION_NAME}()"#,
|
||||
r#"DROP FUNCTION IF EXISTS {apalis_schema}.{SETUP_APALIS_JOBS_EXTRA_FOREIGN_KEYS_FUNCTION_NAME}()"#,
|
||||
apalis_schema = ApalisSchema::Schema.to_string(),
|
||||
))
|
||||
.await?;
|
||||
|
||||
|
@ -15,6 +15,8 @@ pub struct Migration;
|
||||
#[async_trait]
|
||||
impl MigrationTrait for Migration {
|
||||
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
||||
let db = manager.get_connection();
|
||||
|
||||
create_postgres_enum_for_active_enum!(manager, EpisodeTypeEnum, EpisodeType::Mikan).await?;
|
||||
|
||||
{
|
||||
@ -29,11 +31,17 @@ impl MigrationTrait for Migration {
|
||||
BangumiTypeEnum,
|
||||
BangumiType::iden_values(),
|
||||
))
|
||||
.drop_column(Bangumi::SavePath)
|
||||
.to_owned(),
|
||||
)
|
||||
.await?;
|
||||
|
||||
db.execute_unprepared(&format!(
|
||||
r#"ALTER TABLE {bangumi} DROP COLUMN IF EXISTS {save_path}"#,
|
||||
bangumi = Bangumi::Table.to_string(),
|
||||
save_path = Bangumi::SavePath.to_string(),
|
||||
))
|
||||
.await?;
|
||||
|
||||
manager
|
||||
.exec_stmt(
|
||||
UpdateStatement::new()
|
||||
@ -83,11 +91,17 @@ impl MigrationTrait for Migration {
|
||||
.add_column_if_not_exists(big_integer_null(
|
||||
Episodes::EnclosureContentLength,
|
||||
))
|
||||
.drop_column(Episodes::SavePath)
|
||||
.to_owned(),
|
||||
)
|
||||
.await?;
|
||||
|
||||
db.execute_unprepared(&format!(
|
||||
r#"ALTER TABLE {episodes} DROP COLUMN IF EXISTS {save_path}"#,
|
||||
episodes = Episodes::Table.to_string(),
|
||||
save_path = Episodes::SavePath.to_string(),
|
||||
))
|
||||
.await?;
|
||||
|
||||
manager
|
||||
.exec_stmt(
|
||||
UpdateStatement::new()
|
||||
@ -120,10 +134,34 @@ impl MigrationTrait for Migration {
|
||||
}
|
||||
|
||||
async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
||||
manager
|
||||
.alter_table(
|
||||
Table::alter()
|
||||
.table(Bangumi::Table)
|
||||
.add_column_if_not_exists(text_null(Bangumi::SavePath))
|
||||
.drop_column(Bangumi::BangumiType)
|
||||
.to_owned(),
|
||||
)
|
||||
.await?;
|
||||
|
||||
manager
|
||||
.drop_postgres_enum_for_active_enum(BangumiTypeEnum)
|
||||
.await?;
|
||||
|
||||
manager
|
||||
.alter_table(
|
||||
Table::alter()
|
||||
.table(Episodes::Table)
|
||||
.add_column_if_not_exists(text_null(Episodes::SavePath))
|
||||
.drop_column(Episodes::EpisodeType)
|
||||
.drop_column(Episodes::EnclosureMagnetLink)
|
||||
.drop_column(Episodes::EnclosureTorrentLink)
|
||||
.drop_column(Episodes::EnclosurePubDate)
|
||||
.drop_column(Episodes::EnclosureContentLength)
|
||||
.to_owned(),
|
||||
)
|
||||
.await?;
|
||||
|
||||
manager
|
||||
.drop_postgres_enum_for_active_enum(EpisodeTypeEnum)
|
||||
.await?;
|
||||
|
@ -105,13 +105,13 @@ impl MigrationTrait for Migration {
|
||||
new_subscriber_task_subscriber_id = (NEW.{subscriber_task_cron} ->> 'subscriber_id')::integer;
|
||||
new_subscriber_task_subscription_id = (NEW.{subscriber_task_cron} ->> 'subscription_id')::integer;
|
||||
new_system_task_subscriber_id = (NEW.{system_task_cron} ->> 'subscriber_id')::integer;
|
||||
IF new_subscriber_task_subscriber_id != (OLD.{subscriber_task_cron} ->> 'subscriber_id')::integer AND new_subscriber_task_subscriber_id != NEW.{subscriber_id} THEN
|
||||
IF new_subscriber_task_subscriber_id IS DISTINCT FROM (OLD.{subscriber_task_cron} ->> 'subscriber_id')::integer AND new_subscriber_task_subscriber_id IS DISTINCT FROM NEW.{subscriber_id} THEN
|
||||
NEW.{subscriber_id} = new_subscriber_task_subscriber_id;
|
||||
END IF;
|
||||
IF new_subscriber_task_subscription_id != (OLD.{subscriber_task_cron} ->> 'subscription_id')::integer AND new_subscriber_task_subscription_id != NEW.{subscription_id} THEN
|
||||
IF new_subscriber_task_subscription_id IS DISTINCT FROM (OLD.{subscriber_task_cron} ->> 'subscription_id')::integer AND new_subscriber_task_subscription_id IS DISTINCT FROM NEW.{subscription_id} THEN
|
||||
NEW.{subscription_id} = new_subscriber_task_subscription_id;
|
||||
END IF;
|
||||
IF new_system_task_subscriber_id != (OLD.{system_task_cron} ->> 'subscriber_id')::integer AND new_system_task_subscriber_id != NEW.{subscriber_id} THEN
|
||||
IF new_system_task_subscriber_id IS DISTINCT FROM (OLD.{system_task_cron} ->> 'subscriber_id')::integer AND new_system_task_subscriber_id IS DISTINCT FROM NEW.{subscriber_id} THEN
|
||||
NEW.{subscriber_id} = new_system_task_subscriber_id;
|
||||
END IF;
|
||||
RETURN NEW;
|
||||
@ -154,8 +154,8 @@ impl MigrationTrait for Migration {
|
||||
OLD.{next_run} IS NULL
|
||||
OR OLD.{next_run} > CURRENT_TIMESTAMP
|
||||
OR OLD.{enabled} = false
|
||||
OR OLD.{status} != '{pending}'
|
||||
OR OLD.{attempts} != NEW.{attempts}
|
||||
OR OLD.{status} IS DISTINCT FROM '{pending}'
|
||||
OR OLD.{attempts} IS DISTINCT FROM NEW.{attempts}
|
||||
)
|
||||
THEN
|
||||
PERFORM pg_notify('{CRON_DUE_EVENT}', row_to_json(NEW)::text);
|
||||
@ -341,7 +341,7 @@ impl MigrationTrait for Migration {
|
||||
.await?;
|
||||
|
||||
db.execute_unprepared(&format!(
|
||||
r#"CREATE OR REPLACE FUNCTION {SETUP_APALIS_JOBS_EXTRA_FOREIGN_KEYS_FUNCTION_NAME}() RETURNS trigger AS $$
|
||||
r#"CREATE OR REPLACE FUNCTION {apalis_schema}.{SETUP_APALIS_JOBS_EXTRA_FOREIGN_KEYS_FUNCTION_NAME}() RETURNS trigger AS $$
|
||||
DECLARE
|
||||
new_job_subscriber_id integer;
|
||||
new_job_subscription_id integer;
|
||||
@ -352,21 +352,22 @@ impl MigrationTrait for Migration {
|
||||
new_job_subscription_id = (NEW.{job} ->> '{subscription_id}')::integer;
|
||||
new_job_cron_id = (NEW.{job} ->> '{cron_id}')::integer;
|
||||
new_job_task_type = (NEW.{job} ->> '{task_type}')::text;
|
||||
IF new_job_subscriber_id != (OLD.{job} ->> '{subscriber_id}')::integer AND new_job_subscriber_id != NEW.{subscriber_id} THEN
|
||||
IF new_job_subscriber_id IS DISTINCT FROM (OLD.{job} ->> '{subscriber_id}')::integer AND new_job_subscriber_id IS DISTINCT FROM NEW.{subscriber_id} THEN
|
||||
NEW.{subscriber_id} = new_job_subscriber_id;
|
||||
END IF;
|
||||
IF new_job_subscription_id != (OLD.{job} ->> '{subscription_id}')::integer AND new_job_subscription_id != NEW.{subscription_id} THEN
|
||||
IF new_job_subscription_id IS DISTINCT FROM (OLD.{job} ->> '{subscription_id}')::integer AND new_job_subscription_id IS DISTINCT FROM NEW.{subscription_id} THEN
|
||||
NEW.{subscription_id} = new_job_subscription_id;
|
||||
END IF;
|
||||
IF new_job_cron_id != (OLD.{job} ->> '{cron_id}')::integer AND new_job_cron_id != NEW.{cron_id} THEN
|
||||
IF new_job_cron_id IS DISTINCT FROM (OLD.{job} ->> '{cron_id}')::integer AND new_job_cron_id IS DISTINCT FROM NEW.{cron_id} THEN
|
||||
NEW.{cron_id} = new_job_cron_id;
|
||||
END IF;
|
||||
IF new_job_task_type != (OLD.{job} ->> '{task_type}')::text AND new_job_task_type != NEW.{task_type} THEN
|
||||
IF new_job_task_type IS DISTINCT FROM (OLD.{job} ->> '{task_type}')::text AND new_job_task_type IS DISTINCT FROM NEW.{task_type} THEN
|
||||
NEW.{task_type} = new_job_task_type;
|
||||
END IF;
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;"#,
|
||||
apalis_schema = ApalisSchema::Schema.to_string(),
|
||||
job = ApalisJobs::Job.to_string(),
|
||||
subscriber_id = ApalisJobs::SubscriberId.to_string(),
|
||||
subscription_id = ApalisJobs::SubscriptionId.to_string(),
|
||||
@ -381,7 +382,7 @@ impl MigrationTrait for Migration {
|
||||
let db = manager.get_connection();
|
||||
|
||||
db.execute_unprepared(&format!(
|
||||
r#"CREATE OR REPLACE FUNCTION {SETUP_APALIS_JOBS_EXTRA_FOREIGN_KEYS_FUNCTION_NAME}() RETURNS trigger AS $$
|
||||
r#"CREATE OR REPLACE FUNCTION {apalis_schema}.{SETUP_APALIS_JOBS_EXTRA_FOREIGN_KEYS_FUNCTION_NAME}() RETURNS trigger AS $$
|
||||
DECLARE
|
||||
new_job_subscriber_id integer;
|
||||
new_job_subscription_id integer;
|
||||
@ -390,18 +391,19 @@ impl MigrationTrait for Migration {
|
||||
new_job_subscriber_id = (NEW.{job} ->> '{subscriber_id}')::integer;
|
||||
new_job_subscription_id = (NEW.{job} ->> '{subscription_id}')::integer;
|
||||
new_job_task_type = (NEW.{job} ->> '{task_type}')::text;
|
||||
IF new_job_subscriber_id != (OLD.{job} ->> '{subscriber_id}')::integer AND new_job_subscriber_id != NEW.{subscriber_id} THEN
|
||||
IF new_job_subscriber_id IS DISTINCT FROM (OLD.{job} ->> '{subscriber_id}')::integer AND new_job_subscriber_id IS DISTINCT FROM NEW.{subscriber_id} THEN
|
||||
NEW.{subscriber_id} = new_job_subscriber_id;
|
||||
END IF;
|
||||
IF new_job_subscription_id != (OLD.{job} ->> '{subscription_id}')::integer AND new_job_subscription_id != NEW.{subscription_id} THEN
|
||||
IF new_job_subscription_id IS DISTINCT FROM (OLD.{job} ->> '{subscription_id}')::integer AND new_job_subscription_id IS DISTINCT FROM NEW.{subscription_id} THEN
|
||||
NEW.{subscription_id} = new_job_subscription_id;
|
||||
END IF;
|
||||
IF new_job_task_type != (OLD.{job} ->> '{task_type}')::text AND new_job_task_type != NEW.{task_type} THEN
|
||||
IF new_job_task_type IS DISTINCT FROM (OLD.{job} ->> '{task_type}')::text AND new_job_task_type IS DISTINCT FROM NEW.{task_type} THEN
|
||||
NEW.{task_type} = new_job_task_type;
|
||||
END IF;
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;"#,
|
||||
apalis_schema = ApalisSchema::Schema.to_string(),
|
||||
job = ApalisJobs::Job.to_string(),
|
||||
subscriber_id = ApalisJobs::SubscriberId.to_string(),
|
||||
subscription_id = ApalisJobs::SubscriptionId.to_string(),
|
||||
|
Loading…
Reference in New Issue
Block a user