public override bool Execute() { if (string.IsNullOrEmpty(databaseType)) { Log.LogError("You must specific a database type. i.e. mysql or sqlserver"); return(false); } if (string.IsNullOrEmpty(migrationAssembly)) { Log.LogError("You must specific a migration assembly"); return(false); } Log.LogMessage(MessageImportance.Low, "Creating Context"); var announcer = new BaseAnnouncer(msg => Log.LogMessage(MessageImportance.Normal, msg)) { ShowElapsedTime = Verbose, ShowSql = Verbose }; var runnerContext = new RunnerContext(announcer) { Database = databaseType, Connection = Connection, ConnectionStringConfigPath = ConnectionStringConfigPath, Target = Target, PreviewOnly = PreviewOnly, Namespace = Namespace, Task = Task, Version = Version, Steps = Steps, WorkingDirectory = WorkingDirectory, Profile = Profile, Timeout = Timeout, }; Log.LogMessage(MessageImportance.Low, "Executing Migration Runner"); try { new TaskExecutor(runnerContext).Execute(); } catch (ProcessorFactoryNotFoundException ex) { announcer.Error("While executing migrations the following error was encountered: {0}", ex.Message); return(false); } catch (Exception ex) { announcer.Error("While executing migrations the following error was encountered: {0}, {1}", ex.Message, ex.StackTrace); return(false); } return(true); }
private static void RunMigrations(string databaseKey) { var cs = SqlConnections.GetConnectionString(databaseKey); var connection = cs.ConnectionString; string serverType = cs.Dialect.ServerType; bool isSqlServer = serverType.StartsWith("SqlServer", StringComparison.OrdinalIgnoreCase); bool isOracle = !isSqlServer && serverType.StartsWith("Oracle", StringComparison.OrdinalIgnoreCase); // safety check to ensure that we are not modifying an arbitrary database. // remove these lines if you want TOY migrations to run on your DB. if (!isOracle && cs.ConnectionString.IndexOf(typeof(SiteInitialization).Namespace + @"_" + databaseKey + "_v1", StringComparison.OrdinalIgnoreCase) < 0) { SkippedMigrations = true; return; } string databaseType = isOracle ? "OracleManaged" : serverType; var connectionString = cs.ConnectionString; using (var sw = new StringWriter()) { Announcer announcer = isOracle ? new TextWriterAnnouncer(sw) { ShowSql = true } : new TextWriterWithGoAnnouncer(sw) { ShowSql = true }; var runner = new RunnerContext(announcer) { Database = databaseType, Connection = connectionString, Targets = new string[] { typeof(SiteInitialization).Assembly.Location }, Task = "migrate:up", WorkingDirectory = Path.GetDirectoryName(typeof(SiteInitialization).Assembly.Location), Namespace = "TOY.Migrations." + databaseKey + "DB", Timeout = 90 }; try { new TaskExecutor(runner).Execute(); } catch (Exception ex) { throw new Exception("Error executing migration:\r\n" + sw.ToString(), ex); } } }
private void RunMigration(Action <MigrationRunner> runAction) { Announcer announcer = CreateAnnouncer(); using (IMigrationProcessor processor = CreateMigrationProcessor(announcer)) { IRunnerContext migrationContext = new RunnerContext(announcer); var runner = new MigrationRunner(_migrationAssembly, migrationContext, processor); runAction(runner); } }
public void ValidateVersionOrderShouldThrowExceptionIfUnappliedMigrationVersionIsLessThanLatestAppliedMigration() { // Using SqlServer instead of SqlLite as versions not deleted from VersionInfo table when using Sqlite. var excludedProcessors = new[] { typeof(SqliteProcessor), typeof(MySqlProcessor), typeof(PostgresProcessor) }; var assembly = typeof(User).Assembly; var runnerContext1 = new RunnerContext(new TextWriterAnnouncer(System.Console.Out)) { Namespace = typeof(Migrations.Interleaved.Pass2.User).Namespace }; var runnerContext2 = new RunnerContext(new TextWriterAnnouncer(System.Console.Out)) { Namespace = typeof(Migrations.Interleaved.Pass3.User).Namespace }; VersionOrderInvalidException caughtException = null; try { ExecuteWithSupportedProcessors(processor => { var migrationRunner = new MigrationRunner(assembly, runnerContext1, processor); migrationRunner.MigrateUp(); }, false, excludedProcessors); ExecuteWithSupportedProcessors(processor => { var migrationRunner = new MigrationRunner(assembly, runnerContext2, processor); migrationRunner.ValidateVersionOrder(); }, false, excludedProcessors); } catch (VersionOrderInvalidException ex) { caughtException = ex; } finally { ExecuteWithSupportedProcessors(processor => { var migrationRunner = new MigrationRunner(assembly, runnerContext2, processor); migrationRunner.RollbackToVersion(0); }, true, excludedProcessors); } caughtException.ShouldNotBeNull(); caughtException.InvalidMigrations.Count().ShouldBe(1); var keyValuePair = caughtException.InvalidMigrations.First(); keyValuePair.Key.ShouldBe(200909060935); ((MigrationWithMetaDataAdapter)keyValuePair.Value).Migration.ShouldBeOfType <UserEmail>(); }
private MigrationRunner CreateMigrationRunner() { var processor = GetMigrationProcessor(); var migrationContext = new RunnerContext(Announcer) { Namespace = NamespaceContainingMigrations, TransactionPerSession = true, }; return(new MigrationRunner(AssemblyContainingMigrations, migrationContext, processor)); }
public void Run() { using (var connection = new SqlConnection(_connectionString)) { var context = new RunnerContext(_announcer); var generator = GetMigrationGenerator(_syntax); var processor = new SqlServerProcessor(connection, generator, _announcer, _options); var runner = new FluentMigrator.Runner.MigrationRunner(_assembly, context, processor); runner.MigrateUp(); } }
public void Migrate() { var processor = GetProcessor(); var context = new RunnerContext(new NullAnnouncer()); var migrationRunner = new MigrationRunner( typeof(SqlSchemaMigrator).Assembly, context, processor); migrationRunner.MigrateUp(); }
public static void Run() { ConnectionStringSettings connectionString = ConfigurationManager.ConnectionStrings["BeerConf"]; var runnerContext = new RunnerContext(new NullAnnouncer()) { Database = "sqlserver", Connection = connectionString.ConnectionString, Target = typeof(MigrationsRunner).Assembly.FullName, }; new TaskExecutor(runnerContext).Execute(); }
private static string ExecuteMigration(string databaseType, string connectionString, long version, string profile, Assembly assembly, bool trace, IEnumerable <string> tags, bool sqlOnly = false) { assembly = assembly ?? Assembly.GetExecutingAssembly(); var outputPath = Path.GetTempFileName(); using (var sw = new StreamWriter(outputPath)) { var announcers = new List <IAnnouncer>(); if (sqlOnly) { announcers.Add(new TextWriterAnnouncer(sw) { ShowSql = true }); } if (trace) { announcers.Add(new ConsoleAnnouncer { ShowSql = true }); } if (announcers.Count == 0) { announcers.Add(new NullAnnouncer()); } var context = new RunnerContext(new CompositeAnnouncer(announcers.ToArray())) { Connection = connectionString, Database = databaseType, Targets = new[] { assembly.FullName }, Version = version, Profile = profile, Timeout = 0, Tags = tags, PreviewOnly = sqlOnly }; var executor = new TaskExecutor(context); executor.Execute(); } if (string.IsNullOrWhiteSpace(outputPath)) { File.Delete(outputPath); return(string.Empty); } var sql = File.ReadAllText(outputPath); File.Delete(outputPath); return(sql); }
public void TwoMigrationsWithSpecificUpdates_ShouldUpdateAffectedRows() { //---------------Set up test pack------------------- using (var deleter = GetFreshTempFileForDB()) { var connectionString = GetConnectionStringToTempDatabaseAt(deleter.FileNames.First()); var runnerContext = new RunnerContext(new TextWriterAnnouncer(System.Console.Out)) { Namespace = "FluentMigrator.Tests.Integration.Migrations" }; using (var connection = new FbConnection(connectionString)) { FirebirdProcessor processor; var runner = CreateFirebirdEmbeddedRunnerFor(connection, runnerContext, out processor); runner.Up(new CreateTableMigration()); runner.Up(new AddDataMigration(1)); runner.Up(new AddDataMigration(2)); runner.Up(new AddDataMigration(3)); //---------------Assert Precondition---------------- connection.Open(); const string countSql = "select count(*) as \"TheCount\" from \"TheTable\" where \"Id\" = {0}"; using (var cmd = new FbCommand(String.Format(countSql, 1), connection)) { using (var reader = cmd.ExecuteReader()) { Assert.IsTrue(reader.Read()); Assert.AreEqual(1, Convert.ToInt32(reader["TheCount"])); } } //---------------Execute Test ---------------------- Exception thrown = null; try { runner.Up(new UpdateMigration(4, 1)); runner.Up(new UpdateMigration(5, 2)); processor.CommitTransaction(); Assert.AreEqual(1, CountRowsWith(countSql, 4, connection)); Assert.AreEqual(1, CountRowsWith(countSql, 5, connection)); } catch (Exception ex) { thrown = ex; } //---------------Test Result ----------------------- Assert.IsNull(thrown); } } }
public RunnerContext GetRunnerContext(string profile, IEnumerable <string> tags, bool previewOnly) { var announcer = new NullAnnouncer(); var context = new RunnerContext(announcer) { PreviewOnly = previewOnly, Profile = profile, Tags = tags }; return(context); }
private static void RunMigrations(string databaseKey) { var cs = SqlConnections.GetConnectionString(databaseKey); var connection = cs.ConnectionString; bool isOracle = cs.Dialect.GetType() == typeof(OracleDialect); // safety check to ensure that we are not modifying an arbitrary database. // remove these lines if you want TestThisSerene migrations to run on your DB. if (!isOracle && cs.ConnectionString.IndexOf(typeof(SiteInitialization).Namespace + @"_" + databaseKey + "_v1", StringComparison.OrdinalIgnoreCase) < 0) { SkippedMigrations = true; return; } string databaseType = "SqlServer"; if (String.Equals(cs.ProviderName, "npgsql", StringComparison.OrdinalIgnoreCase)) databaseType = "Postgres"; else if (String.Equals(cs.ProviderName, "MySql.Data.MySqlClient", StringComparison.OrdinalIgnoreCase)) databaseType = "MySql"; else if (isOracle) databaseType = "OracleManaged"; using (var sw = new StringWriter()) { Announcer announcer = isOracle ? new TextWriterAnnouncer(sw) { ShowSql = true } : new TextWriterWithGoAnnouncer(sw) { ShowSql = true }; var runner = new RunnerContext(announcer) { Database = databaseType, Connection = cs.ConnectionString, Targets = new string[] { typeof(SiteInitialization).Assembly.Location }, Task = "migrate:up", WorkingDirectory = Path.GetDirectoryName(typeof(SiteInitialization).Assembly.Location), Namespace = "TestThisSerene.Migrations." + databaseKey + "DB" }; try { new TaskExecutor(runner).Execute(); } catch (Exception ex) { throw new Exception("Error executing migration:\r\n" + sw.ToString(), ex); } } }
public IMigrationProcessor CreateMigrationProcessor(RunnerContext context, IDbConnection connection) { var isClose = connection.State != ConnectionState.Open; try { if (isClose) { connection.Open(); } IMigrationGenerator migrationGenerator; using (var command = new SqlCommand("SELECT CAST(LEFT(CAST(SERVERPROPERTY('productversion') AS varchar(50)),CHARINDEX('.',CAST(SERVERPROPERTY('productversion') AS varchar(50)))-1)AS int)", connection as SqlConnection)) { var version = (int)command.ExecuteScalar(); switch (version) { case 9: migrationGenerator = new SqlServer2005Generator(); break; case 10: migrationGenerator = new SqlServer2008Generator(); break; default: migrationGenerator = new SqlServer2012Generator(); // throw new Exception(string.Format("无法识别的数据库版本:{0}。", version)); break; } } return(new SqlServerProcessor( connection , migrationGenerator , context.Announcer, new ProcessorOptions { PreviewOnly = context.PreviewOnly, ProviderSwitches = context.ProviderSwitches, Timeout = context.Timeout } , new SqlServerDbFactory())); } finally { if (!isClose) { connection.Close(); } } }
public void RenameTable_WhenOriginalTableContainsMultipleRows_ShouldNotFailToMigrate() { //---------------Set up test pack------------------- var tempResources = WriteOutFirebirdEmbeddedLibrariesToCurrentWorkingDirectory(); var tempFile = Path.GetTempFileName(); using (var deleter = new AutoDeleter(tempFile)) { File.Delete(tempFile); // Firebird will b0rk if it has to create a database where a file already exists deleter.Add(tempResources); var connectionString = GetConnectionStringToTempDatabaseAt(tempFile); var runnerContext = new RunnerContext(new TextWriterAnnouncer(System.Console.Out)) { Namespace = "FluentMigrator.Tests.Integration.Migrations" }; using (var connection = new FbConnection(connectionString)) { FirebirdProcessor processor; var runner = CreateFirebirdEmbeddedRunnerFor(connection, runnerContext, out processor); runner.Up(new CreateTableMigration()); runner.Up(new AddDataMigration(1)); runner.Up(new AddDataMigration(2)); runner.Up(new AddDataMigration(3)); //---------------Assert Precondition---------------- connection.Open(); using (var cmd = new FbCommand("select count(*) as \"TheCount\" from \"TheTable\"", connection)) { using (var reader = cmd.ExecuteReader()) { Assert.IsTrue(reader.Read()); Assert.AreEqual(3, Convert.ToInt32(reader["TheCount"])); } } //---------------Execute Test ---------------------- Exception thrown = null; try { runner.Up(new RenameTableMigration()); } catch (Exception ex) { thrown = ex; } //---------------Test Result ----------------------- Assert.IsNull(thrown); } } }
public void Migrate(Action <IMigrationRunner> runnerAction) { var options = new MigrationOptions { PreviewOnly = false, Timeout = 0 }; var factory = new FluentMigrator.Runner.Processors.MigrationProcessorFactoryProvider().GetFactory(_dbType); var announcer = new TextWriterAnnouncer(s => System.Diagnostics.Debug.WriteLine(s)); var migrationContext = new RunnerContext(announcer); var processor = factory.Create(_connectionString, announcer, options); var runner = new MigrationRunner(_migrationAssembly, migrationContext, processor); runnerAction(runner); }
private static void Migrate(string connectionString) { var announcer = new TextWriterAnnouncer(Console.Out); var migrationContext = new RunnerContext(announcer); var factory = new FluentMigrator.Runner.Processors.SqlServer.SqlServer2012ProcessorFactory(); var assembly = typeof(MigrationProgram).Assembly; using (var processor = factory.Create(connectionString, announcer, new ProcessorOptions())) { var runner = new MigrationRunner(assembly, migrationContext, processor); runner.MigrateUp(); } }
private void DoMigrationsWithOptions(MigrationOptions options, Action <MigrationRunner> call) { var announcer = new TextWriterAnnouncer(_textWriterAction) { ShowSql = true }; var context = new RunnerContext(announcer); var factory = new T(); var processor = factory.Create(_connectionString, announcer, options); var runner = new MigrationRunner(_assemblyToLoadMigrationsFrom, context, processor); call(runner); }
public void ExecuteMigrations() { IAnnouncer announcer = new TextWriterAnnouncer(Console.Out); IRunnerContext migrationContext = new RunnerContext(announcer) { Connection = Settings.Default.BulkDemoConnection, Database = "sqlserver", Target = "BulkDemo.Test" }; TaskExecutor executor = new TaskExecutor(migrationContext); executor.Execute(); }
public void Migrate(Action <IMigrationRunner> runnerAction) { var options = new MigrationOptions { PreviewOnly = false, Timeout = 0 }; var factory = new FluentMigrator.Runner.Processors.SqlServer.SqlServer2008ProcessorFactory(); var assembly = Assembly.GetExecutingAssembly(); var announcer = new TextWriterAnnouncer(s => System.Diagnostics.Debug.WriteLine(s)); var migrationContext = new RunnerContext(announcer); var processor = factory.Create(this._connectionString, announcer, options); var runner = new MigrationRunner(assembly, migrationContext, processor); runnerAction(runner); }
private MigrationRunner GetMigrator() { var announcer = new NullAnnouncer(); var migrationContext = new RunnerContext(announcer); var options = new MigrationOptions { PreviewOnly = false, Timeout = 60 }; var factory = new FluentMigrator.Runner.Processors.Oracle.OracleProcessorFactory(); var processor = factory.Create(this.connectionString, announcer, options); var runner = new MigrationRunner(migrationsAssembly, migrationContext, processor); return(runner); }
public void MigrateToLatest() { var announcer = new NullAnnouncer(); var assembly = Assembly.GetExecutingAssembly(); var migrationContext = new RunnerContext(announcer); var options = new ProcessorOptions { PreviewOnly = false, Timeout = 60 }; var factory = new FluentMigrator.Runner.Processors.SqlServer.SqlServer2008ProcessorFactory(); var processor = factory.Create(_settings.ConnectionString, announcer, options); var runner = new MigrationRunner(assembly, migrationContext, processor); runner.MigrateUp(true); }
private RunnerContext GetMigrationContext(long version, string profile) { var context = new RunnerContext(Announcer); if (version > -1) { context.Version = version; } if (!string.IsNullOrEmpty(profile)) { context.Profile = profile; } return(context); }
private static TaskExecutor MakeTask(string task) { var announcer = new TextWriterAnnouncer(System.Console.Out); var runnerContext = new RunnerContext(announcer) { Database = "Firebird", Connection = IntegrationTestOptions.Firebird.ConnectionString, Target = Assembly.GetExecutingAssembly().Location, Namespace = "FluentMigrator.Tests.Integration.Migrations.Firebird.FirstVersion", Task = task, }; return(new TaskExecutor(runnerContext)); }
private MigrationRunner GetMigrator() { var announcer = new TextWriterAnnouncer(s => logMethod.Invoke(s)); var migrationContext = new RunnerContext(announcer); var options = new MigrationOptions { PreviewOnly = false, Timeout = 60 }; var factory = new FluentMigrator.Runner.Processors.SqlServer.SqlServer2008ProcessorFactory(); var processor = factory.Create(this.connectionString, announcer, options); var runner = new MigrationRunner(migrationsAssembly, migrationContext, processor); return(runner); }
public void Run(string migrationsDllPath, string connectionString, string dbType) { var announcer = new FluentMigrator.Runner.Announcers.NullAnnouncer(); var migrationContext = new RunnerContext(announcer) { Database = dbType, Connection = connectionString, Target = migrationsDllPath, PreviewOnly = false }; var taskExecuter = new TaskExecutor(migrationContext); taskExecuter.Execute(); }
protected TaskExecutor MakeTask(string task, string migrationsNamespace) { var announcer = new TextWriterAnnouncer(System.Console.Out); var runnerContext = new RunnerContext(announcer) { Database = "Firebird", Connection = IntegrationTestOptions.Firebird.ConnectionString, Targets = new[] { Assembly.GetExecutingAssembly().Location }, Namespace = migrationsNamespace, Task = task }; return(new TaskExecutor(runnerContext)); }
private void Execute(string task) { tbAnnouncer.Clear(); var version = (int)numVersion.Value; var steps = (int)numSteps.Value; var tags = new List <string>(); var profile = tbProfile.Text; foreach (var item in lbTags.SelectedItems) { tags.Add(item.ToString()); } var announcer = new TextWriterAnnouncer(new TextBoxStreamWriter(tbAnnouncer)); announcer.Heading("Migrate database"); var runnerContext = new RunnerContext(announcer) { Database = "SqlServer2008", Connection = ConfigurationManager.ConnectionStrings["FluentMigrator"].ConnectionString, Target = "DatabaseProject.dll", PreviewOnly = false, Namespace = "DatabaseProject", NestedNamespaces = true, Task = task, Version = version, Steps = steps, Tags = tags, //WorkingDirectory = "C:\\temp", Profile = profile, Timeout = 30, TransactionPerSession = true }; var executor = new TaskExecutor(runnerContext); try { executor.Execute(); } catch (Exception ex) { tbAnnouncer.AppendText("Exception: " + ex.Message); } }
private static void RunMigrations() { var announcer = new ConsoleAnnouncer() { ShowSql = true }; var runner = new RunnerContext(announcer) { Connection = DatabaseSettings.Instance.BuildConnectionString(), Database = Enum.GetName(typeof(DatabaseType), (DatabaseType)DatabaseSettings.Instance.Type).ToLower(), Targets = new string [] { typeof(ModelHelper).Assembly.Location }, }; new TaskExecutor(runner).Execute(); }
public static void MigrateSchema() { log.Debug("Applying any required schema updates"); var announcer = new MigrationAnnoucer(message => log.Debug(message), message => log.Error(message)); var runner = new RunnerContext(announcer) { Database = "SqlServer", Connection = SessionProvider.ConnectionSettings.ConnectionString, Target = Path.Combine(AppDomain.CurrentDomain.SetupInformation.PrivateBinPath, Assembly.GetExecutingAssembly().GetName().Name + ".dll") }; new TaskExecutor(runner).Execute(); }
private static MigrationRunner GetRunner(string connectionString, IMigrationProcessorFactory factory) { var announcer = new NullAnnouncer(); var assembly = Assembly.GetExecutingAssembly(); var migrationContext = new RunnerContext(announcer) { Namespace = "Migrations" }; var options = new MigrationOptions { PreviewOnly = false, Timeout = 60 }; var processor = factory.Create(connectionString, announcer, options); return(new MigrationRunner(assembly, migrationContext, processor)); }
public static int Main(string[] args) { var context1 = new RunnerContext ( "urn:schemas-upnp-org:service:ContentDirectory:1", "ContentDirectory", "Mono.Upnp.Dcp.MediaServer1.ContentDirectory1", "/home/scott/Desktop/upnpresources/standardizeddcps/MediaServer_1 and MediaRenderer_1/xml data files/service/ContentDirectory1.xml"); // var context2 = new RunnerContext ( // "urn:schemas-upnp-org:service:ConnectionManager:1", // "ConnectionManager", // "Mono.Upnp.Dcp.MediaServer1", // "/home/scott/Desktop/upnpresources/standardizeddcps/MediaServer_1 and MediaRenderer_1/xml data files/service/ConnectionManager1.xml"); new ClientRunner (context1).Run (); //new ClientRunner (context2).Run (); return 0; }
static public void Run(RunnerContext context, TextWriter writer = null) { if (writer == null) writer = new StringWriter(); IAnnouncer announcer = new DataWriter(writer); var runnerContext = new FluentMigrator.Runner.Initialization.RunnerContext(announcer) { ApplicationContext = context.ApplicationContext, Database = context.Database, Connection = context.Connection, Targets = context.Targets, PreviewOnly = context.PreviewOnly, Namespace = context.Namespace, NestedNamespaces = context.NestedNamespaces, Task = context.Task, Version = context.Version, Steps = context.Steps, WorkingDirectory = context.WorkingDirectory, Profile = context.Profile, Tags = context.Tags, Timeout = context.Timeout, TransactionPerSession = context.TransactionPerSession, }; try { new TaskExecutor(runnerContext).Execute(); } catch (ProcessorFactoryNotFoundException ex) { announcer.Error("While executing migrations the following error was encountered: {0}", ex.Message); throw; } catch (Exception e) { announcer.Error("While executing migrations the following error was encountered: {0}, {1}", e.Message, e.StackTrace); throw; } finally { //if (outputWriter != null) // outputWriter.Dispose(); } }
private static RunnerContext BuildRunnerContext(IAnnouncer announcer, string profile) { var runnerContext = new RunnerContext(announcer) { Profile = profile }; return runnerContext; }