public Execute ( string fullFilename, AliaSQL.Core.Model.ConnectionSettings settings, ITaskObserver taskObserver, bool logOnly = false ) : void | ||
fullFilename | string | |
settings | AliaSQL.Core.Model.ConnectionSettings | |
taskObserver | ITaskObserver | |
logOnly | bool | |
리턴 | void |
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 CorrectlyExecutesScriptIfItHasntAlreadyBeenExecuted() { ConnectionSettings settings = getConnectionSettings(); string scriptFile = @"c:\scripts\Update\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.ScriptAlreadyExecuted(settings, "01_Test.sql")).Return(false); taskObserver.Log("Executing: 01_Test.sql in a transaction"); Expect.Call(fileSystem.ReadTextFile(scriptFile)).Return(fileContents); queryExecutor.ExecuteNonQueryTransactional(settings, fileContents); executionTracker.MarkScriptAsExecuted(settings, "01_Test.sql", taskObserver); mocks.ReplayAll(); IChangeScriptExecutor executor = new ChangeScriptExecutor(executionTracker, queryExecutor, fileSystem); executor.Execute(scriptFile, settings, taskObserver); mocks.VerifyAll(); }