Exemple #1
0
        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);
        }
Exemple #3
0
        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();
        }
Exemple #4
0
        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);
            }
        }
Exemple #5
0
        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();
        }