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);
        }
Beispiel #4
0
        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));
        }
Beispiel #5
0
        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));
        }