From bb2964345acf2cbcbe9a71869247a63ff5fe7a29 Mon Sep 17 00:00:00 2001 From: Kenneth Skovhede Date: Mon, 4 Apr 2016 22:47:16 +0200 Subject: [PATCH] Improved the consistency check to also find entries with no blocksetentries --- .../Library/Main/Database/LocalDatabase.cs | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/Duplicati/Library/Main/Database/LocalDatabase.cs b/Duplicati/Library/Main/Database/LocalDatabase.cs index 2b467c995..e281daf09 100644 --- a/Duplicati/Library/Main/Database/LocalDatabase.cs +++ b/Duplicati/Library/Main/Database/LocalDatabase.cs @@ -703,12 +703,33 @@ namespace Duplicati.Library.Main.Database public void VerifyConsistency(System.Data.IDbTransaction transaction, long blocksize, long hashsize) { - using (var cmd = m_connection.CreateCommand()) + using (var cmd = m_connection.CreateCommand(transaction)) { - cmd.Transaction = transaction; - // Calculate the lengths for each blockset - var combinedLengths = @"SELECT ""BlocksetEntry"".""BlocksetID"" AS ""BlocksetID"", SUM(""Block"".""Size"") AS ""CalcLen"", ""Blockset"".""Length"" AS ""Length"" FROM ""Block"", ""BlocksetEntry"", ""Blockset"" WHERE ""BlocksetEntry"".""BlockID"" = ""Block"".""ID"" AND ""BlocksetEntry"".""BlocksetID"" = ""Blockset"".""ID"" GROUP BY ""BlocksetEntry"".""BlocksetID"""; + var combinedLengths = @" +SELECT + ""A"".""ID"" AS ""BlocksetID"", + IFNULL(""B"".""CalcLen"", 0) AS ""CalcLen"", + ""A"".""Length"" +FROM + ""Blockset"" A +LEFT OUTER JOIN + ( + SELECT + ""BlocksetEntry"".""BlocksetID"", + SUM(""Block"".""Size"") AS ""CalcLen"" + FROM + ""BlocksetEntry"" + LEFT OUTER JOIN + ""Block"" + ON + ""Block"".""ID"" = ""BlocksetEntry"".""BlockID"" + GROUP BY ""BlocksetEntry"".""BlocksetID"" + ) B +ON + ""A"".""ID"" = ""B"".""BlocksetID"" + +"; // For each blockset with wrong lengths, fetch the file path var reportDetails = @"SELECT ""CalcLen"", ""Length"", ""A"".""BlocksetID"", ""File"".""Path"" FROM (" + combinedLengths + @") A, ""File"" WHERE ""A"".""BlocksetID"" = ""File"".""BlocksetID"" AND ""A"".""CalcLen"" != ""A"".""Length"" ";