Ejemplo n.º 1
0
        private AdoQueryPayload GenerateRankingQuery(SearchRequest searchRequest)
        {
            var queryPayload = new AdoQueryPayload();
            BuildRankingQuery(queryPayload, searchRequest);

            return queryPayload;
        }
        public void When_HasDateRangeAndLimitAndServers_ThenQueryIsCorrect()
        {
            // ARRANGE
            var request = new SearchRequest();
            request.DateRange = new DateRange() { From = new DateTime(2016, 1, 1), To = new DateTime(2016, 1, 2) };
            request.Limit = 100;
            request.Servers.Add("Frontend1");
            request.Servers.Add("Frontend2");
            request.QueryType = QueryType.Ranking;

            string expectedTop = "100";
            string expectedPredicates = @"JOIN Server AS S WITH(NOLOCK) ON T.ServerId = S.ServerId
WHERE T.OccurredAt BETWEEN @FromDate AND @ToDate
AND S.ServerName IN (@Param1,@Param2)";
            string expectedQuery = string.Format(BaseRankingQuery, expectedTop, expectedPredicates, string.Empty);

            // ACT
            var generator = CreateSut();
            var queryPayload = generator.Generate(request);
            var query = queryPayload.GetQueryText();

            // ASSERT
            Assert.AreEqual(expectedQuery, query);
            Assert.AreEqual(4, queryPayload.Parameters.Count);
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.DateTime && (DateTime)x.Value == new DateTime(2016, 1, 1)));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.DateTime && (DateTime)x.Value == new DateTime(2016, 1, 2)));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.VarChar && x.Value.Equals("Frontend1")));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.VarChar && x.Value.Equals("Frontend2")));
        }
        public void When_HasDateRangeAndLimitAndFrequencyGreaterThan_ThenQueryIsCorrect()
        {
            // ARRANGE
            var request = new SearchRequest();
            request.DateRange = new DateRange() { From = new DateTime(2016, 1, 1), To = new DateTime(2016, 1, 2) };
            request.Limit = 100;
            request.MinFrequency = 2;
            request.QueryType = QueryType.Ranking;

            string expectedTop = "100";
            string expectedPredicates = "WHERE T.OccurredAt BETWEEN @FromDate AND @ToDate";
            string expectedHaving = "HAVING SUM(T.Frequency) >= 2" + Environment.NewLine;
            string expectedQuery = string.Format(BaseRankingQuery, expectedTop, expectedPredicates, expectedHaving);

            // ACT
            var generator = CreateSut();
            var queryPayload = generator.Generate(request);
            var query = queryPayload.GetQueryText();

            // ASSERT
            Assert.AreEqual(expectedQuery, query);
            Assert.AreEqual(2, queryPayload.Parameters.Count);
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.DateTime && (DateTime)x.Value == new DateTime(2016, 1, 1)));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.DateTime && (DateTime)x.Value == new DateTime(2016, 1, 2)));
        }
Ejemplo n.º 4
0
        public SearchRequest Parse(IList<LqlToken> tokens)
        {
            LoadSequenceStack(tokens);
            _lookaheadFirst = _tokenSequence.Pop();
            _lookaheadSecond = _tokenSequence.Pop();
            _searchRequest = new SearchRequest();

            Match();

            DiscardToken(TokenType.SequenceTerminator);

            return _searchRequest;
        }
Ejemplo n.º 5
0
 public AdoQueryPayload Generate(SearchRequest searchRequest)
 {
     switch (searchRequest.QueryType)
     {
         case QueryType.Ranking:
             return GenerateRankingQuery(searchRequest);
         case QueryType.Aggregation:
             return GenerateAggregationQuery(searchRequest);
         case QueryType.Messages:
             return GenerateMessagesQuery(searchRequest);
         default:
             throw new Exception("Unsupported query type received");
     }
 }
Ejemplo n.º 6
0
        private void BuildRankingQuery(AdoQueryPayload queryPayload, SearchRequest searchRequest)
        {
            queryPayload.AppendLine("SELECT TOP " + searchRequest.Limit);
            queryPayload.AppendLine(@"        ED.FingerprintText
        ,ED.ApplicationId
        ,ED.OriginExceptionType
        ,ED.OriginStackFrame
        ,ED.LowestAppStackFrame
        ,ED.HighestAppStackFrame
        ,SUM(T.Frequency) AS TotalErrors
FROM Timeline T WITH(NOLOCK)
JOIN ErrorDefinition AS ED WITH(NOLOCK) ON T.Fingerprint = ED.Fingerprint");

            // if we have one or more Definition Groups then we'll need to add date and server filters
            // which are not included in Definition Group sub queries
            if (!searchRequest.Groups.Any() || ExistDefinitionOnlySearchGroups(searchRequest.Groups))
            {
                AddServerJoin(queryPayload, searchRequest.Servers);
                queryPayload.Append("WHERE ");
                AddDateRangeClause(queryPayload, searchRequest.DateRange, "T");
                AddServersClause(queryPayload, searchRequest.Servers, false);
            }
            else
            {
                queryPayload.AppendLine("WHERE 1=1");
            }

            AddMatchConditionGroups(queryPayload, searchRequest.Groups, searchRequest.DateRange, searchRequest.Servers);

            queryPayload.AppendLine(@"GROUP BY ED.FingerprintText
        ,ED.ApplicationId
        ,ED.OriginExceptionType
        ,ED.OriginStackFrame
        ,ED.LowestAppStackFrame
        ,ED.HighestAppStackFrame");

            if(searchRequest.MinFrequency.HasValue)
                queryPayload.AppendLine("HAVING SUM(T.Frequency) >= " + searchRequest.MinFrequency.Value);

            queryPayload.Append(@"ORDER BY TotalErrors DESC
        ,ED.ApplicationId
        ,ED.HighestAppStackFrame
OPTION(MAXDOP 1)");

        }
Ejemplo n.º 7
0
 private AdoQueryPayload GenerateMessagesQuery(SearchRequest searchRequest)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 8
0
 public SearchResponse Search(SearchRequest searchRequest)
 {
     throw new NotImplementedException();
 }
        public void When_HasDateRangeAndLimitAndOneGroupWithOneMessageNotEqualsMatchCondition_ThenQueryIsCorrect()
        {
            // ARRANGE
            var request = new SearchRequest();
            request.DateRange = new DateRange() { From = new DateTime(2016, 1, 1), To = new DateTime(2016, 1, 2) };
            request.Limit = 100;
            request.QueryType = QueryType.Ranking;

            request.Groups.Add(new MatchConditionGroup()
            {
                MatchConditions = new List<MatchCondition>()
                {
                    new MatchCondition()
                    {
                        Object = LqlObject.Message,
                        Operator = LqlOperator.NotEquals,
                        Value = "An error happened",
                    }
                }
            });

            string expectedTop = "100";
            string expectedPredicates = @"WHERE 1=1
AND T.TimelineId IN (
   SELECT DISTINCT T.TimelineId FROM Timeline T WITH(NOLOCK)
   WHERE T.OccurredAt BETWEEN @FromDate AND @ToDate
   AND T.MessageDetails <> @Param1
)";
            string expectedQuery = string.Format(BaseRankingQuery, expectedTop, expectedPredicates, string.Empty);

            // ACT
            var generator = CreateSut();
            var queryPayload = generator.Generate(request);
            var query = queryPayload.GetQueryText();

            // ASSERT
            Assert.AreEqual(expectedQuery, query);
            Assert.AreEqual(3, queryPayload.Parameters.Count);
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.DateTime && (DateTime)x.Value == new DateTime(2016, 1, 1)));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.DateTime && (DateTime)x.Value == new DateTime(2016, 1, 2)));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.VarChar && x.Value.Equals("An error happened")));
        }
Ejemplo n.º 10
0
        public void When_HasDateRangeAndLimitAndOneGroupWithOneStackFrameNotInMatchCondition_ThenQueryIsCorrect()
        {
            // ARRANGE
            var request = new SearchRequest();
            request.DateRange = new DateRange() { From = new DateTime(2016, 1, 1), To = new DateTime(2016, 1, 2) };
            request.Limit = 100;
            request.QueryType = QueryType.Ranking;

            request.Groups.Add(new MatchConditionGroup()
            {
                MatchConditions = new List<MatchCondition>()
                {
                    new MatchCondition()
                    {
                        Object = LqlObject.StackFrame,
                        Operator = LqlOperator.NotIn,
                        Values = new List<string>() { "MyApp.MyClass.MyMethod()", "MyApp.MyClass.MyOtherMethod()"}
                    }
                }
            });

            string expectedTop = "100";
            string expectedPredicates = @"WHERE T.OccurredAt BETWEEN @FromDate AND @ToDate
AND T.Fingerprint IN (
   SELECT DISTINCT ED.Fingerprint FROM ErrorDefinition ED WITH(NOLOCK)
   JOIN ErrorBreakdown AS EB WITH(NOLOCK) ON ED.Fingerprint = EB.Fingerprint
   WHERE EB.StackFrame NOT IN (@Param1,@Param2)
)";
            string expectedQuery = string.Format(BaseRankingQuery, expectedTop, expectedPredicates, string.Empty);

            // ACT
            var generator = CreateSut();
            var queryPayload = generator.Generate(request);
            var query = queryPayload.GetQueryText();

            // ASSERT
            Assert.AreEqual(expectedQuery, query);
            Assert.AreEqual(4, queryPayload.Parameters.Count);
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.DateTime && (DateTime)x.Value == new DateTime(2016, 1, 1)));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.DateTime && (DateTime)x.Value == new DateTime(2016, 1, 2)));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.VarChar && x.Value.Equals("MyApp.MyClass.MyMethod()")));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.VarChar && x.Value.Equals("MyApp.MyClass.MyOtherMethod()")));
        }
Ejemplo n.º 11
0
        public void When_HasDateRangeAndLimitAndOneGroupWithOneAppNotLikeMatchCondition_ThenQueryIsCorrect()
        {
            // ARRANGE
            var request = new SearchRequest();
            request.DateRange = new DateRange() { From = new DateTime(2016, 1, 1), To = new DateTime(2016, 1, 2) };
            request.Limit = 100;
            request.QueryType = QueryType.Ranking;

            request.Groups.Add(new MatchConditionGroup()
            {
                MatchConditions = new List<MatchCondition>()
                {
                    new MatchCondition()
                    {
                        Object = LqlObject.Application,
                        Operator = LqlOperator.NotLike,
                        Value = "MyApp",
                    }
                }
            });

            string expectedTop = "100";
            string expectedPredicates = @"WHERE T.OccurredAt BETWEEN @FromDate AND @ToDate
AND T.Fingerprint IN (
   SELECT DISTINCT ED.Fingerprint FROM ErrorDefinition ED WITH(NOLOCK)
   WHERE ED.ApplicationId NOT LIKE '%' + @Param1 + '%'
)";
            string expectedQuery = string.Format(BaseRankingQuery, expectedTop, expectedPredicates, string.Empty);

            // ACT
            var generator = CreateSut();
            var queryPayload = generator.Generate(request);
            var query = queryPayload.GetQueryText();

            // ASSERT
            Assert.AreEqual(expectedQuery, query);
            Assert.AreEqual(3, queryPayload.Parameters.Count);
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.DateTime && (DateTime)x.Value == new DateTime(2016, 1, 1)));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.DateTime && (DateTime)x.Value == new DateTime(2016, 1, 2)));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.VarChar && x.Value.Equals("MyApp")));
        }
Ejemplo n.º 12
0
        public void X()
        {
            // ARRANGE
            var request = new SearchRequest();
            request.DateRange = new DateRange() { From = new DateTime(2016, 1, 1), To = new DateTime(2016, 1, 2) };
            request.Limit = 100;
            request.QueryType = QueryType.Ranking;
            request.Servers = new List<string>() { "FrontEnd1", "FrontEnd2" };
            request.Groups.Add(new MatchConditionGroup()
            {
                MatchConditions = new List<MatchCondition>()
                {
                    new MatchCondition()
                    {
                        Object = LqlObject.Application,
                        Operator = LqlOperator.Equals,
                        Value = "MyApp",
                    },
                    new MatchCondition()
                    {
                        Object = LqlObject.ExceptionType,
                        Operator = LqlOperator.In,
                        Values = new List<string>() { "System.NullReferenceException", "System.FormatException"}
                    }
                },
                LogicalOperator = LqlLogicalOperator.And
            });

            // ACT
            var generator = CreateSut();
            var queryPayload = generator.Generate(request);
            var query = queryPayload.GetQueryText();

            // ASSERT

        }
Ejemplo n.º 13
0
        public void When_MultipleGroupWithNotAndOr_ThenQueryIsCorrect()
        {
            // ARRANGE
            var request = new SearchRequest();
            request.DateRange = new DateRange() { From = new DateTime(2016, 1, 1), To = new DateTime(2016, 1, 2) };
            request.Limit = 100;
            request.QueryType = QueryType.Ranking;

            request.Groups.Add(new MatchConditionGroup()
            {
                MatchConditions = new List<MatchCondition>()
                {
                    new MatchCondition()
                    {
                        Object = LqlObject.Application,
                        Operator = LqlOperator.Equals,
                        Value = "MyApp",
                    }
                },
                LogicalOperatorToNextGroup = LqlLogicalOperator.And
            });

            request.Groups.Add(new MatchConditionGroup()
            {
                MatchConditions = new List<MatchCondition>()
                {
                    new MatchCondition()
                    {
                        Object = LqlObject.StackFrame,
                        Operator = LqlOperator.Equals,
                        Value = "MyApp.MyClass.MyMethod()"
                    }
                },
                LogicalOperatorToNextGroup = LqlLogicalOperator.Or,
                Exclude = true
            });

            request.Groups.Add(new MatchConditionGroup()
            {
                MatchConditions = new List<MatchCondition>()
                {
                    new MatchCondition()
                    {
                        Object = LqlObject.Message,
                        Operator = LqlOperator.Equals,
                        Value = "An error occurred",
                    }
                }
            });

            string expectedTop = "100";
            string expectedPredicates = @"WHERE T.OccurredAt BETWEEN @FromDate AND @ToDate
AND T.Fingerprint IN (
   SELECT DISTINCT ED.Fingerprint FROM ErrorDefinition ED WITH(NOLOCK)
   WHERE ED.ApplicationId = @Param1
)
AND NOT T.Fingerprint IN (
   SELECT DISTINCT ED.Fingerprint FROM ErrorDefinition ED WITH(NOLOCK)
   JOIN ErrorBreakdown AS EB WITH(NOLOCK) ON ED.Fingerprint = EB.Fingerprint
   WHERE EB.StackFrame = @Param2
)
OR T.TimelineId IN (
   SELECT DISTINCT T.TimelineId FROM Timeline T WITH(NOLOCK)
   WHERE T.OccurredAt BETWEEN @FromDate AND @ToDate
   AND T.MessageDetails = @Param3
)";
            string expectedQuery = string.Format(BaseRankingQuery, expectedTop, expectedPredicates, string.Empty);

            // ACT
            var generator = CreateSut();
            var queryPayload = generator.Generate(request);
            var query = queryPayload.GetQueryText();

            // ASSERT
            Assert.AreEqual(expectedQuery, query);
            Assert.AreEqual(5, queryPayload.Parameters.Count);
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.DateTime && (DateTime)x.Value == new DateTime(2016, 1, 1)));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.DateTime && (DateTime)x.Value == new DateTime(2016, 1, 2)));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.VarChar && x.Value.Equals("MyApp")));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.VarChar && x.Value.Equals("MyApp.MyClass.MyMethod()")));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.VarChar && x.Value.Equals("An error occurred")));
        }
Ejemplo n.º 14
0
        public void When_OneGroupWithMatchConditionsCoveringEveryObjectWithOrAndServers_ThenQueryIsCorrect()
        {
            // ARRANGE
            var request = new SearchRequest();
            request.DateRange = new DateRange() { From = new DateTime(2016, 1, 1), To = new DateTime(2016, 1, 2) };
            request.Limit = 100;
            request.QueryType = QueryType.Ranking;
            request.Servers.Add("Frontend1");
            request.Servers.Add("Frontend2");

            request.Groups.Add(new MatchConditionGroup()
            {
                MatchConditions = new List<MatchCondition>()
                {
                    new MatchCondition()
                    {
                        Object = LqlObject.Application,
                        Operator = LqlOperator.Equals,
                        Value = "MyApp",
                    },
                    new MatchCondition()
                    {
                        Object = LqlObject.ExceptionType,
                        Operator = LqlOperator.Equals,
                        Value = "System.NullReferenceException",
                    },
                    new MatchCondition()
                    {
                        Object = LqlObject.StackFrame,
                        Operator = LqlOperator.Equals,
                        Value = "MyApp.MyClass.MyMethod()",
                    },
                    new MatchCondition()
                    {
                        Object = LqlObject.Message,
                        Operator = LqlOperator.Equals,
                        Value = "An error occurred",
                    },new MatchCondition()
                    {
                        Object = LqlObject.Fingerprint,
                        Operator = LqlOperator.Equals,
                        Value = "700319E6A002A0E15AB86BD5F284F6C9",
                    }
                },
                LogicalOperator = LqlLogicalOperator.Or
            });

            string expectedTop = "100";
            string expectedPredicates = @"WHERE 1=1
AND T.TimelineId IN (
   SELECT DISTINCT T.TimelineId FROM Timeline T WITH(NOLOCK)
   JOIN ErrorDefinition ED WITH(NOLOCK) ON T.Fingerprint = ED.Fingerprint
   JOIN ErrorBreakdown AS EB WITH(NOLOCK) ON T.Fingerprint = EB.Fingerprint
   JOIN Server AS S WITH(NOLOCK) ON T.ServerId = S.ServerId
   WHERE T.OccurredAt BETWEEN @FromDate AND @ToDate
   AND S.ServerName IN (@Param1,@Param2)
   AND ED.ApplicationId = @Param3
   OR EB.ExceptionType = @Param4
   OR EB.StackFrame = @Param5
   OR T.MessageDetails = @Param6
   OR ED.FingerprintText = @Param7
)";
            string expectedQuery = string.Format(BaseRankingQuery, expectedTop, expectedPredicates, string.Empty);

            // ACT
            var generator = CreateSut();
            var queryPayload = generator.Generate(request);
            var query = queryPayload.GetQueryText();

            // ASSERT
            Assert.AreEqual(expectedQuery, query);
            Assert.AreEqual(9, queryPayload.Parameters.Count);
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.DateTime && (DateTime)x.Value == new DateTime(2016, 1, 1)));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.DateTime && (DateTime)x.Value == new DateTime(2016, 1, 2)));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.VarChar && x.Value.Equals("Frontend1")));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.VarChar && x.Value.Equals("Frontend2")));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.VarChar && x.Value.Equals("MyApp")));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.VarChar && x.Value.Equals("System.NullReferenceException")));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.VarChar && x.Value.Equals("MyApp.MyClass.MyMethod()")));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.VarChar && x.Value.Equals("An error occurred")));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.VarChar && x.Value.Equals("700319E6A002A0E15AB86BD5F284F6C9")));
        }
Ejemplo n.º 15
0
        public void When_OneGroupWithMatchConditionsCoveringDefinitionDataOnlyWithAnd_ThenQueryIsCorrect()
        {
            // ARRANGE
            var request = new SearchRequest();
            request.DateRange = new DateRange() { From = new DateTime(2016, 1, 1), To = new DateTime(2016, 1, 2) };
            request.Limit = 100;
            request.QueryType = QueryType.Ranking;

            request.Groups.Add(new MatchConditionGroup()
            {
                MatchConditions = new List<MatchCondition>()
                {
                    new MatchCondition()
                    {
                        Object = LqlObject.Application,
                        Operator = LqlOperator.Equals,
                        Value = "MyApp",
                    },
                    new MatchCondition()
                    {
                        Object = LqlObject.ExceptionType,
                        Operator = LqlOperator.Equals,
                        Value = "System.NullReferenceException",
                    },
                    new MatchCondition()
                    {
                        Object = LqlObject.StackFrame,
                        Operator = LqlOperator.Equals,
                        Value = "MyApp.MyClass.MyMethod()",
                    },
                    new MatchCondition()
                    {
                        Object = LqlObject.Fingerprint,
                        Operator = LqlOperator.Equals,
                        Value = "700319E6A002A0E15AB86BD5F284F6C9",
                    }
                },
                LogicalOperator = LqlLogicalOperator.And
            });

            string expectedTop = "100";
            string expectedPredicates = @"WHERE T.OccurredAt BETWEEN @FromDate AND @ToDate
AND T.Fingerprint IN (
   SELECT DISTINCT ED.Fingerprint FROM ErrorDefinition ED WITH(NOLOCK)
   JOIN ErrorBreakdown AS EB WITH(NOLOCK) ON ED.Fingerprint = EB.Fingerprint
   WHERE ED.ApplicationId = @Param1
   AND EB.ExceptionType = @Param2
   AND EB.StackFrame = @Param3
   AND ED.FingerprintText = @Param4
)";
            string expectedQuery = string.Format(BaseRankingQuery, expectedTop, expectedPredicates, string.Empty);

            // ACT
            var generator = CreateSut();
            var queryPayload = generator.Generate(request);
            var query = queryPayload.GetQueryText();

            // ASSERT
            Assert.AreEqual(expectedQuery, query);
            Assert.AreEqual(6, queryPayload.Parameters.Count);
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.DateTime && (DateTime)x.Value == new DateTime(2016, 1, 1)));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.DateTime && (DateTime)x.Value == new DateTime(2016, 1, 2)));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.VarChar && x.Value.Equals("MyApp")));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.VarChar && x.Value.Equals("System.NullReferenceException")));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.VarChar && x.Value.Equals("MyApp.MyClass.MyMethod()")));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.VarChar && x.Value.Equals("700319E6A002A0E15AB86BD5F284F6C9")));
        }
Ejemplo n.º 16
0
        public void When_HasDateRangeAndLimitAndOneGroupWithOneFingerprintNotInMatchCondition_ThenQueryIsCorrect()
        {
            // ARRANGE
            var request = new SearchRequest();
            request.DateRange = new DateRange() { From = new DateTime(2016, 1, 1), To = new DateTime(2016, 1, 2) };
            request.Limit = 100;
            request.QueryType = QueryType.Ranking;

            request.Groups.Add(new MatchConditionGroup()
            {
                MatchConditions = new List<MatchCondition>()
                {
                    new MatchCondition()
                    {
                        Object = LqlObject.Fingerprint,
                        Operator = LqlOperator.NotIn,
                        Values = new List<string>() { "3BEAF5F14C0816496E74E48D36443EB1", "700319E6A002A0E15AB86BD5F284F6C9"}
                    }
                }
            });

            string expectedTop = "100";
            string expectedPredicates = @"WHERE T.OccurredAt BETWEEN @FromDate AND @ToDate
AND T.Fingerprint IN (
   SELECT DISTINCT ED.Fingerprint FROM ErrorDefinition ED WITH(NOLOCK)
   WHERE ED.FingerprintText NOT IN (@Param1,@Param2)
)";
            string expectedQuery = string.Format(BaseRankingQuery, expectedTop, expectedPredicates, string.Empty);

            // ACT
            var generator = CreateSut();
            var queryPayload = generator.Generate(request);
            var query = queryPayload.GetQueryText();

            // ASSERT
            Assert.AreEqual(expectedQuery, query);
            Assert.AreEqual(4, queryPayload.Parameters.Count);
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.DateTime && (DateTime)x.Value == new DateTime(2016, 1, 1)));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.DateTime && (DateTime)x.Value == new DateTime(2016, 1, 2)));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.VarChar && x.Value.Equals("3BEAF5F14C0816496E74E48D36443EB1")));
            Assert.AreEqual(1, queryPayload.Parameters.Count(x => x.SqlDbType == SqlDbType.VarChar && x.Value.Equals("700319E6A002A0E15AB86BD5F284F6C9")));
        }