You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
2.2 KiB
55 lines
2.2 KiB
using System;
|
|
using System.Data;
|
|
using System.Reflection;
|
|
using System.Web.Hosting;
|
|
using Migrator.Framework;
|
|
using NLog;
|
|
using NzbDrone.Core.Datastore;
|
|
|
|
namespace NzbDrone.Services.Service.Migrations
|
|
{
|
|
public class MigrationsHelper
|
|
{
|
|
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
|
|
|
|
public static void Run(string connetionString)
|
|
{
|
|
logger.Info("Preparing to run database migration");
|
|
|
|
VerifyConnectionString(connetionString);
|
|
|
|
try
|
|
{
|
|
var migrator = new Migrator.Migrator("sqlserver", connetionString, Assembly.GetAssembly(typeof(MigrationsHelper)), true, new MigrationLogger());
|
|
migrator.MigrateToLastVersion();
|
|
logger.Info("Database migration completed");
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
logger.FatalException("An error has occurred while migrating database", e);
|
|
}
|
|
}
|
|
|
|
private static void VerifyConnectionString(string connectionString)
|
|
{
|
|
if(connectionString == null) throw new ArgumentNullException("connectionString");
|
|
|
|
if (HostingEnvironment.ApplicationPhysicalPath != null && HostingEnvironment.ApplicationPhysicalPath.ToLower().Contains("stage") &&
|
|
!connectionString.ToLower().Contains("stage"))
|
|
{
|
|
throw new InvalidOperationException("Attempting to migrate production database from staging environment");
|
|
}
|
|
}
|
|
|
|
public static string GetIndexName(string tableName, params string[] columns)
|
|
{
|
|
return String.Format("IX_{0}_{1}", tableName, String.Join("_", columns));
|
|
}
|
|
|
|
public static readonly Column VersionColumn = new Column("Version", DbType.String, 10, ColumnProperty.NotNull);
|
|
public static readonly Column ProductionColumn = new Column("IsProduction", DbType.Boolean, ColumnProperty.NotNull);
|
|
public static readonly Column TimestampColumn = new Column("TimeStamp", DbType.DateTime, ColumnProperty.NotNull);
|
|
public static readonly Column UGuidColumn = new Column("UGuid", DbType.Guid, ColumnProperty.Null);
|
|
|
|
}
|
|
} |