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