internal void Execute(IDbConnection connection, IDbTransaction transaction, MigrationDirection direction, IDbCommandExecutor commandExecutor) { Debug.Assert(connection.State == ConnectionState.Open); var context = new RuntimeContext(connection, transaction, commandExecutor, _providerMetadata); Database database = GetDatabaseContainingMigrationChanges(direction, context); var translator = new CommandsToSqlTranslator(_provider); foreach (string commandText in translator.TranslateToSql(database, context)) { IDbCommand command = connection.CreateCommand(); command.CommandTimeout = 0; // do not timeout; the client is responsible for not causing lock-outs command.Transaction = transaction; command.CommandText = commandText; try { commandExecutor.ExecuteNonQuery(command); } catch (DbException x) { Log.Error("An error occurred: {0}{1}while trying to execute:{1}{2}", x.Message, Environment.NewLine, command.CommandText); throw; } } }
private static void AssertAreEqual(IProvider sqlProvider, IProvider smoProvider, Database database) { MigrationReport report = MigrationReport.Create(database, string.Empty); Assert.IsEmpty(report.Error); var sqlTranslator = new CommandsToSqlTranslator(sqlProvider); var smoTranslator = new CommandsToSqlTranslator(smoProvider); var context = MockRepository.GenerateStub <IRuntimeContext>(); ScriptComparer.AssertAreEqual(smoTranslator.TranslateToSql(database, context), sqlTranslator.TranslateToSql(database, context)); }
public void TestProviderArgumentsAreCorrect(Action <IDatabase> arrangeDatabase, Action <IProvider> assertProvider) { // arrange var provider = A.Fake <IProvider>(); CommandsToSqlTranslator translator = new CommandsToSqlTranslator(provider); var context = A.Fake <IRuntimeContext>(); var database = new Database(context); arrangeDatabase(database); // act // ReSharper disable once ReturnValueOfPureMethodIsNotUsed translator.TranslateToSql(database, context).ToList(); // assert assertProvider(provider); }
public static MigrationReport Create(Database database, string migrationName) { // execute changes in 'database' against a RecordingProvider var recordingProvider = new RecordingProvider(); var translator = new CommandsToSqlTranslator(recordingProvider); string error = string.Empty; try { translator.TranslateToSql(database, null).ToList(); // .ToList() is important to effectively trigger the iteration } catch (InvalidCommandException x) { error = x.Message; } // create MigrationReport return(new MigrationReport(migrationName, error, recordingProvider)); }
public static MigrationReport Create(Database database, string migrationName, IMigrationContext context) { // execute changes in 'database' against a RecordingProvider var recordingProvider = new RecordingProvider(); var translator = new CommandsToSqlTranslator(recordingProvider); string error = string.Empty; try { // ReSharper disable ReturnValueOfPureMethodIsNotUsed translator.TranslateToSql(database, context).ToList(); // .ToList() is important to effectively trigger the iteration // ReSharper restore ReturnValueOfPureMethodIsNotUsed } catch (InvalidCommandException x) { error = x.Message; } // create MigrationReport return(new MigrationReport(migrationName, error, recordingProvider)); }