Skip to content

Commit 9f9569c

Browse files
fix: schema check (immich-app#26543)
1 parent fae0527 commit 9f9569c

File tree

3 files changed

+43
-2
lines changed

3 files changed

+43
-2
lines changed

server/src/repositories/database.repository.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { ConfigRepository } from 'src/repositories/config.repository';
2222
import { LoggingRepository } from 'src/repositories/logging.repository';
2323
import 'src/schema'; // make sure all schema definitions are imported for schemaFromCode
2424
import { DB } from 'src/schema';
25+
import { immich_uuid_v7 } from 'src/schema/functions';
2526
import { ExtensionVersion, VectorExtension, VectorUpdateResult } from 'src/types';
2627
import { vectorIndexQuery } from 'src/utils/database';
2728
import { isValidInteger } from 'src/validation';
@@ -288,7 +289,11 @@ export class DatabaseRepository {
288289
}
289290

290291
async getSchemaDrift() {
291-
const source = schemaFromCode({ overrides: true, namingStrategy: 'default' });
292+
const source = schemaFromCode({
293+
overrides: true,
294+
namingStrategy: 'default',
295+
uuidFunction: (version) => (version === 7 ? `${immich_uuid_v7.name}()` : 'uuid_generate_v4()'),
296+
});
292297
const { database } = this.configRepository.getEnv();
293298
const target = await schemaFromDatabase({ connection: database.config });
294299

server/src/schema/functions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ export const asset_edit_delete = registerFunction({
280280
UPDATE asset
281281
SET "isEdited" = false
282282
FROM deleted_edit
283-
WHERE asset.id = deleted_edit."assetId" AND asset."isEdited"
283+
WHERE asset.id = deleted_edit."assetId" AND asset."isEdited"
284284
AND NOT EXISTS (SELECT FROM asset_edit edit WHERE edit."assetId" = asset.id);
285285
RETURN NULL;
286286
END
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { Kysely, sql } from 'kysely';
2+
3+
export async function up(db: Kysely<any>): Promise<void> {
4+
await sql`CREATE OR REPLACE FUNCTION asset_edit_delete()
5+
RETURNS TRIGGER
6+
LANGUAGE PLPGSQL
7+
AS $$
8+
BEGIN
9+
UPDATE asset
10+
SET "isEdited" = false
11+
FROM deleted_edit
12+
WHERE asset.id = deleted_edit."assetId" AND asset."isEdited"
13+
AND NOT EXISTS (SELECT FROM asset_edit edit WHERE edit."assetId" = asset.id);
14+
RETURN NULL;
15+
END
16+
$$;`.execute(db);
17+
await sql`UPDATE "migration_overrides" SET "value" = '{"type":"function","name":"asset_edit_delete","sql":"CREATE OR REPLACE FUNCTION asset_edit_delete()\\n RETURNS TRIGGER\\n LANGUAGE PLPGSQL\\n AS $$\\n BEGIN\\n UPDATE asset\\n SET \\"isEdited\\" = false\\n FROM deleted_edit\\n WHERE asset.id = deleted_edit.\\"assetId\\" AND asset.\\"isEdited\\"\\n AND NOT EXISTS (SELECT FROM asset_edit edit WHERE edit.\\"assetId\\" = asset.id);\\n RETURN NULL;\\n END\\n $$;"}'::jsonb WHERE "name" = 'function_asset_edit_delete';`.execute(db);
18+
}
19+
20+
export async function down(db: Kysely<any>): Promise<void> {
21+
await sql`CREATE OR REPLACE FUNCTION public.asset_edit_delete()
22+
RETURNS trigger
23+
LANGUAGE plpgsql
24+
AS $function$
25+
BEGIN
26+
UPDATE asset
27+
SET "isEdited" = false
28+
FROM deleted_edit
29+
WHERE asset.id = deleted_edit."assetId" AND asset."isEdited"
30+
AND NOT EXISTS (SELECT FROM asset_edit edit WHERE edit."assetId" = asset.id);
31+
RETURN NULL;
32+
END
33+
$function$
34+
`.execute(db);
35+
await sql`UPDATE "migration_overrides" SET "value" = '{"sql":"CREATE OR REPLACE FUNCTION asset_edit_delete()\\n RETURNS TRIGGER\\n LANGUAGE PLPGSQL\\n AS $$\\n BEGIN\\n UPDATE asset\\n SET \\"isEdited\\" = false\\n FROM deleted_edit\\n WHERE asset.id = deleted_edit.\\"assetId\\" AND asset.\\"isEdited\\" \\n AND NOT EXISTS (SELECT FROM asset_edit edit WHERE edit.\\"assetId\\" = asset.id);\\n RETURN NULL;\\n END\\n $$;","name":"asset_edit_delete","type":"function"}'::jsonb WHERE "name" = 'function_asset_edit_delete';`.execute(db);
36+
}

0 commit comments

Comments
 (0)