mirror of https://github.com/lidarr/Lidarr
Merge branch 'master' of git://github.com/kayone/NzbDrone
This commit is contained in:
commit
320cf0b217
|
@ -3,23 +3,23 @@ using System.Data;
|
|||
using System.Collections.Generic;
|
||||
|
||||
namespace Migrator.Framework
|
||||
{
|
||||
{
|
||||
/// <summary>
|
||||
/// The main interface to use in Migrations to make changes on a database schema.
|
||||
/// </summary>
|
||||
public interface ITransformationProvider : IDisposable
|
||||
{
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Get this provider or a NoOp provider if you are not running in the context of 'provider'.
|
||||
/// </summary>
|
||||
ITransformationProvider this[string provider] { get;}
|
||||
|
||||
ITransformationProvider this[string provider] { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The list of Migrations currently applied to the database.
|
||||
/// </summary>
|
||||
List<long> AppliedMigrations { get; }
|
||||
|
||||
|
||||
ILogger Logger { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
@ -32,7 +32,7 @@ namespace Migrator.Framework
|
|||
/// <param name="property">Properties that can be ORed together</param>
|
||||
/// <param name="defaultValue">The default value of the column if no value is given in a query</param>
|
||||
void AddColumn(string table, string column, DbType type, int size, ColumnProperty property, object defaultValue);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Add a column to an existing table
|
||||
/// </summary>
|
||||
|
@ -40,7 +40,7 @@ namespace Migrator.Framework
|
|||
/// <param name="column">The name of the new column</param>
|
||||
/// <param name="type">The data type for the new columnd</param>
|
||||
void AddColumn(string table, string column, DbType type);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Add a column to an existing table
|
||||
/// </summary>
|
||||
|
@ -49,7 +49,7 @@ namespace Migrator.Framework
|
|||
/// <param name="type">The data type for the new columnd</param>
|
||||
/// <param name="size">The precision or size of the column</param>
|
||||
void AddColumn(string table, string column, DbType type, int size);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Add a column to an existing table
|
||||
/// </summary>
|
||||
|
@ -59,7 +59,7 @@ namespace Migrator.Framework
|
|||
/// <param name="size">The precision or size of the column</param>
|
||||
/// <param name="property">Properties that can be ORed together</param>
|
||||
void AddColumn(string table, string column, DbType type, int size, ColumnProperty property);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Add a column to an existing table
|
||||
/// </summary>
|
||||
|
@ -194,6 +194,15 @@ namespace Migrator.Framework
|
|||
/// <param name="constraint"></param>
|
||||
void GenerateForeignKey(string foreignTable, string primaryTable, ForeignKeyConstraint constraint);
|
||||
|
||||
/// <summary>
|
||||
/// Add an Index to a table
|
||||
/// </summary>
|
||||
/// <param name="name">The name of the index to add.</param>
|
||||
/// <param name="table">The name of the table that will get the index.</param>
|
||||
/// <param name="unique">If the index will be unique</param>
|
||||
/// <param name="columns">The name of the column or columns that are in the index.</param>
|
||||
void AddIndex(string name, string table, bool unique, params string[] columns);
|
||||
|
||||
/// <summary>
|
||||
/// Add a primary key to a table
|
||||
/// </summary>
|
||||
|
@ -209,7 +218,7 @@ namespace Migrator.Framework
|
|||
/// <param name="table">The name of the table that will get the constraint</param>
|
||||
/// <param name="columns">The name of the column or columns that will get the constraint.</param>
|
||||
void AddUniqueConstraint(string name, string table, params string[] columns);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Add a constraint to a table
|
||||
/// </summary>
|
||||
|
@ -217,7 +226,7 @@ namespace Migrator.Framework
|
|||
/// <param name="table">The name of the table that will get the constraint</param>
|
||||
/// <param name="checkSql">The check constraint definition.</param>
|
||||
void AddCheckConstraint(string name, string table, string checkSql);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Add a table
|
||||
/// </summary>
|
||||
|
@ -244,7 +253,7 @@ namespace Migrator.Framework
|
|||
/// <param name="table">The name of the table that will get the new column</param>
|
||||
/// <param name="column">An instance of a <see cref="Column">Column</see> with the specified properties and the name of an existing column</param>
|
||||
void ChangeColumn(string table, Column column);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Check to see if a column exists
|
||||
/// </summary>
|
||||
|
@ -257,7 +266,7 @@ namespace Migrator.Framework
|
|||
/// Commit the running transction
|
||||
/// </summary>
|
||||
void Commit();
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Check to see if a constraint exists
|
||||
/// </summary>
|
||||
|
@ -265,7 +274,7 @@ namespace Migrator.Framework
|
|||
/// <param name="table">The table that the constraint lives on.</param>
|
||||
/// <returns></returns>
|
||||
bool ConstraintExists(string table, string name);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Check to see if a primary key constraint exists on the table
|
||||
/// </summary>
|
||||
|
@ -273,7 +282,7 @@ namespace Migrator.Framework
|
|||
/// <param name="table">The table that the constraint lives on.</param>
|
||||
/// <returns></returns>
|
||||
bool PrimaryKeyExists(string table, string name);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Execute an arbitrary SQL query
|
||||
/// </summary>
|
||||
|
@ -294,14 +303,14 @@ namespace Migrator.Framework
|
|||
/// <param name="sql">The SQL to execute.</param>
|
||||
/// <returns>A single value that is returned.</returns>
|
||||
object ExecuteScalar(string sql);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Get the information about the columns in a table
|
||||
/// </summary>
|
||||
/// <param name="table">The table name that you want the columns for.</param>
|
||||
/// <returns></returns>
|
||||
Column[] GetColumns(string table);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Get information about a single column in a table
|
||||
/// </summary>
|
||||
|
@ -309,13 +318,13 @@ namespace Migrator.Framework
|
|||
/// <param name="column">The column name for which you want information.</param>
|
||||
/// <returns></returns>
|
||||
Column GetColumnByName(string table, string column);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Get the names of all of the tables
|
||||
/// </summary>
|
||||
/// <returns>The names of all the tables.</returns>
|
||||
string[] GetTables();
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Insert data into a table
|
||||
/// </summary>
|
||||
|
@ -348,13 +357,13 @@ namespace Migrator.Framework
|
|||
/// </summary>
|
||||
/// <param name="version">The version number of the migration that was applied</param>
|
||||
void MigrationApplied(long version);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Marks a Migration version number as having been rolled back from the database
|
||||
/// </summary>
|
||||
/// <param name="version">The version number of the migration that was removed</param>
|
||||
void MigrationUnApplied(long version);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Remove an existing column from a table
|
||||
/// </summary>
|
||||
|
@ -375,20 +384,27 @@ namespace Migrator.Framework
|
|||
/// <param name="table">The table that contains the foreign key.</param>
|
||||
/// <param name="name">The name of the constraint to remove</param>
|
||||
void RemoveConstraint(string table, string name);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Remove an existing index
|
||||
/// </summary>
|
||||
/// <param name="table">The table that contains the index.</param>
|
||||
/// <param name="name">The name of the index to remove</param>
|
||||
void RemoveIndex(string table, string name);
|
||||
|
||||
/// <summary>
|
||||
/// Remove an existing table
|
||||
/// </summary>
|
||||
/// <param name="tableName">The name of the table</param>
|
||||
void RemoveTable(string tableName);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Rename an existing table
|
||||
/// </summary>
|
||||
/// <param name="oldName">The old name of the table</param>
|
||||
/// <param name="newName">The new name of the table</param>
|
||||
void RenameTable(string oldName, string newName);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Rename an existing table
|
||||
/// </summary>
|
||||
|
@ -396,12 +412,12 @@ namespace Migrator.Framework
|
|||
/// <param name="oldColumnName">The old name of the column</param>
|
||||
/// <param name="newColumnName">The new name of the column</param>
|
||||
void RenameColumn(string tableName, string oldColumnName, string newColumnName);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Rollback the currently running transaction.
|
||||
/// </summary>
|
||||
void Rollback();
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Get values from a table
|
||||
/// </summary>
|
||||
|
@ -418,7 +434,7 @@ namespace Migrator.Framework
|
|||
/// <param name="from">The table to select from</param>
|
||||
/// <returns></returns>
|
||||
IDataReader Select(string what, string from);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Get a single value from a table
|
||||
/// </summary>
|
||||
|
@ -435,14 +451,14 @@ namespace Migrator.Framework
|
|||
/// <param name="from">The table to select from</param>
|
||||
/// <returns></returns>
|
||||
object SelectScalar(string what, string from);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Check if a table already exists
|
||||
/// </summary>
|
||||
/// <param name="tableName">The name of the table that you want to check on.</param>
|
||||
/// <returns></returns>
|
||||
bool TableExists(string tableName);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Update the values in a table
|
||||
/// </summary>
|
||||
|
@ -451,7 +467,7 @@ namespace Migrator.Framework
|
|||
/// <param name="columnValues">The values for the columns in the same order as the names.</param>
|
||||
/// <returns></returns>
|
||||
int Update(string table, string[] columns, string[] columnValues);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Update the values in a table
|
||||
/// </summary>
|
||||
|
@ -461,7 +477,7 @@ namespace Migrator.Framework
|
|||
/// <param name="where">A where clause to limit the update</param>
|
||||
/// <returns></returns>
|
||||
int Update(string table, string[] columns, string[] values, string where);
|
||||
|
||||
|
||||
IDbCommand GetCommand();
|
||||
|
||||
void ExecuteSchemaBuilder(SchemaBuilder.SchemaBuilder schemaBuilder);
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
using System;
|
||||
using System.Data;
|
||||
using Migrator.Framework;
|
||||
using ForeignKeyConstraint=Migrator.Framework.ForeignKeyConstraint;
|
||||
|
@ -53,7 +54,12 @@ namespace Migrator.Providers
|
|||
{
|
||||
// No Op
|
||||
}
|
||||
|
||||
|
||||
public void RemoveIndex(string table, string name)
|
||||
{
|
||||
// No Op
|
||||
}
|
||||
|
||||
public void AddTable(string name, params Column[] columns)
|
||||
{
|
||||
// No Op
|
||||
|
@ -129,6 +135,16 @@ namespace Migrator.Providers
|
|||
// No Op
|
||||
}
|
||||
|
||||
public void AddIndex(string name, string table, params string[] columns)
|
||||
{
|
||||
//No Op
|
||||
}
|
||||
|
||||
public void AddIndex(string name, string table, bool unique, params string[] columns)
|
||||
{
|
||||
//No Op
|
||||
}
|
||||
|
||||
public void AddPrimaryKey(string name, string table, params string[] columns)
|
||||
{
|
||||
// No Op
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -256,6 +256,92 @@ namespace NzbDrone.Core.Test
|
|||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void IsSeasonIgnored_should_return_true_if_all_episodes_ignored()
|
||||
{
|
||||
var repo = MockLib.GetEmptyRepository();
|
||||
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||
mocker.SetConstant(repo);
|
||||
|
||||
var episodes = Builder<Episode>.CreateListOfSize(4)
|
||||
.WhereAll()
|
||||
.Have(c => c.Ignored = true)
|
||||
.Have(c => c.SeriesId = 10)
|
||||
.Have(c => c.SeasonNumber = 2)
|
||||
.Build();
|
||||
|
||||
repo.AddMany(episodes);
|
||||
|
||||
//Act
|
||||
var result = mocker.Resolve<EpisodeProvider>().IsIgnored(10, 2);
|
||||
|
||||
//Assert
|
||||
result.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsSeasonIgnored_should_return_false_if_none_of_episodes_are_ignored()
|
||||
{
|
||||
var repo = MockLib.GetEmptyRepository();
|
||||
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||
mocker.SetConstant(repo);
|
||||
|
||||
var episodes = Builder<Episode>.CreateListOfSize(4)
|
||||
.WhereAll()
|
||||
.Have(c => c.Ignored = false)
|
||||
.Have(c => c.SeriesId = 10)
|
||||
.Have(c => c.SeasonNumber = 2)
|
||||
.Build();
|
||||
|
||||
repo.AddMany(episodes);
|
||||
|
||||
//Act
|
||||
var result = mocker.Resolve<EpisodeProvider>().IsIgnored(10, 2);
|
||||
|
||||
//Assert
|
||||
result.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsSeasonIgnored_should_return_false_if_some_of_episodes_are_ignored()
|
||||
{
|
||||
var repo = MockLib.GetEmptyRepository();
|
||||
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||
mocker.SetConstant(repo);
|
||||
|
||||
var episodes = Builder<Episode>.CreateListOfSize(4)
|
||||
.WhereAll()
|
||||
.Have(c => c.SeriesId = 10)
|
||||
.Have(c => c.SeasonNumber = 2)
|
||||
.Have(c => c.Ignored = true)
|
||||
.Build();
|
||||
|
||||
episodes[2].Ignored = false;
|
||||
|
||||
|
||||
repo.AddMany(episodes);
|
||||
|
||||
//Act
|
||||
var result = mocker.Resolve<EpisodeProvider>().IsIgnored(10, 2);
|
||||
|
||||
//Assert
|
||||
result.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsSeasonIgnored_should_return_true_if_invalid_series()
|
||||
{
|
||||
var repo = MockLib.GetEmptyRepository();
|
||||
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||
mocker.SetConstant(repo);
|
||||
|
||||
//Act
|
||||
var result = mocker.Resolve<EpisodeProvider>().IsIgnored(10, 2);
|
||||
|
||||
//Assert
|
||||
result.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Explicit]
|
||||
public void Add_daily_show_episodes()
|
||||
|
@ -276,5 +362,7 @@ namespace NzbDrone.Core.Test
|
|||
var episodes = episodeProvider.GetEpisodeBySeries(tvDbSeriesId);
|
||||
episodes.Should().NotBeEmpty();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -5,6 +5,7 @@ using System.IO;
|
|||
using System.Linq;
|
||||
using FizzWare.NBuilder;
|
||||
using Moq;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.Instrumentation;
|
||||
using NzbDrone.Core.Providers.Core;
|
||||
using NzbDrone.Core.Repository;
|
||||
|
@ -34,25 +35,30 @@ namespace NzbDrone.Core.Test.Framework
|
|||
}
|
||||
}
|
||||
|
||||
public static IRepository GetEmptyRepository()
|
||||
{
|
||||
return GetEmptyRepository(false);
|
||||
}
|
||||
|
||||
public static IRepository GetEmptyRepository(bool enableLogging)
|
||||
public static IRepository GetEmptyRepository(bool enableLogging = false, string fileName = "")
|
||||
{
|
||||
Console.WriteLine("Creating an empty SQLite database");
|
||||
var provider = ProviderFactory.GetProvider("Data Source=" + Guid.NewGuid() + ".db;Version=3;New=True",
|
||||
"System.Data.SQLite");
|
||||
|
||||
var repo = new SimpleRepository(provider, SimpleRepositoryOptions.RunMigrations);
|
||||
if (String.IsNullOrWhiteSpace(fileName))
|
||||
{
|
||||
fileName = Guid.NewGuid() + ".db";
|
||||
}
|
||||
|
||||
|
||||
var provider = Connection.GetDataProvider(Connection.GetConnectionString(fileName));
|
||||
var repo = Connection.CreateSimpleRepository(provider);
|
||||
ForceMigration(repo);
|
||||
|
||||
Migrations.Run(Connection.GetConnectionString(fileName), false);
|
||||
|
||||
if (enableLogging)
|
||||
{
|
||||
provider.Log = new NlogWriter();
|
||||
}
|
||||
|
||||
Console.WriteLine("**********************************************************************************");
|
||||
Console.WriteLine("*****************************REPO IS READY****************************************");
|
||||
Console.WriteLine("**********************************************************************************");
|
||||
return repo;
|
||||
}
|
||||
|
||||
|
|
|
@ -17,8 +17,8 @@ namespace NzbDrone.Core.Test
|
|||
public class DbBenchmark : TestBase
|
||||
{
|
||||
const int Episodes_Per_Season = 20;
|
||||
private readonly List<int> seasonsNumbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8 };
|
||||
private readonly List<int> seriesIds = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8 };
|
||||
private readonly List<int> seasonsNumbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
|
||||
private readonly List<int> seriesIds = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 };
|
||||
private readonly List<Episode> episodes = new List<Episode>();
|
||||
private readonly List<EpisodeFile> files = new List<EpisodeFile>();
|
||||
private readonly IRepository repo = MockLib.GetEmptyRepository();
|
||||
|
@ -68,15 +68,40 @@ namespace NzbDrone.Core.Test
|
|||
}
|
||||
}
|
||||
|
||||
repo.AddMany(episodes);
|
||||
repo.AddMany(files);
|
||||
}
|
||||
|
||||
repo.AddMany(episodes);
|
||||
repo.AddMany(files);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void get_episode_by_series_seasons_episode_x1000()
|
||||
public void get_episode_by_series_seasons_episode_x5000()
|
||||
{
|
||||
var epProvider = new EpisodeProvider(repo, null);
|
||||
|
||||
|
||||
Thread.Sleep(1000);
|
||||
|
||||
|
||||
var random = new Random();
|
||||
Console.WriteLine("Starting Test");
|
||||
|
||||
var sw = Stopwatch.StartNew();
|
||||
for (int i = 0; i < 5000; i++)
|
||||
{
|
||||
epProvider.GetEpisode(6, random.Next(2, 5), random.Next(2, Episodes_Per_Season - 10)).Should().NotBeNull();
|
||||
}
|
||||
|
||||
|
||||
sw.Stop();
|
||||
|
||||
Console.WriteLine("Took " + sw.Elapsed);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void get_episode_by_series_seasons_x1000()
|
||||
{
|
||||
var epProvider = new EpisodeProvider(repo, null);
|
||||
|
||||
|
@ -89,30 +114,6 @@ namespace NzbDrone.Core.Test
|
|||
|
||||
var sw = Stopwatch.StartNew();
|
||||
for (int i = 0; i < 1000; i++)
|
||||
{
|
||||
epProvider.GetEpisode(6, random.Next(2, 5), random.Next(2, Episodes_Per_Season - 10)).Should().NotBeNull();
|
||||
}
|
||||
|
||||
|
||||
sw.Stop();
|
||||
|
||||
Console.WriteLine("Took " + sw.Elapsed);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void get_episode_by_series_seasons_x500()
|
||||
{
|
||||
var epProvider = new EpisodeProvider(repo, null);
|
||||
|
||||
|
||||
Thread.Sleep(1000);
|
||||
|
||||
|
||||
var random = new Random();
|
||||
Console.WriteLine("Starting Test");
|
||||
|
||||
var sw = Stopwatch.StartNew();
|
||||
for (int i = 0; i < 500; i++)
|
||||
{
|
||||
epProvider.GetEpisodesBySeason(6, random.Next(2, 5)).Should().NotBeNull();
|
||||
}
|
||||
|
@ -124,7 +125,7 @@ namespace NzbDrone.Core.Test
|
|||
}
|
||||
|
||||
[Test]
|
||||
public void get_episode_file_count_x50()
|
||||
public void get_episode_file_count_x100()
|
||||
{
|
||||
var mocker = new AutoMoq.AutoMoqer();
|
||||
mocker.SetConstant(repo);
|
||||
|
@ -139,12 +140,39 @@ namespace NzbDrone.Core.Test
|
|||
Console.WriteLine("Starting Test");
|
||||
|
||||
var sw = Stopwatch.StartNew();
|
||||
for (int i = 0; i < 50; i++)
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
mediaProvider.GetEpisodeFilesCount(random.Next(1, 5)).Should().NotBeNull();
|
||||
}
|
||||
|
||||
|
||||
sw.Stop();
|
||||
|
||||
Console.WriteLine("Took " + sw.Elapsed);
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void get_season_count_x5000()
|
||||
{
|
||||
var mocker = new AutoMoq.AutoMoqer();
|
||||
mocker.SetConstant(repo);
|
||||
var provider = mocker.Resolve<EpisodeProvider>();
|
||||
|
||||
|
||||
Thread.Sleep(1000);
|
||||
|
||||
|
||||
var random = new Random();
|
||||
Console.WriteLine("Starting Test");
|
||||
|
||||
var sw = Stopwatch.StartNew();
|
||||
for (int i = 0; i < 5000; i++)
|
||||
{
|
||||
provider.GetSeasons(random.Next(1, 10)).Should().HaveSameCount(seasonsNumbers);
|
||||
}
|
||||
|
||||
|
||||
sw.Stop();
|
||||
|
||||
Console.WriteLine("Took " + sw.Elapsed);
|
||||
|
|
|
@ -56,8 +56,7 @@ namespace NzbDrone.Core
|
|||
|
||||
LogConfiguration.Setup();
|
||||
|
||||
Migrations.Run(Connection.MainConnectionString);
|
||||
ForceMigration(_kernel.Get<IRepository>());
|
||||
Migrations.Run(Connection.MainConnectionString, true);
|
||||
|
||||
SetupDefaultQualityProfiles(_kernel.Get<IRepository>()); //Setup the default QualityProfiles on start-up
|
||||
|
||||
|
@ -134,16 +133,6 @@ namespace NzbDrone.Core
|
|||
_kernel.Get<ExternalNotificationProvider>().InitializeNotifiers(notifiers.ToList());
|
||||
}
|
||||
|
||||
private static void ForceMigration(IRepository repository)
|
||||
{
|
||||
repository.All<Series>().Count();
|
||||
repository.All<Episode>().Count();
|
||||
repository.All<EpisodeFile>().Count();
|
||||
repository.All<QualityProfile>().Count();
|
||||
repository.All<History>().Count();
|
||||
repository.All<IndexerSetting>().Count();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Forces IISExpress process to exit with the host application
|
||||
/// </summary>
|
||||
|
|
|
@ -44,6 +44,11 @@ namespace NzbDrone.Core.Datastore
|
|||
return ProviderFactory.GetProvider(connectionString, "System.Data.SQLite");
|
||||
}
|
||||
|
||||
public static IRepository CreateSimpleRepository(IDataProvider dataProvider)
|
||||
{
|
||||
return new SimpleRepository(dataProvider, SimpleRepositoryOptions.RunMigrations);
|
||||
}
|
||||
|
||||
public static IRepository CreateSimpleRepository(string connectionString)
|
||||
{
|
||||
return new SimpleRepository(GetDataProvider(connectionString), SimpleRepositoryOptions.RunMigrations);
|
||||
|
|
|
@ -7,7 +7,9 @@ using System.Text;
|
|||
using Migrator.Framework;
|
||||
using NLog;
|
||||
using NzbDrone.Core.Repository;
|
||||
using NzbDrone.Core.Repository.Quality;
|
||||
using SubSonic.Extensions;
|
||||
using SubSonic.Repository;
|
||||
using SubSonic.Schema;
|
||||
|
||||
namespace NzbDrone.Core.Datastore
|
||||
|
@ -16,18 +18,31 @@ namespace NzbDrone.Core.Datastore
|
|||
{
|
||||
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
public static void Run(string connetionString)
|
||||
public static void Run(string connetionString, bool trace)
|
||||
{
|
||||
Logger.Info("Preparing run database migration");
|
||||
|
||||
try
|
||||
{
|
||||
var migrator = new Migrator.Migrator("Sqlite", connetionString,
|
||||
Assembly.GetAssembly(typeof(Migrations)), true, new MigrationLogger());
|
||||
Migrator.Migrator migrator;
|
||||
if (trace)
|
||||
{
|
||||
migrator = new Migrator.Migrator("Sqlite", connetionString, Assembly.GetAssembly(typeof(Migrations)), true, new MigrationLogger());
|
||||
}
|
||||
else
|
||||
{
|
||||
migrator = new Migrator.Migrator("Sqlite", connetionString, Assembly.GetAssembly(typeof(Migrations)));
|
||||
}
|
||||
|
||||
|
||||
|
||||
migrator.MigrateToLastVersion();
|
||||
|
||||
ForceSubSonicMigration(Connection.CreateSimpleRepository(connetionString));
|
||||
|
||||
Logger.Info("Database migration completed");
|
||||
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
@ -35,6 +50,16 @@ namespace NzbDrone.Core.Datastore
|
|||
}
|
||||
}
|
||||
|
||||
public static void ForceSubSonicMigration(IRepository repository)
|
||||
{
|
||||
repository.Single<Series>(1);
|
||||
repository.Single<Episode>(1);
|
||||
repository.Single<EpisodeFile>(1);
|
||||
repository.Single<QualityProfile>(1);
|
||||
repository.Single<History>(1);
|
||||
repository.Single<IndexerSetting>(1);
|
||||
}
|
||||
|
||||
|
||||
public static void RemoveDeletedColumns(ITransformationProvider transformationProvider)
|
||||
{
|
||||
|
@ -93,11 +118,7 @@ namespace NzbDrone.Core.Datastore
|
|||
{
|
||||
public override void Up()
|
||||
{
|
||||
//Remove jobs table forcing it to repopulate
|
||||
var repoProvider = new RepositoryProvider();
|
||||
var jobTable = repoProvider.GetSchemaFromType(typeof(JobSetting));
|
||||
|
||||
Database.RemoveTable(jobTable.Name);
|
||||
Database.RemoveTable(RepositoryProvider.JobsSchema.Name);
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
|
@ -122,4 +143,34 @@ namespace NzbDrone.Core.Datastore
|
|||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
|
||||
[Migration(20110604)]
|
||||
public class Migration20110604 : Migration
|
||||
{
|
||||
public override void Up()
|
||||
{
|
||||
Migrations.ForceSubSonicMigration(Connection.CreateSimpleRepository(Connection.MainConnectionString));
|
||||
|
||||
var episodesTable = RepositoryProvider.EpisodesSchema;
|
||||
//Database.AddIndex("idx_episodes_series_season_episode", episodesTable.Name, true,
|
||||
// episodesTable.GetColumnByPropertyName("SeriesId").Name,
|
||||
// episodesTable.GetColumnByPropertyName("SeasonNumber").Name,
|
||||
// episodesTable.GetColumnByPropertyName("EpisodeNumber").Name);
|
||||
|
||||
Database.AddIndex("idx_episodes_series_season", episodesTable.Name, false,
|
||||
episodesTable.GetColumnByPropertyName("SeriesId").Name,
|
||||
episodesTable.GetColumnByPropertyName("SeasonNumber").Name);
|
||||
|
||||
Database.AddIndex("idx_episodes_series", episodesTable.Name, false,
|
||||
episodesTable.GetColumnByPropertyName("SeriesId").Name);
|
||||
|
||||
Migrations.RemoveDeletedColumns(Database);
|
||||
Migrations.AddNewColumns(Database);
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -5,6 +5,7 @@ using System.Linq;
|
|||
using System.Reflection;
|
||||
using Migrator.Providers;
|
||||
using Migrator.Providers.SQLite;
|
||||
using NzbDrone.Core.Repository;
|
||||
using SubSonic.DataProviders;
|
||||
using SubSonic.Extensions;
|
||||
using SubSonic.Schema;
|
||||
|
@ -15,6 +16,12 @@ namespace NzbDrone.Core.Datastore
|
|||
{
|
||||
public class RepositoryProvider
|
||||
{
|
||||
public static readonly ITable EpisodesSchema = new RepositoryProvider().GetSchemaFromType(typeof(Episode));
|
||||
public static readonly ITable SeriesSchema = new RepositoryProvider().GetSchemaFromType(typeof(Series));
|
||||
public static readonly ITable EpisodeFilesSchema = new RepositoryProvider().GetSchemaFromType(typeof(EpisodeFile));
|
||||
public static readonly ITable JobsSchema = new RepositoryProvider().GetSchemaFromType(typeof(JobSetting));
|
||||
|
||||
|
||||
public virtual IList<Type> GetRepositoryTypes()
|
||||
{
|
||||
var coreAssembly = Assembly.GetExecutingAssembly();
|
||||
|
@ -85,5 +92,7 @@ namespace NzbDrone.Core.Datastore
|
|||
|
||||
return migColumn;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Binary file not shown.
Loading…
Reference in New Issue