diff --git a/server/src/utils/database.ts b/server/src/utils/database.ts index 0f4d8775b6..e07c2120d5 100644 --- a/server/src/utils/database.ts +++ b/server/src/utils/database.ts @@ -109,8 +109,7 @@ export function withDefaultVisibility(qb: SelectQueryBuilder) } const selectExifInfo = (eb: AssetExpressionBuilder) => - eb.fn - .toJson(eb.table('asset_exif')) + sql`CASE WHEN asset_exif."assetId" IS NOT NULL THEN to_jsonb(asset_exif) || COALESCE((SELECT jsonb_build_object('videoCodec', "codecName", 'container', "formatName") FROM asset_video WHERE "assetId" = asset_exif."assetId" LIMIT 1), '{}'::jsonb) ELSE NULL END` .$castTo> | null>() .as('exifInfo'); @@ -122,7 +121,9 @@ export function withExif(qb: SelectQueryBuilder) { export function withExifInner(qb: SelectQueryBuilder) { return qb .innerJoin('asset_exif', 'asset.id', 'asset_exif.assetId') - .select((eb) => eb.fn.toJson(eb.table('asset_exif')).as('exifInfo')) + .select((eb) => + sql`CASE WHEN asset_exif."assetId" IS NOT NULL THEN to_jsonb(asset_exif) || COALESCE((SELECT jsonb_build_object('videoCodec', "codecName", 'container', "formatName") FROM asset_video WHERE "assetId" = asset_exif."assetId" LIMIT 1), '{}'::jsonb) ELSE NULL END`.as('exifInfo'), + ) .$narrowType<{ exifInfo: NotNull }>(); }