From 5768eeb1fe2be7db6a002e713affd55c08cfbb33 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Wed, 19 Mar 2025 14:07:58 +0530 Subject: [PATCH] Use trigger instead of fk to avoid redundant deletion --- mobile/lib/db/local/db.dart | 4 +-- mobile/lib/db/local/schema.dart | 52 ++++++++++++++++++++++++--------- 2 files changed, 41 insertions(+), 15 deletions(-) diff --git a/mobile/lib/db/local/db.dart b/mobile/lib/db/local/db.dart index a169a78dfe..ef75d3564d 100644 --- a/mobile/lib/db/local/db.dart +++ b/mobile/lib/db/local/db.dart @@ -12,7 +12,7 @@ import "package:photos/log/devlog.dart"; import "package:sqlite_async/sqlite_async.dart"; class LocalDB with SqlDbBase { - static const _databaseName = "local_2.db"; + static const _databaseName = "local_3.db"; static const _batchInsertMaxCount = 1000; static const _smallTableBatchInsertMaxCount = 5000; late final SqliteDatabase _sqliteDB; @@ -101,7 +101,7 @@ class LocalDB with SqlDbBase { ); } }); - + debugPrint( '$runtimeType insertPathToAssetIDs $pairCount complete in ' '${stopwatch.elapsed.inMilliseconds}ms for ' diff --git a/mobile/lib/db/local/schema.dart b/mobile/lib/db/local/schema.dart index 4244dbbaad..bb14ea09c0 100644 --- a/mobile/lib/db/local/schema.dart +++ b/mobile/lib/db/local/schema.dart @@ -30,25 +30,38 @@ class LocalDBMigration { ''', ''' CREATE TABLE metadata ( - id TEXT PRIMARY_KEY, + id TEXT PRIMARY KEY, hash TEXT NOT NULL, created_at INTEGER NOT NULL, modified_at INTEGER NOT NULL, latitude REAL, - longitude REAL, - PRIMARY KEY (id), - FOREIGN KEY (id) REFERENCES assets (id) ON DELETE CASCADE + longitude REAL ); ''', ''' + CREATE TRIGGER delete_metadata + AFTER DELETE ON assets + FOR EACH ROW + BEGIN + DELETE FROM metadata WHERE id = OLD.id; + END; + ''', + ''' CREATE TABLE old_hash ( id TEXT NOT NULL, hash TEXT NOT NULL, created_at INTEGER NOT NULL, - PRIMARY KEY (id, hash), - FOREIGN KEY (id) REFERENCES assets (id) ON DELETE CASCADE + PRIMARY KEY (id, hash) ); - ''', + ''', + ''' + CREATE TRIGGER delete_old_hash + AFTER DELETE ON assets + FOR EACH ROW + BEGIN + DELETE FROM old_hash WHERE id = OLD.id; + END; + ''', ''' CREATE TRIGGER update_old_hash AFTER UPDATE OF hash ON metadata @@ -72,18 +85,31 @@ class LocalDBMigration { CREATE TABLE device_path_assets ( path_id TEXT NOT NULL, asset_id TEXT NOT NULL, - PRIMARY KEY (path_id, asset_id), - FOREIGN KEY (path_id) REFERENCES device_path (path_id) ON DELETE CASCADE, - FOREIGN KEY (asset_id) REFERENCES assets (id) ON DELETE CASCADE + PRIMARY KEY (path_id, asset_id) ); ''', ''' + CREATE TRIGGER delete_device_path_assets + AFTER DELETE ON assets + FOR EACH ROW + BEGIN + DELETE FROM device_path_assets WHERE asset_id = OLD.id; + END; + ''', + ''' CREATE TABLE queue ( id TEXT NOT NULL, name TEXT NOT NULL, - PRIMARY KEY (id, name), - FOREIGN KEY (id) REFERENCES assets (id) ON DELETE CASCADE - ) + PRIMARY KEY (id, name) + ); + ''', + ''' + CREATE TRIGGER delete_queue + AFTER DELETE ON assets + FOR EACH ROW + BEGIN + DELETE FROM queue WHERE id = OLD.id; + END; ''', ];