diff --git a/src/NuGet.Config b/src/NuGet.Config
index 7cfd5fb88..43cd33c3b 100644
--- a/src/NuGet.Config
+++ b/src/NuGet.Config
@@ -6,7 +6,6 @@
-
\ No newline at end of file
diff --git a/src/NzbDrone.Core.Test/Datastore/Migration/072_history_downloadIdFixture.cs b/src/NzbDrone.Core.Test/Datastore/Migration/072_history_downloadIdFixture.cs
index c976f9b10..4798b931a 100644
--- a/src/NzbDrone.Core.Test/Datastore/Migration/072_history_downloadIdFixture.cs
+++ b/src/NzbDrone.Core.Test/Datastore/Migration/072_history_downloadIdFixture.cs
@@ -2,10 +2,10 @@
using System.Collections.Generic;
using System.Linq;
using FluentAssertions;
-using FluentMigrator;
using NUnit.Framework;
using NzbDrone.Common.Serializer;
using NzbDrone.Core.Datastore.Migration;
+using NzbDrone.Core.Datastore.Migration.Framework;
using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test.Datastore.Migration
@@ -89,9 +89,9 @@ namespace NzbDrone.Core.Test.Datastore.Migration
history.DownloadId.Should().Be("123");
}
- private void InsertHistory(MigrationBase migrationBase, Dictionary data)
+ private void InsertHistory(NzbDroneMigrationBase migration, Dictionary data)
{
- migrationBase.Insert.IntoTable("History").Row(new
+ migration.Insert.IntoTable("History").Row(new
{
EpisodeId = 1,
SeriesId = 1,
diff --git a/src/NzbDrone.Core.Test/Datastore/SqliteSchemaDumperTests/SqliteSchemaDumperFixture.cs b/src/NzbDrone.Core.Test/Datastore/SqliteSchemaDumperTests/SqliteSchemaDumperFixture.cs
index f99e08254..9fb7be2b8 100644
--- a/src/NzbDrone.Core.Test/Datastore/SqliteSchemaDumperTests/SqliteSchemaDumperFixture.cs
+++ b/src/NzbDrone.Core.Test/Datastore/SqliteSchemaDumperTests/SqliteSchemaDumperFixture.cs
@@ -14,7 +14,7 @@ namespace NzbDrone.Core.Test.Datastore.SqliteSchemaDumperTests
[SetUp]
public void Setup()
{
- Subject = new SqliteSchemaDumper(null, null);
+ Subject = new SqliteSchemaDumper(null);
}
[TestCase(@"CREATE TABLE TestTable (MyId INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT)", "TestTable", "MyId")]
diff --git a/src/NzbDrone.Core.Test/Framework/DbTest.cs b/src/NzbDrone.Core.Test/Framework/DbTest.cs
index 1eb68a55f..773c8bb21 100644
--- a/src/NzbDrone.Core.Test/Framework/DbTest.cs
+++ b/src/NzbDrone.Core.Test/Framework/DbTest.cs
@@ -1,10 +1,10 @@
using System;
using System.Collections.Generic;
using System.Data.SQLite;
-using System.IO;
using System.Linq;
-using FluentMigrator.Runner;
using Marr.Data;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Logging.Abstractions;
using NUnit.Framework;
using NzbDrone.Core.Datastore;
using NzbDrone.Core.Datastore.Migration.Framework;
@@ -96,9 +96,14 @@ namespace NzbDrone.Core.Test.Framework
return testDb;
}
+ protected virtual void SetupLogging()
+ {
+ Mocker.SetConstant(NullLoggerProvider.Instance);
+ }
protected void SetupContainer()
{
WithTempAsAppPath();
+ SetupLogging();
Mocker.SetConstant(Mocker.Resolve());
Mocker.SetConstant(Mocker.Resolve());
diff --git a/src/NzbDrone.Core.Test/Framework/MigrationTest.cs b/src/NzbDrone.Core.Test/Framework/MigrationTest.cs
index 35f9a5ab2..417c59673 100644
--- a/src/NzbDrone.Core.Test/Framework/MigrationTest.cs
+++ b/src/NzbDrone.Core.Test/Framework/MigrationTest.cs
@@ -1,6 +1,6 @@
using System;
using FluentMigrator;
-using FluentMigrator.Runner;
+using Microsoft.Extensions.Logging;
using NUnit.Framework;
using NzbDrone.Core.Datastore.Migration.Framework;
@@ -35,10 +35,14 @@ namespace NzbDrone.Core.Test.Framework
return db.GetDirectDataMapper();
}
+ protected override void SetupLogging()
+ {
+ Mocker.SetConstant(Mocker.Resolve());
+ }
+
[SetUp]
public override void SetupDb()
{
- Mocker.SetConstant(Mocker.Resolve());
SetupContainer();
}
}
diff --git a/src/NzbDrone.Core/Datastore/Migration/128_rename_quality_profiles_add_upgrade_allowed.cs b/src/NzbDrone.Core/Datastore/Migration/128_rename_quality_profiles_add_upgrade_allowed.cs
index 12ee67eb0..91739863b 100644
--- a/src/NzbDrone.Core/Datastore/Migration/128_rename_quality_profiles_add_upgrade_allowed.cs
+++ b/src/NzbDrone.Core/Datastore/Migration/128_rename_quality_profiles_add_upgrade_allowed.cs
@@ -1,20 +1,13 @@
using FluentMigrator;
-using FluentMigrator.Infrastructure;
using NzbDrone.Core.Datastore.Migration.Framework;
-using System.Data;
-using System.Data.SQLite;
namespace NzbDrone.Core.Datastore.Migration
{
[Migration(128)]
public class rename_quality_profiles_add_upgrade_allowed : NzbDroneMigrationBase
{
- private IMigrationContext _capturedContext;
-
protected override void MainDbUpgrade()
{
- FixupMigration111();
-
Rename.Table("Profiles").To("QualityProfiles");
Alter.Table("QualityProfiles").AddColumn("UpgradeAllowed").AsInt32().Nullable();
@@ -26,41 +19,5 @@ namespace NzbDrone.Core.Datastore.Migration
Rename.Column("ProfileId").OnTable("Series").To("QualityProfileId");
}
-
- public override void GetUpExpressions(IMigrationContext context)
- {
- _capturedContext = context;
-
- base.GetUpExpressions(context);
-
- _capturedContext = null;
- }
-
- // Early Radarr versions can mess up Sonarr's database if they point to the same config. Fixup the damage.
- private void FixupMigration111()
- {
- var builder = new SQLiteConnectionStringBuilder(ConnectionString);
- builder.Pooling = false;
-
- // In order to get the expressions we need to check the database directly
- using (var connection = new SQLiteConnection(builder.ToString()))
- using (var command = connection.CreateCommand())
- {
- connection.Open();
- command.CommandText = "SELECT Description FROM VersionInfo WHERE Version = 111";
-
- var description = command.ExecuteScalar() as string;
- connection.Close();
-
- if (description == "remove_bitmetv")
- {
- // Get the migration expressions from the 111 migration
- var migration111 = new create_language_profiles();
- migration111.GetUpExpressions(_capturedContext);
-
- Execute.Sql("UPDATE VersionInfo SET Description = 'create_language_profiles fixup' WHERE Version = 111");
- }
- }
- }
}
}
diff --git a/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationContext.cs b/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationContext.cs
index c8882aab0..232143d23 100644
--- a/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationContext.cs
+++ b/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationContext.cs
@@ -4,6 +4,8 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
{
public class MigrationContext
{
+ public static MigrationContext Current { get; set; }
+
public MigrationType MigrationType { get; private set; }
public long? DesiredVersion { get; set; }
@@ -15,4 +17,4 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
DesiredVersion = desiredVersion;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationController.cs b/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationController.cs
index 07fb25ee2..e49b7b493 100644
--- a/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationController.cs
+++ b/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationController.cs
@@ -1,8 +1,12 @@
-using System.Data.SQLite;
+using System;
using System.Diagnostics;
using System.Reflection;
using FluentMigrator.Runner;
using FluentMigrator.Runner.Initialization;
+using FluentMigrator.Runner.Processors;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using NLog;
namespace NzbDrone.Core.Datastore.Migration.Framework
{
@@ -13,56 +17,59 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
public class MigrationController : IMigrationController
{
- private readonly IAnnouncer _announcer;
+ private readonly Logger _logger;
+ private readonly ILoggerProvider _migrationLoggerProvider;
- public MigrationController(IAnnouncer announcer)
+ public MigrationController(Logger logger,
+ ILoggerProvider migrationLoggerProvider)
{
- _announcer = announcer;
+ _logger = logger;
+ _migrationLoggerProvider = migrationLoggerProvider;
}
public void Migrate(string connectionString, MigrationContext migrationContext)
{
var sw = Stopwatch.StartNew();
- _announcer.Heading("Checking database for required migrations " + connectionString);
+ _logger.Info("*** Migrating {0} ***", connectionString);
- var assembly = Assembly.GetExecutingAssembly();
+ var serviceProvider = new ServiceCollection()
+ .AddLogging(lb => lb.AddProvider(_migrationLoggerProvider))
+ .AddFluentMigratorCore()
+ .ConfigureRunner(
+ builder => builder
+ .AddNzbDroneSQLite()
+ .WithGlobalConnectionString(connectionString)
+ .WithMigrationsIn(Assembly.GetExecutingAssembly()))
+ .Configure(opt => opt.Namespace = "NzbDrone.Core.Datastore.Migration")
+ .Configure(opt =>
+ {
+ opt.PreviewOnly = false;
+ opt.Timeout = TimeSpan.FromSeconds(60);
+ })
+ .BuildServiceProvider();
- var runnerContext = new RunnerContext(_announcer)
+ using (var scope = serviceProvider.CreateScope())
{
- Namespace = "NzbDrone.Core.Datastore.Migration",
- ApplicationContext = migrationContext
- };
+ var runner = scope.ServiceProvider.GetRequiredService();
- var options = new MigrationOptions { PreviewOnly = false, Timeout = 60 };
- var factory = new NzbDroneSqliteProcessorFactory();
- var processor = factory.Create(connectionString, _announcer, options);
-
- try
- {
- var runner = new MigrationRunner(assembly, runnerContext, processor);
+ MigrationContext.Current = migrationContext;
if (migrationContext.DesiredVersion.HasValue)
{
- runner.MigrateUp(migrationContext.DesiredVersion.Value, true);
+ runner.MigrateUp(migrationContext.DesiredVersion.Value);
}
else
{
- runner.MigrateUp(true);
+ runner.MigrateUp();
}
- processor.Dispose();
- }
- catch (SQLiteException)
- {
- processor.Dispose();
- SQLiteConnection.ClearAllPools();
- throw;
+ MigrationContext.Current = null;
}
sw.Stop();
- _announcer.ElapsedTime(sw.Elapsed);
+ _logger.Debug("Took: {0}", sw.Elapsed);
}
}
}
diff --git a/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationDbFactory.cs b/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationDbFactory.cs
deleted file mode 100644
index b28923d1c..000000000
--- a/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationDbFactory.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System.Data.Common;
-using System.Data.SQLite;
-using FluentMigrator.Runner.Processors;
-
-namespace NzbDrone.Core.Datastore.Migration.Framework
-{
- public class MigrationDbFactory : DbFactoryBase
- {
- protected override DbProviderFactory CreateFactory()
- {
- return SQLiteFactory.Instance;
- }
- }
-}
\ No newline at end of file
diff --git a/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationExtension.cs b/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationExtension.cs
index 24a63f2ad..e159135d1 100644
--- a/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationExtension.cs
+++ b/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationExtension.cs
@@ -1,6 +1,12 @@
-using System.Data;
+using FluentMigrator;
using FluentMigrator.Builders.Create;
using FluentMigrator.Builders.Create.Table;
+using FluentMigrator.Runner;
+using FluentMigrator.Runner.BatchParser;
+using FluentMigrator.Runner.Generators.SQLite;
+using FluentMigrator.Runner.Processors.SQLite;
+using Microsoft.Extensions.DependencyInjection;
+using System.Data;
namespace NzbDrone.Core.Datastore.Migration.Framework
{
@@ -20,11 +26,24 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
return command;
}
- public static void AddParameter(this IDbCommand command, object value)
+ public static void AddParameter(this System.Data.IDbCommand command, object value)
{
var parameter = command.CreateParameter();
parameter.Value = value;
command.Parameters.Add(parameter);
}
+
+ public static IMigrationRunnerBuilder AddNzbDroneSQLite(this IMigrationRunnerBuilder builder)
+ {
+ builder.Services
+ .AddTransient()
+ .AddScoped()
+ .AddScoped()
+ .AddScoped(sp => sp.GetRequiredService())
+ .AddScoped()
+ .AddScoped()
+ .AddScoped(sp => sp.GetRequiredService());
+ return builder;
+ }
}
-}
\ No newline at end of file
+}
diff --git a/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationLogger.cs b/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationLogger.cs
index 3418dd921..47ff934e1 100644
--- a/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationLogger.cs
+++ b/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationLogger.cs
@@ -1,58 +1,59 @@
using System;
using FluentMigrator.Runner;
+using FluentMigrator.Runner.Logging;
using NLog;
namespace NzbDrone.Core.Datastore.Migration.Framework
{
- public class MigrationLogger : IAnnouncer
+ public class MigrationLogger : FluentMigratorLogger
{
private readonly Logger _logger;
-
- public MigrationLogger(Logger logger)
+ public MigrationLogger(Logger logger,
+ FluentMigratorLoggerOptions options)
+ : base(options)
{
_logger = logger;
}
-
- public void Heading(string message)
+ protected override void WriteHeading(string message)
{
_logger.Info("*** {0} ***", message);
}
- public void Say(string message)
+ protected override void WriteSay(string message)
{
_logger.Debug(message);
}
- public void Emphasize(string message)
+ protected override void WriteEmphasize(string message)
{
_logger.Warn(message);
}
- public void Sql(string sql)
+ protected override void WriteSql(string sql)
{
_logger.Debug(sql);
}
- public void ElapsedTime(TimeSpan timeSpan)
+ protected override void WriteEmptySql()
+ {
+ _logger.Debug(@"No SQL statement executed.");
+ }
+
+ protected override void WriteElapsedTime(TimeSpan timeSpan)
{
_logger.Debug("Took: {0}", timeSpan);
}
- public void Error(string message)
+ protected override void WriteError(string message)
{
_logger.Error(message);
}
- public void Error(Exception exception)
+ protected override void WriteError(Exception exception)
{
_logger.Error(exception);
}
-
- public void Write(string message, bool escaped)
- {
- _logger.Info(message);
- }
}
}
diff --git a/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationLoggerProvider.cs b/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationLoggerProvider.cs
new file mode 100644
index 000000000..23d2dafe0
--- /dev/null
+++ b/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationLoggerProvider.cs
@@ -0,0 +1,26 @@
+using FluentMigrator.Runner;
+using Microsoft.Extensions.Logging;
+using NLog;
+using ILogger = Microsoft.Extensions.Logging.ILogger;
+
+namespace NzbDrone.Core.Datastore.Migration.Framework
+{
+ public class MigrationLoggerProvider : ILoggerProvider
+ {
+ private readonly Logger _logger;
+
+ public MigrationLoggerProvider(Logger logger)
+ {
+ _logger = logger;
+ }
+
+ public ILogger CreateLogger(string categoryName)
+ {
+ return new MigrationLogger(_logger, new FluentMigratorLoggerOptions() { ShowElapsedTime = true, ShowSql = true });
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationOptions.cs b/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationOptions.cs
deleted file mode 100644
index 6a12df8dc..000000000
--- a/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationOptions.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using FluentMigrator;
-
-namespace NzbDrone.Core.Datastore.Migration.Framework
-{
- public class MigrationOptions : IMigrationProcessorOptions
- {
- public bool PreviewOnly { get; set; }
- public int Timeout { get; set; }
- public string ProviderSwitches { get; private set; }
- }
-}
\ No newline at end of file
diff --git a/src/NzbDrone.Core/Datastore/Migration/Framework/NzbDroneMigrationBase.cs b/src/NzbDrone.Core/Datastore/Migration/Framework/NzbDroneMigrationBase.cs
index 309168033..20971d097 100644
--- a/src/NzbDrone.Core/Datastore/Migration/Framework/NzbDroneMigrationBase.cs
+++ b/src/NzbDrone.Core/Datastore/Migration/Framework/NzbDroneMigrationBase.cs
@@ -8,7 +8,6 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
public abstract class NzbDroneMigrationBase : FluentMigrator.Migration
{
protected readonly Logger _logger;
- private MigrationContext _migrationContext;
protected NzbDroneMigrationBase()
{
@@ -32,26 +31,14 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
}
}
- public MigrationContext Context
- {
- get
- {
- if (_migrationContext == null)
- {
- _migrationContext = (MigrationContext)ApplicationContext;
- }
- return _migrationContext;
- }
- }
-
public override void Up()
{
- if (Context.BeforeMigration != null)
+ if (MigrationContext.Current.BeforeMigration != null)
{
- Context.BeforeMigration(this);
+ MigrationContext.Current.BeforeMigration(this);
}
- switch (Context.MigrationType)
+ switch (MigrationContext.Current.MigrationType)
{
case MigrationType.Main:
LogMigrationMessage(MigrationType.Main);
diff --git a/src/NzbDrone.Core/Datastore/Migration/Framework/NzbDroneSqliteProcessor.cs b/src/NzbDrone.Core/Datastore/Migration/Framework/NzbDroneSqliteProcessor.cs
index 5b1fb0a58..507f5fc3d 100644
--- a/src/NzbDrone.Core/Datastore/Migration/Framework/NzbDroneSqliteProcessor.cs
+++ b/src/NzbDrone.Core/Datastore/Migration/Framework/NzbDroneSqliteProcessor.cs
@@ -1,28 +1,32 @@
using System;
using System.Collections.Generic;
-using System.Data;
using System.Linq;
-using FluentMigrator;
+using System.Text.RegularExpressions;
using FluentMigrator.Expressions;
using FluentMigrator.Model;
-using FluentMigrator.Runner;
-using FluentMigrator.Runner.Announcers;
using FluentMigrator.Runner.Generators.SQLite;
+using FluentMigrator.Runner.Initialization;
+using FluentMigrator.Runner.Processors;
using FluentMigrator.Runner.Processors.SQLite;
-using System.Text.RegularExpressions;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
namespace NzbDrone.Core.Datastore.Migration.Framework
{
- public class NzbDroneSqliteProcessor : SQLiteProcessor
+ public class NzbDroneSQLiteProcessor : SQLiteProcessor
{
- public NzbDroneSqliteProcessor(IDbConnection connection, IMigrationGenerator generator, IAnnouncer announcer, IMigrationProcessorOptions options, FluentMigrator.Runner.Processors.IDbFactory factory)
- : base(connection, generator, announcer, options, factory)
+ public NzbDroneSQLiteProcessor(SQLiteDbFactory factory,
+ SQLiteGenerator generator,
+ ILogger logger,
+ IOptionsSnapshot options,
+ IConnectionStringAccessor connectionStringAccessor,
+ IServiceProvider serviceProvider,
+ SQLiteQuoter quoter)
+ : base(factory, generator, logger, options, connectionStringAccessor, serviceProvider, quoter)
{
}
- public override bool SupportsTransactions => true;
-
public override void Process(AlterColumnExpression expression)
{
var tableDefinition = GetTableSchema(expression.TableName);
@@ -107,7 +111,7 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
protected virtual TableDefinition GetTableSchema(string tableName)
{
- var schemaDumper = new SqliteSchemaDumper(this, Announcer);
+ var schemaDumper = new SqliteSchemaDumper(this);
var schema = schemaDumper.ReadDbSchema();
return schema.Single(v => v.Name == tableName);
diff --git a/src/NzbDrone.Core/Datastore/Migration/Framework/NzbDroneSqliteProcessorFactory.cs b/src/NzbDrone.Core/Datastore/Migration/Framework/NzbDroneSqliteProcessorFactory.cs
deleted file mode 100644
index 52ea473e9..000000000
--- a/src/NzbDrone.Core/Datastore/Migration/Framework/NzbDroneSqliteProcessorFactory.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using FluentMigrator;
-using FluentMigrator.Runner;
-using FluentMigrator.Runner.Generators.SQLite;
-using FluentMigrator.Runner.Processors.SQLite;
-
-namespace NzbDrone.Core.Datastore.Migration.Framework
-{
- public class NzbDroneSqliteProcessorFactory : SQLiteProcessorFactory
- {
- public override IMigrationProcessor Create(string connectionString, IAnnouncer announcer, IMigrationProcessorOptions options)
- {
- var factory = new MigrationDbFactory();
- var connection = factory.CreateConnection(connectionString);
- var generator = new SQLiteGenerator { compatabilityMode = CompatabilityMode.STRICT };
- return new NzbDroneSqliteProcessor(connection, generator, announcer, options, factory);
- }
- }
-}
diff --git a/src/NzbDrone.Core/Datastore/Migration/Framework/SqliteSchemaDumper.cs b/src/NzbDrone.Core/Datastore/Migration/Framework/SqliteSchemaDumper.cs
index c97c0ea4b..042b124bc 100644
--- a/src/NzbDrone.Core/Datastore/Migration/Framework/SqliteSchemaDumper.cs
+++ b/src/NzbDrone.Core/Datastore/Migration/Framework/SqliteSchemaDumper.cs
@@ -2,7 +2,6 @@
using System.Data;
using System.Linq;
using FluentMigrator.Model;
-using FluentMigrator.Runner;
using FluentMigrator.Runner.Processors.SQLite;
namespace NzbDrone.Core.Datastore.Migration.Framework
@@ -11,13 +10,11 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
// The original implementation had bad support for escaped identifiers, amongst other things.
public class SqliteSchemaDumper
{
- public SqliteSchemaDumper(SQLiteProcessor processor, IAnnouncer announcer)
+ public SqliteSchemaDumper(SQLiteProcessor processor)
{
- Announcer = announcer;
Processor = processor;
}
- public virtual IAnnouncer Announcer { get; set; }
public SQLiteProcessor Processor { get; set; }
protected internal virtual TableDefinition ReadTableSchema(string sqlSchema)
@@ -42,7 +39,9 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
{
var table = new TableDefinition();
- while (reader.Read() != SqliteSyntaxReader.TokenType.StringToken || reader.ValueToUpper != "TABLE") ;
+ while (reader.Read() != SqliteSyntaxReader.TokenType.StringToken || reader.ValueToUpper != "TABLE")
+ {
+ }
if (reader.Read() == SqliteSyntaxReader.TokenType.StringToken && reader.ValueToUpper == "IF")
{
@@ -108,7 +107,7 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
var column = new ColumnDefinition();
column.Name = ParseIdentifier(reader);
-
+
reader.TrimBuffer();
reader.Read();
@@ -135,7 +134,10 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
reader.Read();
index.IsUnique = reader.ValueToUpper == "UNIQUE";
- while (reader.ValueToUpper != "INDEX") reader.Read();
+ while (reader.ValueToUpper != "INDEX")
+ {
+ reader.Read();
+ }
if (reader.Read() == SqliteSyntaxReader.TokenType.StringToken && reader.ValueToUpper == "IF")
{
@@ -152,7 +154,7 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
reader.Read(); // ON
index.TableName = ParseIdentifier(reader);
-
+
// Find Column List
reader.SkipTillToken(SqliteSyntaxReader.TokenType.ListStart);
@@ -196,8 +198,6 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
return reader.Value;
}
- #region ISchemaDumper Members
-
public virtual IList ReadDbSchema()
{
IList tables = ReadTables();
@@ -210,8 +210,6 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
return tables;
}
- #endregion
-
protected virtual DataSet Read(string template, params object[] args)
{
return Processor.Read(template, args);
@@ -276,4 +274,4 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
return indexes;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/NzbDrone.Core/Datastore/Migration/Framework/SqliteSyntaxReader.cs b/src/NzbDrone.Core/Datastore/Migration/Framework/SqliteSyntaxReader.cs
index fd7db0215..d77c84439 100644
--- a/src/NzbDrone.Core/Datastore/Migration/Framework/SqliteSyntaxReader.cs
+++ b/src/NzbDrone.Core/Datastore/Migration/Framework/SqliteSyntaxReader.cs
@@ -48,18 +48,25 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
public void SkipWhitespace()
{
- while (!IsEndOfFile && char.IsWhiteSpace(Buffer[Index])) Index++;
+ while (!IsEndOfFile && char.IsWhiteSpace(Buffer[Index]))
+ {
+ Index++;
+ }
}
public void SkipTillToken(TokenType tokenType)
{
if (IsEndOfFile)
+ {
return;
+ }
while (Read() != tokenType)
{
if (Type == TokenType.ListStart)
+ {
SkipTillToken(TokenType.ListEnd);
+ }
}
}
@@ -148,9 +155,12 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
{
var start = Index;
var end = start + 1;
- while (end < Buffer.Length && (char.IsLetter(Buffer[end]) || char.IsNumber(Buffer[end]) || Buffer[end] == '_')) end++;
+ while (end < Buffer.Length && (char.IsLetter(Buffer[end]) || char.IsNumber(Buffer[end]) || Buffer[end] == '_'))
+ {
+ end++;
+ }
- if (end >= Buffer.Length || Buffer[end] == ',' || Buffer[end] == '(' || Buffer[end] == ')' || char.IsWhiteSpace(Buffer[end]))
+ if (end >= Buffer.Length || Buffer[end] == ',' || Buffer[end] == ')' || Buffer[end] == '(' || char.IsWhiteSpace(Buffer[end]))
{
Index = end;
}
@@ -215,7 +225,10 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
var start = Index + 1;
var end = Buffer.IndexOf(terminator, Index);
- if (end == -1) throw new SyntaxErrorException();
+ if (end == -1)
+ {
+ throw new SyntaxErrorException();
+ }
Index = end + 1;
return Buffer.Substring(start, end - start);
@@ -230,12 +243,18 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
var start = Index + 1;
var end = Buffer.IndexOf(escape, start);
- if (end == -1) throw new SyntaxErrorException();
+ if (end == -1)
+ {
+ throw new SyntaxErrorException();
+ }
Index = end + 1;
identifier.Append(Buffer.Substring(start, end - start));
- if (Buffer[Index] != escape) break;
+ if (Buffer[Index] != escape)
+ {
+ break;
+ }
identifier.Append(escape);
}
diff --git a/src/NzbDrone.Core/Datastore/Migration/Framework/TableDefinition.cs b/src/NzbDrone.Core/Datastore/Migration/Framework/TableDefinition.cs
new file mode 100644
index 000000000..0e7d78f13
--- /dev/null
+++ b/src/NzbDrone.Core/Datastore/Migration/Framework/TableDefinition.cs
@@ -0,0 +1,49 @@
+// Copyright (c) 2007-2009, Sean Chambers
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using FluentMigrator.Infrastructure.Extensions;
+using FluentMigrator.Model;
+
+namespace NzbDrone.Core.Datastore.Migration.Framework
+{
+ public class TableDefinition : ICloneable
+ {
+ public TableDefinition()
+ {
+ Columns = new List();
+ ForeignKeys = new List();
+ Indexes = new List();
+ }
+
+ public virtual string Name { get; set; }
+ public virtual string SchemaName { get; set; }
+ public virtual ICollection Columns { get; set; }
+ public virtual ICollection ForeignKeys { get; set; }
+ public virtual ICollection Indexes { get; set; }
+
+ public object Clone()
+ {
+ return new TableDefinition
+ {
+ Name = Name,
+ SchemaName = SchemaName,
+ Columns = Columns.CloneAll().ToList(),
+ Indexes = Indexes.CloneAll().ToList()
+ };
+ }
+ }
+}
diff --git a/src/NzbDrone.Core/Sonarr.Core.csproj b/src/NzbDrone.Core/Sonarr.Core.csproj
index a1e3651ad..2b6ca9ea6 100644
--- a/src/NzbDrone.Core/Sonarr.Core.csproj
+++ b/src/NzbDrone.Core/Sonarr.Core.csproj
@@ -4,7 +4,8 @@
x86
-
+
+