public void ExecutionEngineTest_ASyncCancelAfterExecutionDone()
        {
            string sqlStatement = "select 1";

            ExecutionEngineConditions conditions = new ExecutionEngineConditions();

            conditions.IsTransactionWrapped = true;
            conditions.IsParseOnly          = false;
            conditions.IsHaltOnError        = false;

            TestExecutor executor = new TestExecutor(sqlStatement, connection, conditions, true);

            executor.SyncCancel = false;
            executor.Run();

            Assert.True(!executor.CancelEventFired);
            Assert.NotNull(executor.ScriptExecuteThread);
            if (executor.ScriptExecuteThread != null)
            {
                Assert.True(!executor.ScriptExecuteThread.IsAlive);
            }
            Assert.Equal(ScriptExecutionResult.Success | ScriptExecutionResult.Cancel, executor.ExecutionResult);
        }
        public void ExecutionEngineTest_SimpleTest()
        {
            string sqlStatement = "SELECT * FROM sysobjects";

            ExecutionEngineConditions conditions = new ExecutionEngineConditions();

            conditions.IsTransactionWrapped = true;
            conditions.IsParseOnly          = false;
            conditions.IsHaltOnError        = false;

            TestExecutor executor = new TestExecutor(sqlStatement, connection, conditions);

            executor.Run();

            //Get the expected values
            List <string> batchScripts = executor.BatchScripts;

            ExecuteSqlBatch(batchScripts, connection);

            Assert.Equal(ScriptExecutionResult.Success, executor.ExecutionResult);
            Assert.True(CompareTwoIntLists(executor.ResultCountQueue, expResultCounts));
            Assert.Equal(1, executor.BatchFinshedEventCounter);
        }
        public void ExecutionEngineTest_ParseOnly_InvalidScript()
        {
            string sqlStatement = "select ** from authors";
            ExecutionEngineConditions conditions = new ExecutionEngineConditions();

            conditions.IsTransactionWrapped = true;
            conditions.IsParseOnly          = true;
            conditions.IsHaltOnError        = false;

            TestExecutor executor = new TestExecutor(sqlStatement, connection, conditions);

            executor.Run();

            //Get the expected values
            List <string> batchScripts = executor.BatchScripts;

            ExecuteSqlBatch(batchScripts, connection);

            Assert.Equal(ScriptExecutionResult.Success | ScriptExecutionResult.Failure, executor.ExecutionResult);
            Assert.True(!executor.ParserExecutionError);
            Assert.True(executor.ResultCountQueue.Count == 0);
            Assert.True(CompareTwoStringLists(executor.ErrorMessageQueue, expErrorMessage));
        }
        public void ExecutionEngineTest_ASyncCancel()
        {
            //string sqlStatement = "--This is a test\nSELECT * FROM sysobjects as t\nGO 50\n use pubsplus \n select * from titles\n go" ;

            string sqlStatement = "waitfor delay '0:0:10'";
            ExecutionEngineConditions conditions = new ExecutionEngineConditions();

            conditions.IsTransactionWrapped = true;
            conditions.IsParseOnly          = false;
            conditions.IsHaltOnError        = false;

            TestExecutor executor = new TestExecutor(sqlStatement, connection, conditions, true);

            executor.SyncCancel = false;
            executor.Run();

            Assert.True(executor.CancelEventFired);
            Assert.NotNull(executor.ScriptExecuteThread);
            if (executor.ScriptExecuteThread != null)
            {
                Assert.True(!executor.ScriptExecuteThread.IsAlive);
            }
            Assert.Equal(ScriptExecutionResult.Cancel, executor.ExecutionResult);
        }
        public void ExecutionEngineTest_HaltOnError_OneBatch()
        {
            string sqlStatement = "select * from authors\n go 30\n";
            ExecutionEngineConditions conditions = new ExecutionEngineConditions();

            conditions.IsTransactionWrapped = true;
            conditions.IsParseOnly          = false;
            conditions.IsHaltOnError        = true;

            TestExecutor executor = new TestExecutor(sqlStatement, connection, conditions);

            executor.Run();

            //Get the expected values
            List <string> batchScripts = executor.BatchScripts;

            ExecuteSqlBatch(batchScripts, connection);

            Assert.Equal(ScriptExecutionResult.Halted | ScriptExecutionResult.Failure, executor.ExecutionResult);
            Assert.True(CompareTwoStringLists(executor.ErrorMessageQueue, expErrorMessage));
            Assert.True(CompareTwoIntLists(executor.ResultCountQueue, expResultCounts));
            Assert.True(executor.ResultCountQueue.Count == 0);
            Assert.Equal(0, executor.BatchFinshedEventCounter);
        }
        public void ExecutionEngineTest_MixedValidandInvalidScript()
        {
            string sqlStatement = "SELECT * FROM Authors \n Go\n select * from sysobjects \n go\nif exists (select * from sysobjects where id = object_id('MyTab')) DROP TABLE MyTab2";

            ExecutionEngineConditions conditions = new ExecutionEngineConditions();

            conditions.IsTransactionWrapped = true;
            conditions.IsParseOnly          = false;
            conditions.IsHaltOnError        = false;

            TestExecutor executor = new TestExecutor(sqlStatement, connection, conditions);

            executor.Run();

            //Get the expected values
            List <string> batchScripts = executor.BatchScripts;

            ExecuteSqlBatch(batchScripts, connection);

            Assert.Equal(executor.ExecutionResult, ScriptExecutionResult.Success | ScriptExecutionResult.Failure);
            Assert.True(!executor.ParserExecutionError);
            Assert.True(CompareTwoStringLists(executor.ErrorMessageQueue, expErrorMessage));
            Assert.True(CompareTwoIntLists(executor.ResultCountQueue, expResultCounts));
        }
        public void ExecutionEngineTest_MultipleInvalidScript_SingleBatch()
        {
            string sqlStatement = "select ** from products \n insert into products values (1,'abc')\n go \n";

            ExecutionEngineConditions conditions = new ExecutionEngineConditions();

            conditions.IsTransactionWrapped = true;
            conditions.IsParseOnly          = false;
            conditions.IsHaltOnError        = false;

            TestExecutor executor = new TestExecutor(sqlStatement, connection, conditions);

            executor.Run();

            //Get the expected values
            List <string> batchScripts = executor.BatchScripts;

            ExecuteSqlBatch(batchScripts, connection);

            Assert.Equal(ScriptExecutionResult.Success | ScriptExecutionResult.Failure, executor.ExecutionResult);
            Assert.True(!executor.ParserExecutionError);
            Assert.True(CompareTwoStringLists(executor.ErrorMessageQueue, expErrorMessage));
            Assert.True(CompareTwoIntLists(executor.ResultCountQueue, expResultCounts));
        }