public void EnsureSchemaCreated(ConnectionSettings settings) { string assembly = SqlDatabaseManager.SQL_FILE_ASSEMBLY; string sqlFile = string.Format(SqlDatabaseManager.SQL_FILE_TEMPLATE, "CreateSchema"); string sql = _locator.ReadTextFile(assembly, sqlFile); _executor.ExecuteNonQueryTransactional(settings, sql); }
public void MarkScriptAsExecuted(ConnectionSettings settings, string scriptFilename, ITaskObserver task, string hash = "") { //for everytime scripts just delete the row. We could update it but either way has the same result if (!string.IsNullOrEmpty(hash)) { string deleteTemplate = "delete from usd_AppliedDatabaseScript where ScriptFile = '{0}'"; string deletesql = string.Format(deleteTemplate, scriptFilename); _executor.ExecuteNonQueryTransactional(settings, deletesql); } string insertTemplate = "insert into usd_AppliedDatabaseScript (ScriptFile, DateApplied, hash) values ('{0}', getdate(), '{1}')"; string sql = string.Format(insertTemplate, scriptFilename, hash); _executor.ExecuteNonQueryTransactional(settings, sql); }
public void CorrectlyExecutesScriptIfItHasntAlreadyBeenExecuted() { var settings = new ConnectionSettings("server", "db", true, null, null); string scriptFile = @"c:\scripts\TestData\01_Test.sql"; string fileContents = "file contents..."; MockRepository mocks = new MockRepository(); IScriptExecutionTracker executionTracker = mocks.StrictMock <IScriptExecutionTracker>(); IFileSystem fileSystem = mocks.StrictMock <IFileSystem>(); IQueryExecutor queryExecutor = mocks.StrictMock <IQueryExecutor>(); ITaskObserver taskObserver = mocks.StrictMock <ITaskObserver>(); Expect.Call(executionTracker.TestDataScriptAlreadyExecuted(settings, "01_Test.sql")).Return(false); taskObserver.Log("Executing: 01_Test.sql in a transaction"); Expect.Call(fileSystem.ReadTextFile(scriptFile)).Return(fileContents); Expect.Call(queryExecutor.ScriptSupportsTransactions(fileContents)).Return(true); queryExecutor.ExecuteNonQueryTransactional(settings, fileContents); executionTracker.MarkTestDataScriptAsExecuted(settings, "01_Test.sql", taskObserver); mocks.ReplayAll(); ITestDataScriptExecutor executor = new TestDataScriptExecutor(executionTracker, queryExecutor, fileSystem); executor.Execute(scriptFile, settings, taskObserver); mocks.VerifyAll(); }
public void Execute(string fullFilename, ConnectionSettings settings, ITaskObserver taskObserver, bool logOnly = false) { string scriptFilename = getFilename(fullFilename); if (_executionTracker.ScriptAlreadyExecuted(settings, scriptFilename)) { taskObserver.Log(string.Format("Skipping (already executed): {0}{1}", getLastFolderName(fullFilename), scriptFilename)); } else { if (!logOnly) { string sql = _fileSystem.ReadTextFile(fullFilename); if (!_executor.ScriptSupportsTransactions(sql)) { taskObserver.Log(string.Format("Executing: {0}{1}", getLastFolderName(fullFilename), scriptFilename)); _executor.ExecuteNonQuery(settings, sql, true); } else { taskObserver.Log(string.Format("Executing: {0}{1} in a transaction", getLastFolderName(fullFilename), scriptFilename)); _executor.ExecuteNonQueryTransactional(settings, sql); } } else { taskObserver.Log(string.Format("Executing: {0}{1} in log only mode", getLastFolderName(fullFilename), scriptFilename)); } _executionTracker.MarkScriptAsExecuted(settings, scriptFilename, taskObserver); } }
public void Execute(string fullFilename, ConnectionSettings settings, ITaskObserver taskObserver) { string scriptFilename = getFilename(fullFilename); if (_executionTracker.TestDataScriptAlreadyExecuted(settings, scriptFilename)) { taskObserver.Log(string.Format("Skipping (already executed): {0}", scriptFilename)); } else { string sql = _fileSystem.ReadTextFile(fullFilename); if (!_executor.ScriptSupportsTransactions(sql)) { taskObserver.Log(string.Format("Executing: {0}", scriptFilename)); _executor.ExecuteNonQuery(settings, sql, true); _executionTracker.MarkTestDataScriptAsExecuted(settings, scriptFilename, taskObserver); } else { taskObserver.Log(string.Format("Executing: {0} in a transaction", scriptFilename)); _executor.ExecuteNonQueryTransactional(settings, sql); _executionTracker.MarkTestDataScriptAsExecuted(settings, scriptFilename, taskObserver); } } }
public void CorrectlyMarksScriptAsExecuted() { ConnectionSettings settings = new ConnectionSettings(string.Empty, string.Empty, false, string.Empty, string.Empty); string scriptFilename = "03_Test.sql"; MockRepository mocks = new MockRepository(); IQueryExecutor queryExecutor = mocks.StrictMock <IQueryExecutor>(); ITaskObserver observer = mocks.StrictMock <ITaskObserver>(); queryExecutor.ExecuteNonQueryTransactional(settings, "insert into usd_AppliedDatabaseScript (ScriptFile, DateApplied, hash) values ('03_Test.sql', getdate(), '')"); mocks.ReplayAll(); IScriptExecutionTracker tracker = new ScriptExecutionTracker(queryExecutor); tracker.MarkScriptAsExecuted(settings, scriptFilename, observer); mocks.VerifyAll(); }
public void CorrectlyInitializesSchema() { string assembly = AliaSQL.Core.Services.Impl.SqlDatabaseManager.SQL_FILE_ASSEMBLY; string sqlFile = string.Format(AliaSQL.Core.Services.Impl.SqlDatabaseManager.SQL_FILE_TEMPLATE, "CreateSchema"); ConnectionSettings settings = new ConnectionSettings(String.Empty, String.Empty, false, String.Empty, String.Empty); string sqlScript = "SQL script..."; MockRepository mocks = new MockRepository(); IResourceFileLocator fileLocator = mocks.StrictMock <IResourceFileLocator>(); IQueryExecutor queryExecutor = mocks.StrictMock <IQueryExecutor>(); Expect.Call(fileLocator.ReadTextFile(assembly, sqlFile)).Return(sqlScript); queryExecutor.ExecuteNonQueryTransactional(settings, sqlScript); mocks.ReplayAll(); ISchemaInitializer versioner = new SchemaInitializer(fileLocator, queryExecutor); versioner.EnsureSchemaCreated(settings); mocks.VerifyAll(); }