Index: Migration/Core/test/Migration.Core.Storage.Test/VersionedFileMigratorTest.cs =================================================================== diff -u -r1a90e7c188f16e5e075c39bee9c715bfddbc00f3 -r747809ca347ed4c7762c31b2bd643eac4d22b02d --- Migration/Core/test/Migration.Core.Storage.Test/VersionedFileMigratorTest.cs (.../VersionedFileMigratorTest.cs) (revision 1a90e7c188f16e5e075c39bee9c715bfddbc00f3) +++ Migration/Core/test/Migration.Core.Storage.Test/VersionedFileMigratorTest.cs (.../VersionedFileMigratorTest.cs) (revision 747809ca347ed4c7762c31b2bd643eac4d22b02d) @@ -19,6 +19,7 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System.IO; using Core.Common.TestUtil; using Migration.Scripts.Data; using NUnit.Framework; @@ -98,5 +99,30 @@ // Assert Assert.IsFalse(needsMigrade); } + + [Test] + public void Migrate_ValidFiles_SavesFileAtNewLocation() + { + // Setup + string sourceFilePath = TestHelper.GetTestDataPath(TestDataPath.Migration.Core.Storage, "Demo164.rtd"); + var fromVersionedFile = new VersionedFile(sourceFilePath); + + string targetFilePath = TestHelper.GetTestDataPath(TestDataPath.Migration.Core.Storage, Path.GetRandomFileName()); + + var migrator = new VersionedFileMigrator(); + + // Call + migrator.Migrate(fromVersionedFile, "17.1", targetFilePath); + + // Assert + if (File.Exists(targetFilePath)) + { + using (new FileDisposeHelper(targetFilePath)) {} + } + else + { + Assert.Fail($"File was not created at location '{targetFilePath}'"); + } + } } } \ No newline at end of file Index: Migration/Scripts/src/Migration.Scripts.Data/Resources/Migration_4_17.1.sql =================================================================== diff -u -r5aa0269872b446cab9f68c55dead92b6c5f49a64 -r747809ca347ed4c7762c31b2bd643eac4d22b02d --- Migration/Scripts/src/Migration.Scripts.Data/Resources/Migration_4_17.1.sql (.../Migration_4_17.1.sql) (revision 5aa0269872b446cab9f68c55dead92b6c5f49a64) +++ Migration/Scripts/src/Migration.Scripts.Data/Resources/Migration_4_17.1.sql (.../Migration_4_17.1.sql) (revision 747809ca347ed4c7762c31b2bd643eac4d22b02d) @@ -1,4 +1 @@ -INSERT INTO VersionEntity ([Version], - [Timestamp], - [FingerPrint]) - Values("17.1", '2017-01-18 08:08:10.8393231', "a") \ No newline at end of file +INSERT INTO VersionEntity Values(1, "17.1", '2017-01-18 08:08:10.8393231', "a"); \ No newline at end of file Index: Migration/Scripts/src/Migration.Scripts.Data/RingtoetsDatabaseFile.cs =================================================================== diff -u -r48d44fbda8f7ffb4c347aba4b4bb26d9c75487db -r747809ca347ed4c7762c31b2bd643eac4d22b02d --- Migration/Scripts/src/Migration.Scripts.Data/RingtoetsDatabaseFile.cs (.../RingtoetsDatabaseFile.cs) (revision 48d44fbda8f7ffb4c347aba4b4bb26d9c75487db) +++ Migration/Scripts/src/Migration.Scripts.Data/RingtoetsDatabaseFile.cs (.../RingtoetsDatabaseFile.cs) (revision 747809ca347ed4c7762c31b2bd643eac4d22b02d) @@ -30,11 +30,10 @@ /// public class RingtoetsDatabaseFile : IDisposable { + private readonly string filePath; private SQLiteConnection connection; private bool disposed; - private readonly string filePath; - /// /// Creates a new instance of the class. /// @@ -59,8 +58,7 @@ /// Creates the file if it does not exist. public void OpenDatabaseConnection() { - SQLiteConnection.CreateFile(filePath); - connection = new SQLiteConnection(SqLiteConnectionStringBuilder.BuildSqLiteConnectionString(filePath, false)); + connection = new SQLiteConnection(SqLiteConnectionStringBuilder.BuildSqLiteConnectionString(filePath)); connection.Open(); } @@ -100,9 +98,11 @@ { throw new ArgumentException(@"Parameter must be a valid database script.", nameof(query)); } - using (var command = connection.CreateCommand()) + using (var command = new SQLiteCommand(connection) { - command.CommandText = query; + CommandText = query + }) + { command.ExecuteNonQuery(); } } @@ -116,7 +116,9 @@ if (disposing) { + connection?.Close(); connection?.Dispose(); + connection = null; } disposed = true; } Index: Migration/Scripts/src/Migration.Scripts.Data/SqLiteConnectionStringBuilder.cs =================================================================== diff -u -r5aa0269872b446cab9f68c55dead92b6c5f49a64 -r747809ca347ed4c7762c31b2bd643eac4d22b02d --- Migration/Scripts/src/Migration.Scripts.Data/SqLiteConnectionStringBuilder.cs (.../SqLiteConnectionStringBuilder.cs) (revision 5aa0269872b446cab9f68c55dead92b6c5f49a64) +++ Migration/Scripts/src/Migration.Scripts.Data/SqLiteConnectionStringBuilder.cs (.../SqLiteConnectionStringBuilder.cs) (revision 747809ca347ed4c7762c31b2bd643eac4d22b02d) @@ -37,15 +37,15 @@ /// read-only access and writing will be disabled. /// A new connection string. /// Thrown when is null or empty (only whitespaces). - public static string BuildSqLiteConnectionString(string filePath, bool readOnly = true) + public static string BuildSqLiteConnectionString(string filePath, bool readOnly = false) { if (string.IsNullOrWhiteSpace(filePath)) { throw new ArgumentNullException(nameof(filePath), @"Cannot create a connection string without the path to the file to connect to."); } return new SQLiteConnectionStringBuilder { - FailIfMissing = true, + FailIfMissing = false, DataSource = filePath, ReadOnly = readOnly, ForeignKeys = true, Index: Migration/Scripts/test/Migration.Scripts.Data.Test/MigrationScriptTest.cs =================================================================== diff -u -r83fbfb9ccbeaef0916d3485f89d48fdae9b8eb1d -r747809ca347ed4c7762c31b2bd643eac4d22b02d --- Migration/Scripts/test/Migration.Scripts.Data.Test/MigrationScriptTest.cs (.../MigrationScriptTest.cs) (revision 83fbfb9ccbeaef0916d3485f89d48fdae9b8eb1d) +++ Migration/Scripts/test/Migration.Scripts.Data.Test/MigrationScriptTest.cs (.../MigrationScriptTest.cs) (revision 747809ca347ed4c7762c31b2bd643eac4d22b02d) @@ -20,8 +20,10 @@ // All rights reserved. using System; +using System.Data; using System.Data.SQLite; using System.IO; +using Core.Common.IO.Readers; using Core.Common.TestUtil; using Migration.Scripts.Data.Exceptions; using NUnit.Framework; @@ -127,5 +129,54 @@ Assert.IsTrue(File.Exists(upgradedFile.Location)); } } + + [Test] + public void Upgrade_ActualQueries_ExpectedProperties() + { + // Setup + var createScript = new CreateScript("2", "CREATE TABLE 'MigrationScript' ('Field' TEXT NOT NULL);"); + var upgradeScript = new UpgradeScript("1", "2", "INSERT INTO 'MigrationScript' SELECT '{0}';"); + var migrationScript = new MigrationScript(createScript, upgradeScript); + var versionedFile = new VersionedFile("c:\\file.ext"); + + // Call + VersionedFile upgradedFile = migrationScript.Upgrade(versionedFile); + + // Assert + Assert.IsNotNull(upgradedFile); + + Assert.IsTrue(File.Exists(upgradedFile.Location)); + using (var msdr = new MigrationScriptDatabaseReader(upgradedFile.Location)) + { + Assert.IsTrue(msdr.IsValueInserted(versionedFile.Location)); + } + using (new FileDisposeHelper(upgradedFile.Location)) {} + } + + private class MigrationScriptDatabaseReader : SqLiteDatabaseReaderBase + { + public MigrationScriptDatabaseReader(string filePath) : base(filePath) {} + + public bool IsValueInserted(string value) + { + const string query = "SELECT FIELD FROM 'MigrationScript';"; + try + { + using (IDataReader dataReader = CreateDataReader(query, null)) + { + if (!dataReader.Read()) + { + return false; + } + + return dataReader.Read("Field").Equals(value); + } + } + catch + { + return false; + } + } + } } } \ No newline at end of file