[niepce] db: update triggers to properly delete files, folders and keywording



commit 64cec82794d8402a0bc190917ab2fbb74678e3fd
Author: Hubert Figuière <hub figuiere net>
Date:   Sun Oct 21 20:10:34 2018 -0400

    db: update triggers to properly delete files, folders and keywording

 src/engine/db/library.rs | 31 ++++++++++++++++++++++++++-----
 1 file changed, 26 insertions(+), 5 deletions(-)
---
diff --git a/src/engine/db/library.rs b/src/engine/db/library.rs
index 8f00e1c..aa3b1d0 100644
--- a/src/engine/db/library.rs
+++ b/src/engine/db/library.rs
@@ -47,7 +47,7 @@ pub enum Managed {
     YES = 1,
 }
 
-const DB_SCHEMA_VERSION: i32 = 8;
+const DB_SCHEMA_VERSION: i32 = 9;
 const DATABASENAME: &str = "niepcelibrary.db";
 
 #[derive(Debug)]
@@ -200,6 +200,15 @@ impl Library {
                  parent_id INTEGER)",
                 &[],
             ).unwrap();
+            // Version 9
+            conn.execute(
+                "CREATE TRIGGER folder_delete_trigger AFTER DELETE ON folders \
+                 BEGIN \
+                 DELETE FROM files WHERE parent_id = old.id; \
+                 END",
+                &[],
+            ).unwrap();
+            //
             let trash_type = libfolder::FolderVirtualType::TRASH as i32;
             conn.execute(
                 "insert into folders (name, locked, virtual, parent_id, path) \
@@ -230,12 +239,19 @@ impl Library {
                  UNIQUE(file_id, fsfile_id))",
                 &[],
             ).unwrap();
-            conn.execute(
-                "CREATE TRIGGER file_delete_trigger AFTER DELETE ON files \
+            conn.execute_batch(
+                "BEGIN; \
+                 CREATE TRIGGER pre_file_delete_trigger BEFORE DELETE ON files \
+                 BEGIN \
+                 DELETE FROM fsfiles WHERE id = old.main_file \
+                                    OR id = old.xmp_file OR id = old.jpeg_file; \
+                 END; \
+                 CREATE TRIGGER file_delete_trigger AFTER DELETE ON files \
                  BEGIN \
                  DELETE FROM sidecars WHERE file_id = old.id; \
-                 END",
-                &[],
+                 DELETE FROM keywording WHERE file_id = old.id; \
+                 END; \
+                 COMMIT;",
             ).unwrap();
             //
             conn.execute(
@@ -248,6 +264,11 @@ impl Library {
                  keyword_id INTEGER, UNIQUE(file_id, keyword_id))",
                 &[],
             ).unwrap();
+            conn.execute("CREATE TRIGGER keyword_delete_trigger AFTER DELETE ON keywords \
+                 BEGIN \
+                 DELETE FROM keywording WHERE keyword_id = old.id; \
+                 END;", &[],
+            ).unwrap();
             conn.execute(
                 "CREATE TABLE labels (id INTEGER PRIMARY KEY,\
                  name TEXT, color TEXT)",


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]