mirror of
https://github.com/immich-app/immich
synced 2025-11-14 17:36:12 +00:00
fix: schema migration fails
This commit is contained in:
parent
5d2b2008f8
commit
9dc2e73e38
2 changed files with 12 additions and 13 deletions
|
|
@ -1,12 +1,6 @@
|
||||||
import { Kysely, sql } from 'kysely';
|
import { Kysely, sql } from 'kysely';
|
||||||
|
|
||||||
export async function up(db: Kysely<any>): Promise<void> {
|
export async function up(db: Kysely<any>): Promise<void> {
|
||||||
await sql`ALTER TABLE "activity" DROP CONSTRAINT "activity_like_check";`.execute(db);
|
|
||||||
await sql`ALTER TABLE "activity" ADD "assetIds" uuid[];`.execute(db);
|
|
||||||
await sql`CREATE INDEX "activity_assetIds_idx" ON "activity" ("assetIds");`.execute(db);
|
|
||||||
await sql`ALTER TABLE "activity" ADD CONSTRAINT "activity_check" CHECK ((comment IS NULL AND "isLiked" = true) OR (comment IS NOT NULL AND "isLiked" = false) OR (comment IS NULL AND "isLiked" = false AND "assetIds" IS NOT NULL));`.execute(
|
|
||||||
db,
|
|
||||||
);
|
|
||||||
await sql`CREATE OR REPLACE FUNCTION activity_assetids_update_on_albumasset_delete()
|
await sql`CREATE OR REPLACE FUNCTION activity_assetids_update_on_albumasset_delete()
|
||||||
RETURNS TRIGGER
|
RETURNS TRIGGER
|
||||||
LANGUAGE PLPGSQL
|
LANGUAGE PLPGSQL
|
||||||
|
|
@ -22,22 +16,32 @@ export async function up(db: Kysely<any>): Promise<void> {
|
||||||
RETURN NULL;
|
RETURN NULL;
|
||||||
END;
|
END;
|
||||||
$$;`.execute(db);
|
$$;`.execute(db);
|
||||||
|
await sql`ALTER TABLE "activity" DROP CONSTRAINT "activity_like_check";`.execute(db);
|
||||||
|
await sql`ALTER TABLE "activity" ADD "assetIds" uuid[];`.execute(db);
|
||||||
await sql`CREATE OR REPLACE TRIGGER "activity_assetids_update_on_albumasset_delete"
|
await sql`CREATE OR REPLACE TRIGGER "activity_assetids_update_on_albumasset_delete"
|
||||||
AFTER DELETE ON "album_asset"
|
AFTER DELETE ON "album_asset"
|
||||||
REFERENCING OLD TABLE AS "old"
|
REFERENCING OLD TABLE AS "old"
|
||||||
FOR EACH STATEMENT
|
FOR EACH STATEMENT
|
||||||
WHEN (pg_trigger_depth() <= 1)
|
WHEN (pg_trigger_depth() <= 1)
|
||||||
EXECUTE FUNCTION activity_assetids_update_on_albumasset_delete();`.execute(db);
|
EXECUTE FUNCTION activity_assetids_update_on_albumasset_delete();`.execute(db);
|
||||||
await sql`INSERT INTO "migration_overrides" ("name", "value") VALUES ('function_activity_assetids_update_on_albumasset_delete', '{"type":"function","name":"activity_assetids_update_on_albumasset_delete","sql":"CREATE OR REPLACE FUNCTION activity_assetids_update_on_albumasset_delete()\\n RETURNS TRIGGER\\n LANGUAGE PLPGSQL\\n AS $$\\n BEGIN\\n UPDATE activity\\n SET \\"assetIds\\" = array_remove(\\"assetIds\\", OLD.\\"assetsId\\")\\n WHERE \\"albumId\\" = OLD.\\"albumsId\\" AND \\"assetIds\\" IS NOT NULL AND OLD.\\"assetsId\\" = ANY(\\"assetIds\\");\\n RETURN NULL;\\n END;\\n $$;"}'::jsonb);`.execute(
|
await sql`INSERT INTO "migration_overrides" ("name", "value") VALUES ('function_activity_assetids_update_on_albumasset_delete', '{"type":"function","name":"activity_assetids_update_on_albumasset_delete","sql":"CREATE OR REPLACE FUNCTION activity_assetids_update_on_albumasset_delete()\\n RETURNS TRIGGER\\n LANGUAGE PLPGSQL\\n AS $$\\n DECLARE\\n r RECORD;\\n BEGIN\\n FOR r IN SELECT \\"albumsId\\", \\"assetsId\\" FROM old LOOP\\n UPDATE activity\\n SET \\"assetIds\\" = array_remove(\\"assetIds\\", r.\\"assetsId\\")\\n WHERE \\"albumId\\" = r.\\"albumsId\\" AND \\"assetIds\\" IS NOT NULL AND r.\\"assetsId\\" = ANY(\\"assetIds\\");\\n END LOOP;\\n RETURN NULL;\\n END;\\n $$;"}'::jsonb);`.execute(
|
||||||
db,
|
db,
|
||||||
);
|
);
|
||||||
await sql`INSERT INTO "migration_overrides" ("name", "value") VALUES ('trigger_activity_assetids_update_on_albumasset_delete', '{"type":"trigger","name":"activity_assetids_update_on_albumasset_delete","sql":"CREATE OR REPLACE TRIGGER \\"activity_assetids_update_on_albumasset_delete\\"\\n AFTER DELETE ON \\"album_asset\\"\\n REFERENCING OLD TABLE AS \\"old\\"\\n FOR EACH STATEMENT\\n WHEN (pg_trigger_depth() <= 1)\\n EXECUTE FUNCTION activity_assetids_update_on_albumasset_delete();"}'::jsonb);`.execute(
|
await sql`INSERT INTO "migration_overrides" ("name", "value") VALUES ('trigger_activity_assetids_update_on_albumasset_delete', '{"type":"trigger","name":"activity_assetids_update_on_albumasset_delete","sql":"CREATE OR REPLACE TRIGGER \\"activity_assetids_update_on_albumasset_delete\\"\\n AFTER DELETE ON \\"album_asset\\"\\n REFERENCING OLD TABLE AS \\"old\\"\\n FOR EACH STATEMENT\\n WHEN (pg_trigger_depth() <= 1)\\n EXECUTE FUNCTION activity_assetids_update_on_albumasset_delete();"}'::jsonb);`.execute(
|
||||||
db,
|
db,
|
||||||
);
|
);
|
||||||
|
await sql`ALTER TABLE "activity" ADD CONSTRAINT "activity_check" CHECK ((comment IS NULL AND "isLiked" = true) OR (comment IS NOT NULL AND "isLiked" = false) OR (comment IS NULL AND "isLiked" = false AND "assetIds" IS NOT NULL));`.execute(
|
||||||
|
db,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function down(db: Kysely<any>): Promise<void> {
|
export async function down(db: Kysely<any>): Promise<void> {
|
||||||
|
await sql`ALTER TABLE "activity" DROP CONSTRAINT "activity_check";`.execute(db);
|
||||||
await sql`DROP TRIGGER "activity_assetids_update_on_albumasset_delete" ON "album_asset";`.execute(db);
|
await sql`DROP TRIGGER "activity_assetids_update_on_albumasset_delete" ON "album_asset";`.execute(db);
|
||||||
|
await sql`ALTER TABLE "activity" ADD CONSTRAINT "activity_like_check" CHECK (((((comment IS NULL) AND ("isLiked" = true)) OR ((comment IS NOT NULL) AND ("isLiked" = false)))));`.execute(
|
||||||
|
db,
|
||||||
|
);
|
||||||
|
await sql`ALTER TABLE "activity" DROP COLUMN "assetIds";`.execute(db);
|
||||||
await sql`DROP FUNCTION activity_assetids_update_on_albumasset_delete;`.execute(db);
|
await sql`DROP FUNCTION activity_assetids_update_on_albumasset_delete;`.execute(db);
|
||||||
await sql`DELETE FROM "migration_overrides" WHERE "name" = 'function_activity_assetids_update_on_albumasset_delete';`.execute(
|
await sql`DELETE FROM "migration_overrides" WHERE "name" = 'function_activity_assetids_update_on_albumasset_delete';`.execute(
|
||||||
db,
|
db,
|
||||||
|
|
@ -45,10 +49,4 @@ export async function down(db: Kysely<any>): Promise<void> {
|
||||||
await sql`DELETE FROM "migration_overrides" WHERE "name" = 'trigger_activity_assetids_update_on_albumasset_delete';`.execute(
|
await sql`DELETE FROM "migration_overrides" WHERE "name" = 'trigger_activity_assetids_update_on_albumasset_delete';`.execute(
|
||||||
db,
|
db,
|
||||||
);
|
);
|
||||||
await sql`ALTER TABLE "activity" DROP CONSTRAINT "activity_check";`.execute(db);
|
|
||||||
await sql`DROP INDEX "activity_assetIds_idx";`.execute(db);
|
|
||||||
await sql`ALTER TABLE "activity" DROP COLUMN "assetIds";`.execute(db);
|
|
||||||
await sql`ALTER TABLE "activity" ADD CONSTRAINT "activity_like_check" CHECK (((((comment IS NULL) AND ("isLiked" = true)) OR ((comment IS NOT NULL) AND ("isLiked" = false)))));`.execute(
|
|
||||||
db,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
@ -55,6 +55,7 @@ export class ActivityTable {
|
||||||
@ForeignKeyColumn(() => AssetTable, { onDelete: 'CASCADE', onUpdate: 'CASCADE', nullable: true })
|
@ForeignKeyColumn(() => AssetTable, { onDelete: 'CASCADE', onUpdate: 'CASCADE', nullable: true })
|
||||||
assetId!: string | null;
|
assetId!: string | null;
|
||||||
|
|
||||||
|
@Column({ array: true, type: 'uuid', default: null })
|
||||||
assetIds!: string[] | null;
|
assetIds!: string[] | null;
|
||||||
|
|
||||||
@Column({ type: 'text', default: null })
|
@Column({ type: 'text', default: null })
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue