Merge branch 'Handle_DB_Upgrade/Migration' into Release0.2
This commit is contained in:
commit
a60a637877
@ -0,0 +1,13 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace SQLiteRepository
|
||||||
|
{
|
||||||
|
class DbVersion
|
||||||
|
{
|
||||||
|
public string VersionNumber { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,6 +1,6 @@
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
using SQLiteRepository.Properties;
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
// General Information about an assembly is controlled through the following
|
||||||
// set of attributes. Change these attribute values to modify the information
|
// set of attributes. Change these attribute values to modify the information
|
||||||
@ -32,5 +32,14 @@ using System.Runtime.InteropServices;
|
|||||||
// You can specify all the values or you can default the Build and Revision Numbers
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
// by using the '*' as shown below:
|
// by using the '*' as shown below:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("0.1.5.0")]
|
[assembly: AssemblyVersion(AssemblyInfo.ASSEMBLY_VERSION)]
|
||||||
[assembly: AssemblyFileVersion("0.1.5.0")]
|
[assembly: AssemblyFileVersion(AssemblyInfo.ASSEMBLY_FILE_VERSION)]
|
||||||
|
|
||||||
|
namespace SQLiteRepository.Properties
|
||||||
|
{
|
||||||
|
internal static class AssemblyInfo
|
||||||
|
{
|
||||||
|
internal const string ASSEMBLY_VERSION = "0.2.0.0";
|
||||||
|
internal const string ASSEMBLY_FILE_VERSION = "0.2.0.0";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -8,6 +8,7 @@ using System.Reflection;
|
|||||||
using Interfaces;
|
using Interfaces;
|
||||||
using SQLite.Net;
|
using SQLite.Net;
|
||||||
using SQLite.Net.Platform.Win32;
|
using SQLite.Net.Platform.Win32;
|
||||||
|
using SQLiteRepository.Properties;
|
||||||
|
|
||||||
namespace SQLiteRepository
|
namespace SQLiteRepository
|
||||||
{
|
{
|
||||||
@ -32,7 +33,68 @@ namespace SQLiteRepository
|
|||||||
_connection.CreateTable<TimeLogDb>();
|
_connection.CreateTable<TimeLogDb>();
|
||||||
_connection.CreateTable<GroupDb>();
|
_connection.CreateTable<GroupDb>();
|
||||||
_connection.CreateTable<UserGroupJoinDb>();
|
_connection.CreateTable<UserGroupJoinDb>();
|
||||||
|
_connection.CreateTable<DbVersion>();
|
||||||
_logger.Trace("Initialised SQLite Repository");
|
_logger.Trace("Initialised SQLite Repository");
|
||||||
|
_logger.Trace("Checking For Upgrades");
|
||||||
|
CheckForDbUpgrade();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CheckForDbUpgrade()
|
||||||
|
{
|
||||||
|
var data = _connection.Query<DbVersion>("select * from DbVersion");
|
||||||
|
if (!data.Any())
|
||||||
|
{
|
||||||
|
//Pre-Upgrade database, need upgrading
|
||||||
|
_logger.Trace("Pre version 0.2 RC database found, performing update..");
|
||||||
|
ExecuteUpgradeFromVersion("0.1"); //execute 0.2 upgrade scripts onwards.
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var installedVersion = new Version(data.First().VersionNumber);
|
||||||
|
var currentVersion = new Version(AssemblyInfo.ASSEMBLY_VERSION);
|
||||||
|
if (currentVersion.CompareTo(installedVersion) > 0) //greater than 0 - current version is newer
|
||||||
|
{
|
||||||
|
_logger.Trace("Installed Database Version: {0} is older than current version {1}");
|
||||||
|
ExecuteUpgradeFromVersion(installedVersion.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ExecuteUpgradeFromVersion(string installedVersion)
|
||||||
|
{
|
||||||
|
const string PREFIX = "SQLiteRepository.UpgradeScripts.";
|
||||||
|
var instVers = new Version(installedVersion);
|
||||||
|
//so we have established that each script for upgrade will be <version>.sql, so now start at lowest version and work up!
|
||||||
|
var assembly = Assembly.GetExecutingAssembly();
|
||||||
|
var upgradeScripts = assembly.GetManifestResourceNames()
|
||||||
|
.Where(x=>x.StartsWith(PREFIX))
|
||||||
|
.OrderBy(x=>new Version(Path.GetFileNameWithoutExtension(x.Replace(PREFIX, ""))))
|
||||||
|
.Where(x =>
|
||||||
|
{
|
||||||
|
var scriptVersion = new Version(Path.GetFileNameWithoutExtension(x.Replace(PREFIX, ""))).CompareTo(instVers);
|
||||||
|
return scriptVersion > 0;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.ToList();
|
||||||
|
//now have an ordered list of upgrade script files, so execute in order!
|
||||||
|
foreach (var upgradeScript in upgradeScripts)
|
||||||
|
{
|
||||||
|
using (var stream = assembly.GetManifestResourceStream(upgradeScript))
|
||||||
|
using(var str = new StreamReader(stream))
|
||||||
|
{
|
||||||
|
var script = str.ReadToEnd();
|
||||||
|
_logger.Trace("Executing upgrade script with name: {0}", upgradeScript);
|
||||||
|
_connection.Execute(script);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SetDbVersion(AssemblyInfo.ASSEMBLY_VERSION);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetDbVersion(string vers)
|
||||||
|
{
|
||||||
|
_connection.DeleteAll<DbVersion>();
|
||||||
|
_connection.Insert(new DbVersion {VersionNumber = vers});
|
||||||
|
_logger.Trace("Set Database version to: {0}", vers);
|
||||||
}
|
}
|
||||||
|
|
||||||
public UserList GetUsers(int pageNumber = -1, int pageSize = -1, int groupId = -1)
|
public UserList GetUsers(int pageNumber = -1, int pageSize = -1, int groupId = -1)
|
||||||
|
|||||||
@ -77,7 +77,9 @@
|
|||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="AssemblyVersionInfo.cs" />
|
||||||
<Compile Include="CardUniqueId.cs" />
|
<Compile Include="CardUniqueId.cs" />
|
||||||
|
<Compile Include="DBVersion.cs" />
|
||||||
<Compile Include="GroupDb.cs" />
|
<Compile Include="GroupDb.cs" />
|
||||||
<Compile Include="LogSourceDb.cs" />
|
<Compile Include="LogSourceDb.cs" />
|
||||||
<Compile Include="SQLiteRepository.cs" />
|
<Compile Include="SQLiteRepository.cs" />
|
||||||
@ -102,6 +104,12 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="UpgradeScripts\0.2.sql" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="UpgradeScripts\0.3.sql" />
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<Import Project="..\packages\System.Data.SQLite.Core.1.0.104.0\build\net451\System.Data.SQLite.Core.targets" Condition="Exists('..\packages\System.Data.SQLite.Core.1.0.104.0\build\net451\System.Data.SQLite.Core.targets')" />
|
<Import Project="..\packages\System.Data.SQLite.Core.1.0.104.0\build\net451\System.Data.SQLite.Core.targets" Condition="Exists('..\packages\System.Data.SQLite.Core.1.0.104.0\build\net451\System.Data.SQLite.Core.targets')" />
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
|
|||||||
@ -0,0 +1 @@
|
|||||||
|
insert into GroupDb values ((select max(groupId) from GroupDb)+1,'Archived',0)
|
||||||
Loading…
Reference in New Issue
Block a user