ソースを参照

Merge pull request #59 from ente-io/fix_duplicate_files

Vishnu Mohandas 3 年 前
コミット
d4a4d07678
1 ファイル変更24 行追加0 行削除
  1. 24 0
      lib/db/files_db.dart

+ 24 - 0
lib/db/files_db.dart

@@ -68,6 +68,7 @@ class FilesDB {
     ...addIndices(),
     ...addMetadataColumns(),
     ...addMagicMetadataColumns(),
+    ...addUniqueConstraintOnCollectionFiles(),
   ];
 
   final dbConfig = MigrationConfig(
@@ -252,6 +253,29 @@ class FilesDB {
     ];
   }
 
+  static List<String> addUniqueConstraintOnCollectionFiles() {
+    return [
+      '''
+      DELETE from $table where ($columnCollectionID, $columnUploadedFileID) IN 
+      (SELECT $columnCollectionID, $columnUploadedFileID from $table WHERE 
+        $columnCollectionID is not NULL AND $columnUploadedFileID is NOT NULL
+        AND $columnCollectionID != -1 AND $columnUploadedFileID  != -1
+        GROUP BY $columnCollectionID, $columnUploadedFileID HAVING count(*) > 1)
+      AND  ($columnCollectionID, $columnUploadedFileID,$columnGeneratedID) NOT IN 
+      (SELECT $columnCollectionID, $columnUploadedFileID, max($columnGeneratedID)
+       from $table WHERE 
+       $columnCollectionID is not NULL AND $columnUploadedFileID is NOT NULL
+       AND $columnCollectionID != -1 AND $columnUploadedFileID  != -1 GROUP BY 
+       $columnCollectionID, $columnUploadedFileID HAVING count(*) > 1);
+      ''',
+      '''
+      CREATE UNIQUE INDEX cid_uid ON $table ($columnCollectionID, $columnUploadedFileID) 
+      WHERE $columnCollectionID is not NULL AND $columnUploadedFileID is not NULL
+      AND $columnCollectionID != -1 AND $columnUploadedFileID  != -1;
+      '''
+    ];
+  }
+
   Future<void> clearTable() async {
     final db = await instance.database;
     await db.delete(table);