diff --git a/Duplicati/Library/Main/Database/LocalDatabase.cs b/Duplicati/Library/Main/Database/LocalDatabase.cs index 5b74c5137..6af983266 100644 --- a/Duplicati/Library/Main/Database/LocalDatabase.cs +++ b/Duplicati/Library/Main/Database/LocalDatabase.cs @@ -215,9 +215,25 @@ namespace Duplicati.Library.Main.Database get { using (var cmd = m_connection.CreateCommand()) - using (var rd = cmd.ExecuteReader(@"SELECT ""ID"", ""Timestamp"" FROM ""Fileset"" ORDER BY ""Timestamp"" DESC")) + using (var rd = cmd.ExecuteReader(@"SELECT ""ID"", ""IsFullBackup"", ""Timestamp"" FROM ""Fileset"" ORDER BY ""Timestamp"" DESC")) + { + var isFullBackupEncountered = false; while (rd.Read()) - yield return new KeyValuePair(rd.GetInt64(0), ParseFromEpochSeconds(rd.GetInt64(1)).ToLocalTime()); + { + var id = rd.GetInt64(0); + var isFullBackup = rd.GetInt32(1); + var timeStamp = ParseFromEpochSeconds(rd.GetInt64(2)).ToLocalTime(); + + if (isFullBackupEncountered && isFullBackup != BackupType.FULL_BACKUP) continue; + + yield return new KeyValuePair(id, timeStamp); + + if (!isFullBackupEncountered && isFullBackup == BackupType.FULL_BACKUP) + { + isFullBackupEncountered = true; + } + } + } } } @@ -576,7 +592,7 @@ namespace Duplicati.Library.Main.Database return false; } var isFullBackup = rd.GetInt32(0); - return isFullBackup == 1; + return isFullBackup == BackupType.FULL_BACKUP; } } } @@ -1537,5 +1553,14 @@ ORDER BY return new KeyValuePair(string.Empty, path); } + + /// + /// Defines the backups types + /// + public static class BackupType + { + public const int PARTIAL_BACKUP = 0; + public const int FULL_BACKUP = 1; + } } }