コード例 #1
0
ファイル: ListBuilder.cs プロジェクト: Waltervondehans/NBi
 /// <summary>
 /// Execute the command and take the first cell of each row to build an Enumerable of string
 /// </summary>
 /// <param name="cmd">A sql or mdx query to execute</param>
 /// <returns>The first cell of row returned by the query</returns>
 public virtual IEnumerable<string> Build(IDbCommand cmd)
 {
     var qe = new QueryEngineFactory().GetExecutor(cmd);
     var ds = qe.Execute();
     var list = Load(ds);
     return list;
 }
コード例 #2
0
        public void PersistResultSets()
        {
            if (ProgressStatusChanged != null)
                ProgressStatusChanged(this, new ProgressStatusEventArgs(string.Format("Parsing directory {0}", DirectoryQueries)));

            var files = Directory.GetFiles(DirectoryQueries, Pattern);
            var i = 1;

            foreach (var file in files)
            {
                i++;

                if (ProgressStatusChanged != null)
                    ProgressStatusChanged(this, new ProgressStatusEventArgs(String.Format("Executing query {0} of {1}", i, files.Length+1), i, files.Length+1));

                var query = File.ReadAllText(file);
                var qe = new QueryEngineFactory().GetExecutor(query, ConnectionString);

                var ds = qe.Execute();

                if (ProgressStatusChanged != null)
                    ProgressStatusChanged(this, new ProgressStatusEventArgs(String.Format("Persisting results set for {0} of {1}", i, files.Length+1), i, files.Length+1));
                ResultSetWriter.Write(Path.GetFileNameWithoutExtension(file) + String.Format(".csv"), ds);
            }

            if (ProgressStatusChanged != null)
                ProgressStatusChanged(this, new ProgressStatusEventArgs(string.Format("Directory {0} parsed", DirectoryQueries)));
        }
コード例 #3
0
ファイル: ResultSetBuilder.cs プロジェクト: zyh329/nbi
 public virtual ResultSet Build(IDbCommand cmd)
 {
     var qe = new QueryEngineFactory().GetExecutor(cmd);
     var ds = qe.Execute();
     var rs = new ResultSet();
     rs.Load(ds);
     return rs;
 }
コード例 #4
0
        /// <summary>
        /// Execute the command and take the first cell of each row to build an Enumerable of string
        /// </summary>
        /// <param name="cmd">A sql or mdx query to execute</param>
        /// <returns>The first cell of row returned by the query</returns>
        public virtual IEnumerable <string> Build(IDbCommand cmd)
        {
            var qe   = new QueryEngineFactory().GetExecutor(cmd);
            var ds   = qe.Execute();
            var list = Load(ds);

            return(list);
        }
コード例 #5
0
        public void Parse_CorrectTableName_Success()
        {
            var sql = "SELECT * FROM [HumanResources].[Department];";
            var cmd = new SqlCommand(sql, new SqlConnection(ConnectionStringReader.GetSqlClient()));
            var qp = new QueryEngineFactory().GetParser(cmd);

            var res = qp.Parse();

            Assert.That(res.IsSuccesful, Is.True);
        }
コード例 #6
0
        public void Parse_WrongField_Failed()
        {
            var sql = "select [DepartmentID], Name, WrongField from [HumanResources].[Department];";
            var cmd = new SqlCommand(sql, new SqlConnection(ConnectionStringReader.GetSqlClient()));
            var qp = new QueryEngineFactory().GetParser(cmd);

            var res = qp.Parse();

            Assert.That(res.IsSuccesful, Is.False);
            Assert.That(res.Errors[0], Is.EqualTo("Invalid column name 'WrongField'."));
        }
コード例 #7
0
        public void CheckPerformance_OneQuery_ReturnElapsedTime()
        {
            var sql = "WAITFOR DELAY '00:00:00';";
            var cmd = new SqlCommand(sql, new SqlConnection(ConnectionStringReader.GetSqlClient()));

            var qp = new QueryEngineFactory().GetPerformance(cmd);
            var res = qp.CheckPerformance();

            Assert.That(res.TimeElapsed.TotalMilliseconds, Is.GreaterThanOrEqualTo(0).And.LessThan(5000));
            Assert.That(res.IsTimeOut, Is.False);
        }
コード例 #8
0
        public void CheckPerformance_OneQueryHavingTimeout_ReturnTimeoutInfo()
        {
            var sql = "WAITFOR DELAY '00:00:03';";
            var cmd = new SqlCommand(sql, new SqlConnection(ConnectionStringReader.GetSqlClient()));

            var qp = new QueryEngineFactory().GetPerformance(cmd);
            var res = qp.CheckPerformance(1000);

            Assert.That(res.TimeOut.TotalMilliseconds, Is.EqualTo(1000));
            Assert.That(res.IsTimeOut, Is.True);
        }
コード例 #9
0
        public void Parse_DontExecuteEffectivelyQuery()
        {
            var sqlCount = @"SELECT COUNT(*) from [HumanResources].[Department]";
            var sql = @"DELETE from [HumanResources].[Department]";

            var countBefore = ExecuteCount(sqlCount);
            if (countBefore == 0) //If nothing was present we cannot assert
                Assert.Inconclusive();

            var cmd = new SqlCommand(sql, new SqlConnection(ConnectionStringReader.GetSqlClient()));
            var qp = new QueryEngineFactory().GetParser(cmd);

            var res = qp.Parse();

            if (!res.IsSuccesful)//If syntax is incorrect we cannot assert
                Assert.Inconclusive();

            var countAfter = ExecuteCount(sqlCount);

            Assert.That(countAfter, Is.EqualTo(countBefore));
        }
コード例 #10
0
        public void CreateResultSet(string queriesDirectory)
        {
            var queryFiles = System.IO.Directory.EnumerateFiles(queriesDirectory);

            if(!Directory.Exists(_resultSetWriter.PersistencePath))
                Directory.CreateDirectory(_resultSetWriter.PersistencePath);

            foreach (var queryFile in queryFiles)
            {
                string query;
                using (StreamReader infile = new StreamReader(Path.Combine(queriesDirectory, queryFile)))
                {
                    query=infile.ReadToEnd();
                }

                var qe = new QueryEngineFactory().GetExecutor(query, ConnectionString);

                var ds = qe.Execute();

                var resultFile = Path.GetFileName(Path.ChangeExtension(queryFile,"csv"));
                _resultSetWriter.Write(resultFile, ds);
            }
        }
コード例 #11
0
        public void Parse_WrongSyntax_Failed()
        {
            var sql = "SELECTION [DepartmentID], Name, WrongField1, WrongField2 from [HumanResources].[Department];";
            var cmd = new SqlCommand(sql, new SqlConnection(ConnectionStringReader.GetSqlClient()));
            var qp = new QueryEngineFactory().GetParser(cmd);

            var res = qp.Parse();

            Assert.That(res.IsSuccesful, Is.False);
            Assert.That(res.Errors[0], Is.EqualTo("Incorrect syntax near 'SELECTION'."));
        }
コード例 #12
0
        public void Parse_WrongTableName_Failed()
        {
            var sql = "SELECT * FROM WrongTableName;";
            var cmd = new SqlCommand(sql, new SqlConnection(ConnectionStringReader.GetSqlClient()));
            var qp = new QueryEngineFactory().GetParser(cmd);

            var res = qp.Parse();

            Assert.That(res.IsSuccesful, Is.False);
            Assert.That(res.Errors[0], Is.EqualTo("Invalid object name 'WrongTableName'."));
        }
コード例 #13
0
ファイル: TestCasesManager.cs プロジェクト: zyh329/nbi
        public void ReadFromQuery(string query, string connectionString)
        {
            var queryEngineFactory = new QueryEngineFactory();
            var queryEngine = queryEngineFactory.GetExecutor(query, connectionString);
            var ds = queryEngine.Execute();
            content = ds.Tables[0];

            variables.Clear();
            foreach (DataColumn col in Content.Columns)
                variables.Add(col.ColumnName);
        }