mirror of
https://github.com/immich-app/immich.git
synced 2026-05-18 03:10:24 +03:00
fix: schema check (#26543)
This commit is contained in:
@@ -22,6 +22,7 @@ import { ConfigRepository } from 'src/repositories/config.repository';
|
|||||||
import { LoggingRepository } from 'src/repositories/logging.repository';
|
import { LoggingRepository } from 'src/repositories/logging.repository';
|
||||||
import 'src/schema'; // make sure all schema definitions are imported for schemaFromCode
|
import 'src/schema'; // make sure all schema definitions are imported for schemaFromCode
|
||||||
import { DB } from 'src/schema';
|
import { DB } from 'src/schema';
|
||||||
|
import { immich_uuid_v7 } from 'src/schema/functions';
|
||||||
import { ExtensionVersion, VectorExtension, VectorUpdateResult } from 'src/types';
|
import { ExtensionVersion, VectorExtension, VectorUpdateResult } from 'src/types';
|
||||||
import { vectorIndexQuery } from 'src/utils/database';
|
import { vectorIndexQuery } from 'src/utils/database';
|
||||||
import { isValidInteger } from 'src/validation';
|
import { isValidInteger } from 'src/validation';
|
||||||
@@ -288,7 +289,11 @@ export class DatabaseRepository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async getSchemaDrift() {
|
async getSchemaDrift() {
|
||||||
const source = schemaFromCode({ overrides: true, namingStrategy: 'default' });
|
const source = schemaFromCode({
|
||||||
|
overrides: true,
|
||||||
|
namingStrategy: 'default',
|
||||||
|
uuidFunction: (version) => (version === 7 ? `${immich_uuid_v7.name}()` : 'uuid_generate_v4()'),
|
||||||
|
});
|
||||||
const { database } = this.configRepository.getEnv();
|
const { database } = this.configRepository.getEnv();
|
||||||
const target = await schemaFromDatabase({ connection: database.config });
|
const target = await schemaFromDatabase({ connection: database.config });
|
||||||
|
|
||||||
|
|||||||
@@ -280,7 +280,7 @@ export const asset_edit_delete = registerFunction({
|
|||||||
UPDATE asset
|
UPDATE asset
|
||||||
SET "isEdited" = false
|
SET "isEdited" = false
|
||||||
FROM deleted_edit
|
FROM deleted_edit
|
||||||
WHERE asset.id = deleted_edit."assetId" AND asset."isEdited"
|
WHERE asset.id = deleted_edit."assetId" AND asset."isEdited"
|
||||||
AND NOT EXISTS (SELECT FROM asset_edit edit WHERE edit."assetId" = asset.id);
|
AND NOT EXISTS (SELECT FROM asset_edit edit WHERE edit."assetId" = asset.id);
|
||||||
RETURN NULL;
|
RETURN NULL;
|
||||||
END
|
END
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
import { Kysely, sql } from 'kysely';
|
||||||
|
|
||||||
|
export async function up(db: Kysely<any>): Promise<void> {
|
||||||
|
await sql`CREATE OR REPLACE FUNCTION asset_edit_delete()
|
||||||
|
RETURNS TRIGGER
|
||||||
|
LANGUAGE PLPGSQL
|
||||||
|
AS $$
|
||||||
|
BEGIN
|
||||||
|
UPDATE asset
|
||||||
|
SET "isEdited" = false
|
||||||
|
FROM deleted_edit
|
||||||
|
WHERE asset.id = deleted_edit."assetId" AND asset."isEdited"
|
||||||
|
AND NOT EXISTS (SELECT FROM asset_edit edit WHERE edit."assetId" = asset.id);
|
||||||
|
RETURN NULL;
|
||||||
|
END
|
||||||
|
$$;`.execute(db);
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function down(db: Kysely<any>): Promise<void> {
|
||||||
|
await sql`CREATE OR REPLACE FUNCTION public.asset_edit_delete()
|
||||||
|
RETURNS trigger
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
AS $function$
|
||||||
|
BEGIN
|
||||||
|
UPDATE asset
|
||||||
|
SET "isEdited" = false
|
||||||
|
FROM deleted_edit
|
||||||
|
WHERE asset.id = deleted_edit."assetId" AND asset."isEdited"
|
||||||
|
AND NOT EXISTS (SELECT FROM asset_edit edit WHERE edit."assetId" = asset.id);
|
||||||
|
RETURN NULL;
|
||||||
|
END
|
||||||
|
$function$
|
||||||
|
`.execute(db);
|
||||||
|
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);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user