Inheritance: IChangeScriptApplier
Exemplo n.º 1
0
        public void executar_script_passando_conteudo()
        {
            const string conteudoSql  = "Create Table tabelaTeste (id int not null, name varchar(45) not null, primary key (id));";
            var          changeScript = new ChangeScript("1.0.0.0", 1);

            splitter.Setup(s => s.Split(It.IsAny <string>())).Returns <string>(s => new[] { s });

            var directToDbApplier = new DirectToDbApplier(queryExecuter.Object, schemaVersionManager.Object, splitter.Object, new Mock <IDbmsSyntax>().Object, ChangeLogTableName, System.Console.Out);

            directToDbApplier.ApplyScriptContent(changeScript, conteudoSql, true);

            queryExecuter.Verify(x => x.Execute(conteudoSql, It.IsAny <StringBuilder>()), Times.Once);
        }
Exemplo n.º 2
0
        public void atualizar_status_do_script_para_sucess_revised_user()
        {
            const string conteudoSql  = "Create Table tabelaTeste (id int not null, name varchar(45) not null, primary key (id));";
            var          changeScript = new ChangeScript("1.0.0.0", 1);

            splitter.Setup(s => s.Split(It.IsAny <string>())).Returns <string>(s => new[] { s });

            var directToDbApplier = new DirectToDbApplier(queryExecuter.Object, schemaVersionManager.Object, splitter.Object, new Mock <IDbmsSyntax>().Object, ChangeLogTableName, System.Console.Out);

            directToDbApplier.ApplyScriptContent(changeScript, conteudoSql, true);

            schemaVersionManager.Verify(x => x.RecordScriptStatus(changeScript, ScriptStatus.SucessRevisedUser, It.IsAny <string>()), Times.Once);
        }
Exemplo n.º 3
0
        public void nao_criar_tabela_changelog()
        {
            const string conteudoSql  = "Create Table tabelaTeste (id int not null, name varchar(45) not null, primary key (id));";
            var          changeScript = new ChangeScript("1.0.0.0", 1);

            splitter.Setup(s => s.Split(It.IsAny <string>())).Returns <string>(s => new[] { s });
            dbmsSyntax = new MsSqlDbmsSyntax();
            var changeLogTableSqlScript = dbmsSyntax.CreateChangeLogTableSqlScript(ChangeLogTableName);

            var directToDbApplier = new DirectToDbApplier(queryExecuter.Object, schemaVersionManager.Object, splitter.Object, dbmsSyntax, ChangeLogTableName, System.Console.Out);

            directToDbApplier.ApplyScriptContent(changeScript, conteudoSql, false);

            schemaVersionManager.Verify(x => x.RecordScriptStatus(changeScript, ScriptStatus.SucessRevisedUser, It.IsAny <string>()), Times.Once);
            queryExecuter.Verify(x => x.Execute(changeLogTableSqlScript), Times.Never());
        }
Exemplo n.º 4
0
        public void ao_lancar_excecao_quando_executar_script_deve_gravar_status_de_erro_na_changelog()
        {
            var dbmsSyntax2  = new Mock <IDbmsSyntax>();
            var changeScript = new Mock <ChangeScript>("Scripts", 1, new FileInfo("script.sql"), Encoding.UTF8);

            dbmsSyntax2.Setup(x => x.CreateChangeLogTableSqlScript(It.IsAny <string>())).Returns("ScriptCreateChangeLog");
            splitter.Setup(s => s.Split(It.IsAny <string>())).Returns <string>(s => new[] { s });
            changeScript.Setup(x => x.GetContent()).Returns("conteudo do script");
            queryExecuter.Setup(x => x.Execute(It.IsAny <string>(), It.IsAny <StringBuilder>())).Throws(new DummyDbException());

            var directToDbApplier = new DirectToDbApplier(queryExecuter.Object, schemaVersionManager.Object, splitter.Object, dbmsSyntax2.Object, ChangeLogTableName, System.Console.Out);

            directToDbApplier.Invoking(x => x.ApplyChangeScript(changeScript.Object, false)).ShouldThrow <Exception>();

            schemaVersionManager.Verify(s => s.RecordScriptStatus(changeScript.Object, ScriptStatus.Started, It.IsAny <string>()), Times.Once);
            queryExecuter.Verify(x => x.BeginTransaction(), Times.Once);
            queryExecuter.Verify(x => x.Execute(It.IsAny <string>(), It.IsAny <StringBuilder>()), Times.Once);
            schemaVersionManager.Verify(s => s.RecordScriptStatus(changeScript.Object, ScriptStatus.Failure, It.IsAny <string>()), Times.Once);
            queryExecuter.Verify(x => x.CommitTransaction(), Times.Once);
        }
Exemplo n.º 5
0
        public void executar_um_arquivo_de_script_por_vez()
        {
            var dbmsSyntax2  = new Mock <IDbmsSyntax>();
            var changeScript = new Mock <ChangeScript>("Scripts", 1, new FileInfo("script.sql"), Encoding.UTF8);

            dbmsSyntax2.Setup(x => x.CreateChangeLogTableSqlScript(It.IsAny <string>())).Returns("ScriptCreateChangeLog");
            splitter.Setup(s => s.Split(It.IsAny <string>())).Returns <string>(s => new[] { s });
            const string scriptParaExecutar = "script para executar";

            changeScript.Setup(x => x.GetContent()).Returns(scriptParaExecutar);

            var directToDbApplier = new DirectToDbApplier(queryExecuter.Object, schemaVersionManager.Object, splitter.Object, dbmsSyntax2.Object, ChangeLogTableName, System.Console.Out);

            directToDbApplier.ApplyChangeScript(changeScript.Object, true);

            schemaVersionManager.Verify(s => s.RecordScriptStatus(changeScript.Object, ScriptStatus.Started, It.IsAny <string>()), Times.Once);
            queryExecuter.Verify(x => x.BeginTransaction(), Times.Once);
            queryExecuter.Verify(x => x.Execute(scriptParaExecutar, It.IsAny <StringBuilder>()), Times.Once);
            queryExecuter.Verify(e => e.CommitTransaction(), Times.Once());
            schemaVersionManager.Verify(s => s.RecordScriptStatus(changeScript.Object, ScriptStatus.Success, It.IsAny <string>()), Times.Once);
        }
        public void nao_criar_tabela_changelog()
        {
            const string conteudoSql = "Create Table tabelaTeste (id int not null, name varchar(45) not null, primary key (id));";
            var changeScript = new ChangeScript("1.0.0.0", 1);
            splitter.Setup(s => s.Split(It.IsAny<string>())).Returns<string>(s => new[] { s });
            dbmsSyntax = new MsSqlDbmsSyntax();
            var changeLogTableSqlScript = dbmsSyntax.CreateChangeLogTableSqlScript(ChangeLogTableName);

            var directToDbApplier = new DirectToDbApplier(queryExecuter.Object, schemaVersionManager.Object, splitter.Object, dbmsSyntax, ChangeLogTableName, System.Console.Out);
            directToDbApplier.ApplyScriptContent(changeScript, conteudoSql, false);

            schemaVersionManager.Verify(x => x.RecordScriptStatus(changeScript, ScriptStatus.SucessRevisedUser, It.IsAny<string>()), Times.Once);
            queryExecuter.Verify(x => x.Execute(changeLogTableSqlScript), Times.Never());
        }
        public void atualizar_status_do_script_para_sucess_revised_user()
        {
            const string conteudoSql = "Create Table tabelaTeste (id int not null, name varchar(45) not null, primary key (id));";
            var changeScript = new ChangeScript("1.0.0.0", 1);
            splitter.Setup(s => s.Split(It.IsAny<string>())).Returns<string>(s => new[] { s });

            var directToDbApplier = new DirectToDbApplier(queryExecuter.Object, schemaVersionManager.Object, splitter.Object, new Mock<IDbmsSyntax>().Object, ChangeLogTableName, System.Console.Out);
            directToDbApplier.ApplyScriptContent(changeScript, conteudoSql, true);

            schemaVersionManager.Verify(x => x.RecordScriptStatus(changeScript, ScriptStatus.SucessRevisedUser, It.IsAny<string>()), Times.Once);
        }
        public void executar_script_passando_conteudo()
        {
            const string conteudoSql = "Create Table tabelaTeste (id int not null, name varchar(45) not null, primary key (id));";
            var changeScript = new ChangeScript("1.0.0.0", 1);
            splitter.Setup(s => s.Split(It.IsAny<string>())).Returns<string>(s => new[] { s });

            var directToDbApplier = new DirectToDbApplier(queryExecuter.Object, schemaVersionManager.Object, splitter.Object, new Mock<IDbmsSyntax>().Object, ChangeLogTableName, System.Console.Out);
            directToDbApplier.ApplyScriptContent(changeScript, conteudoSql, true);

            queryExecuter.Verify(x => x.Execute(conteudoSql, It.IsAny<StringBuilder>()), Times.Once);
        }
        public void ao_lancar_excecao_quando_executar_script_deve_gravar_status_de_erro_na_changelog()
        {
            var dbmsSyntax2 = new Mock<IDbmsSyntax>();
            var changeScript = new Mock<ChangeScript>("Scripts", 1, new FileInfo("script.sql"), Encoding.UTF8);
            dbmsSyntax2.Setup(x => x.CreateChangeLogTableSqlScript(It.IsAny<string>())).Returns("ScriptCreateChangeLog");
            splitter.Setup(s => s.Split(It.IsAny<string>())).Returns<string>(s => new[] { s });
            changeScript.Setup(x => x.GetContent()).Returns("conteudo do script");
            queryExecuter.Setup(x => x.Execute(It.IsAny<string>(), It.IsAny<StringBuilder>())).Throws(new DummyDbException());

            var directToDbApplier = new DirectToDbApplier(queryExecuter.Object, schemaVersionManager.Object, splitter.Object, dbmsSyntax2.Object, ChangeLogTableName, System.Console.Out);
            directToDbApplier.Invoking(x => x.ApplyChangeScript(changeScript.Object, false)).ShouldThrow<Exception>();

            schemaVersionManager.Verify(s => s.RecordScriptStatus(changeScript.Object, ScriptStatus.Started, It.IsAny<string>()), Times.Once);
            queryExecuter.Verify(x => x.BeginTransaction(), Times.Once);
            queryExecuter.Verify(x => x.Execute(It.IsAny<string>(), It.IsAny<StringBuilder>()), Times.Once);
            schemaVersionManager.Verify(s => s.RecordScriptStatus(changeScript.Object, ScriptStatus.Failure, It.IsAny<string>()), Times.Once);
            queryExecuter.Verify(x => x.CommitTransaction(), Times.Once);
        }
        public void executar_um_arquivo_de_script_por_vez()
        {
            var dbmsSyntax2 = new Mock<IDbmsSyntax>();
            var changeScript = new Mock<ChangeScript>("Scripts", 1, new FileInfo("script.sql"), Encoding.UTF8);
            dbmsSyntax2.Setup(x => x.CreateChangeLogTableSqlScript(It.IsAny<string>())).Returns("ScriptCreateChangeLog");
            splitter.Setup(s => s.Split(It.IsAny<string>())).Returns<string>(s => new[] { s });
            const string scriptParaExecutar = "script para executar";
            changeScript.Setup(x => x.GetContent()).Returns(scriptParaExecutar);

            var directToDbApplier = new DirectToDbApplier(queryExecuter.Object, schemaVersionManager.Object, splitter.Object, dbmsSyntax2.Object, ChangeLogTableName, System.Console.Out);
            directToDbApplier.ApplyChangeScript(changeScript.Object, true);

            schemaVersionManager.Verify(s => s.RecordScriptStatus(changeScript.Object, ScriptStatus.Started, It.IsAny<string>()), Times.Once);
            queryExecuter.Verify(x => x.BeginTransaction(), Times.Once);
            queryExecuter.Verify(x => x.Execute(scriptParaExecutar, It.IsAny<StringBuilder>()), Times.Once);
            queryExecuter.Verify(e => e.CommitTransaction(), Times.Once());
            schemaVersionManager.Verify(s => s.RecordScriptStatus(changeScript.Object, ScriptStatus.Success, It.IsAny<string>()), Times.Once);
        }
        public void TestShouldHandleCreatingChangeLogTableWithSchema()
        {
            this.EnsureTableDoesNotExist("log.Installs");

            var factory = new DbmsFactory(this.Dbms, this.ConnectionString);
            var executer = new QueryExecuter(factory);
            var databaseSchemaManager = new DatabaseSchemaVersionManager(executer, factory.CreateDbmsSyntax(), "log.Installs");

            var applier = new DirectToDbApplier(executer, databaseSchemaManager, new QueryStatementSplitter(),
                factory.CreateDbmsSyntax(), "log.Installs", new NullWriter());
            
            applier.Apply(new ChangeScript[] {}, createChangeLogTable: true);

            this.AssertTableExists("log.Installs");
        }
Exemplo n.º 12
0
        /// <summary>
        /// Executes the a database deployment with the specified config.
        /// </summary>
        /// <param name="config">The config.</param>
        /// <param name="infoWriter">The info writer.</param>
        /// <exception cref="System.InvalidOperationException">SQLCMD mode can only be applied against an mssql database.</exception>
        public void Execute(DbDeployConfig config, TextWriter infoWriter)
        {
            this.Validate(config, infoWriter);

            infoWriter.WriteLine();
            infoWriter.WriteLine("==========================================================");
            infoWriter.WriteLine(this.GenerateWelcomeString());

            var factory = new DbmsFactory(config.Dbms, config.ConnectionString);
            
            var dbmsSyntax = factory.CreateDbmsSyntax();

            var queryExecuter = new QueryExecuter(factory);

            var databaseSchemaVersionManager = new DatabaseSchemaVersionManager(queryExecuter, dbmsSyntax, config.ChangeLogTableName);

            var scanner = new DirectoryScanner(infoWriter, config.Encoding);

            var changeScriptRepository = new ChangeScriptRepository(scanner.GetChangeScriptsForDirectory(config.ScriptDirectory));

            IChangeScriptApplier doScriptApplier;
            TextWriter doWriter = null;
            QueryExecuter applierExecutor = null;

            if (config.OutputFile != null) 
            {
                doWriter = new StreamWriter(config.OutputFile.OpenWrite(), config.Encoding);

                doScriptApplier = new TemplateBasedApplier(
                    doWriter,
                    dbmsSyntax,
                    config.ChangeLogTableName,
                    config.Delimiter,
                    config.DelimiterType,
                    config.TemplateDirectory);
            }
            else if (config.UseSqlCmd)
            {
                // Verify database is MSSQL.
                if (!string.Equals(config.Dbms, "mssql", StringComparison.InvariantCultureIgnoreCase))
                {
                    throw new InvalidOperationException("SQLCMD mode can only be applied against an mssql database.");
                }

                doScriptApplier = new SqlCmdApplier(
                    config.ConnectionString,
                    databaseSchemaVersionManager,
                    dbmsSyntax,
                    config.ChangeLogTableName,
                    infoWriter);
            }
            else 
            {
                var splitter = new QueryStatementSplitter
                {
                    Delimiter = config.Delimiter,
                    DelimiterType = config.DelimiterType,
                    LineEnding = config.LineEnding,
                };

                // Do not share query executor between schema manager and applier, since a failure in one will effect the other.
                applierExecutor = new QueryExecuter(factory);
                doScriptApplier = new DirectToDbApplier(
                    applierExecutor, 
                    databaseSchemaVersionManager, 
                    splitter, 
                    dbmsSyntax, 
                    config.ChangeLogTableName,
                    infoWriter);
            }

            IChangeScriptApplier undoScriptApplier = null;
            TextWriter undoWriter = null;

            if (config.UndoOutputFile != null) 
            {
                undoWriter = new StreamWriter(config.UndoOutputFile.OpenWrite(), config.Encoding);

                undoScriptApplier = new UndoTemplateBasedApplier(
                    undoWriter,
                    dbmsSyntax,
                    config.ChangeLogTableName,
                    config.Delimiter,
                    config.DelimiterType,
                    config.TemplateDirectory);
            }

            try
            {
                var controller = new Controller(
                    changeScriptRepository, 
                    databaseSchemaVersionManager, 
                    doScriptApplier, 
                    undoScriptApplier, 
                    config.AutoCreateChangeLogTable,
                    infoWriter);

                controller.ProcessChangeScripts(config.LastChangeToApply, config.ForceUpdate);

                queryExecuter.Close();

                if (applierExecutor != null)
                {
                    applierExecutor.Close();
                }
            }
            finally
            {
                if (doWriter != null)
                {
                    doWriter.Dispose();
                }

                if (undoWriter != null)
                {
                    undoWriter.Dispose();
                }
            }
        }
Exemplo n.º 13
0
        public void Go()
        {
            this.Validate();

            this.InfoWriter.WriteLine(this.GenerateWelcomeString());
            
            var factory = new DbmsFactory(this.Dbms, this.ConnectionString);
            
            var dbmsSyntax = factory.CreateDbmsSyntax();

            QueryExecuter queryExecuter = new QueryExecuter(factory);

            var databaseSchemaVersionManager =
                    new DatabaseSchemaVersionManager(queryExecuter, dbmsSyntax, this.ChangeLogTableName);

            var scanner = new DirectoryScanner(this.InfoWriter, this.Encoding);

            var changeScriptRepository =
                    new ChangeScriptRepository(scanner.GetChangeScriptsForDirectory(this.ScriptDirectory));

            IChangeScriptApplier doScriptApplier;
            TextWriter doWriter = null;

            if (this.OutputFile != null) 
            {
                doWriter = new StreamWriter(this.OutputFile.OpenWrite(), this.Encoding);

                doScriptApplier = new TemplateBasedApplier(
                    doWriter, 
                    this.Dbms, 
                    this.ChangeLogTableName, 
                    this.Delimiter, 
                    this.DelimiterType, 
                    this.TemplateDir);
            } 
            else 
            {
                QueryStatementSplitter splitter = new QueryStatementSplitter
                {
                    Delimiter = this.Delimiter,
                    DelimiterType = this.DelimiterType,
                    LineEnding = this.LineEnding,
                };

                doScriptApplier = new DirectToDbApplier(
                    queryExecuter, 
                    databaseSchemaVersionManager, 
                    splitter, 
                    this.InfoWriter);
            }

            IChangeScriptApplier undoScriptApplier = null;
            TextWriter undoWriter = null;

            if (this.UndoOutputFile != null) 
            {
                undoWriter = new StreamWriter(this.UndoOutputFile.OpenWrite(), this.Encoding);

                undoScriptApplier = new UndoTemplateBasedApplier(
                    undoWriter, 
                    this.Dbms, 
                    this.ChangeLogTableName, 
                    this.Delimiter, 
                    this.DelimiterType, 
                    this.TemplateDir);
            }

            try
            {
                Controller controller = new Controller(
                    changeScriptRepository, 
                    databaseSchemaVersionManager, 
                    doScriptApplier, 
                    undoScriptApplier, 
                    this.InfoWriter);

                controller.ProcessChangeScripts(this.LastChangeToApply);

                queryExecuter.Close();
            }
            finally
            {
                if (doWriter != null)
                    doWriter.Dispose();

                if (undoWriter != null)
                    undoWriter.Dispose();
            }
        }