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