Visits all commands executed against a IDatabase and translates them into SQL using a specific IProvider.
コード例 #1
0
        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))
            {
                //MigSharp uses ADO, not SMO to run SQL. ADO does not support the 'GO' statement in SQL as it is not TSQL.
                //We split SQL on 'GO' and run as individual statements
                var separatedByGoStatements = new List<string>(goStatementRegex.Split(commandText));
                separatedByGoStatements.RemoveAll(r => String.IsNullOrEmpty(r.Trim()));

                foreach (var statement in separatedByGoStatements)
                {
                    IDbCommand command = connection.CreateCommand();
                    command.CommandTimeout = 0; // do not timeout; the client is responsible for not causing lock-outs
                    command.Transaction = transaction;
                    command.CommandText = statement;
                    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;
                    }
                }
            }
        }
コード例 #2
0
 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));
 }
コード例 #3
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);
        }
コード例 #4
0
        public void TestProviderArgumentsAreCorrect(Action<IDatabase> arrangeDatabase, Action<IProvider, IFakeScope> 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
            using (IFakeScope scope = Fake.CreateScope())
            {
                // ReSharper disable ReturnValueOfPureMethodIsNotUsed
                translator.TranslateToSql(database, context).ToList();
                // ReSharper restore ReturnValueOfPureMethodIsNotUsed

                // assert
                assertProvider(provider, scope);
            }
        }
コード例 #5
0
ファイル: MigrationReport.cs プロジェクト: dradovic/MigSharp
        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);
        }
コード例 #6
0
        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}{1}{3}", x.Message, Environment.NewLine, command.CommandText,_migration.GetType().ToString());
                    throw new Exception(String.Format("An error occurred: {0}{1}while trying to execute:{1}{2}{1}Migration: {3}", x.Message, Environment.NewLine, command.CommandText, _migration.GetType()));
                }
            }
        }