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 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 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 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 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"); }
/// <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(); } } }
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(); } }