From d13464ca2e05cd41b35278199c31d2f7f9667b2e Mon Sep 17 00:00:00 2001 From: Dan Date: Tue, 20 Feb 2024 16:30:38 +0100 Subject: [PATCH] Add possibility to delete backup file when upgrading database --- LiteDB/Engine/Engine/Recovery.cs | 5 +++-- LiteDB/Engine/Engine/Upgrade.cs | 2 +- LiteDB/Engine/EngineSettings.cs | 5 +++++ LiteDB/Engine/Services/RebuildService.cs | 11 +++++++++-- LiteDB/Engine/Structures/RebuildOptions.cs | 5 +++++ 5 files changed, 23 insertions(+), 5 deletions(-) diff --git a/LiteDB/Engine/Engine/Recovery.cs b/LiteDB/Engine/Engine/Recovery.cs index 261ce34a1..da7f96b9f 100644 --- a/LiteDB/Engine/Engine/Recovery.cs +++ b/LiteDB/Engine/Engine/Recovery.cs @@ -13,7 +13,7 @@ public partial class LiteEngine /// /// Recovery datafile using a rebuild process. Run only on "Open" database /// - private void Recovery(Collation collation) + private void Recovery(Collation collation, bool createBackup = true) { // run build service var rebuilder = new RebuildService(_settings); @@ -21,7 +21,8 @@ private void Recovery(Collation collation) { Collation = collation, Password = _settings.Password, - IncludeErrorReport = true + IncludeErrorReport = true, + CreateBackup = createBackup }; // run rebuild process diff --git a/LiteDB/Engine/Engine/Upgrade.cs b/LiteDB/Engine/Engine/Upgrade.cs index df6a44896..1827a77eb 100644 --- a/LiteDB/Engine/Engine/Upgrade.cs +++ b/LiteDB/Engine/Engine/Upgrade.cs @@ -34,7 +34,7 @@ private void TryUpgrade() } // run rebuild process - this.Recovery(_settings.Collation); + this.Recovery(_settings.Collation, _settings.CreateBackupOnUpgrade); } /// diff --git a/LiteDB/Engine/EngineSettings.cs b/LiteDB/Engine/EngineSettings.cs index d2bb96372..d13c4428c 100644 --- a/LiteDB/Engine/EngineSettings.cs +++ b/LiteDB/Engine/EngineSettings.cs @@ -66,6 +66,11 @@ public class EngineSettings /// public bool Upgrade { get; set; } = false; + /// + /// If a upgrade is made a backup database is created. + /// + public bool CreateBackupOnUpgrade { get; set; } = true; + /// /// Create new IStreamFactory for datafile /// diff --git a/LiteDB/Engine/Services/RebuildService.cs b/LiteDB/Engine/Services/RebuildService.cs index 74ebb7806..c34664c23 100644 --- a/LiteDB/Engine/Services/RebuildService.cs +++ b/LiteDB/Engine/Services/RebuildService.cs @@ -101,9 +101,16 @@ public long Rebuild(RebuildOptions options) // get difference size - return - new FileInfo(backupFilename).Length - + var diff = new FileInfo(backupFilename).Length - new FileInfo(_settings.Filename).Length; + + if (!options.CreateBackup) + { + // Delete the backup file + File.Delete(backupFilename); + } + + return diff; } /// diff --git a/LiteDB/Engine/Structures/RebuildOptions.cs b/LiteDB/Engine/Structures/RebuildOptions.cs index cc48e9c0a..20edf7112 100644 --- a/LiteDB/Engine/Structures/RebuildOptions.cs +++ b/LiteDB/Engine/Structures/RebuildOptions.cs @@ -26,6 +26,11 @@ public class RebuildOptions /// public Collation Collation { get; set; } = null; + /// + /// Should the rebuild create a backup + /// + public bool CreateBackup { get; set; } = true; + /// /// When set true, if any problem occurs in rebuild, a _rebuild_errors collection /// will contains all errors found