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))); }
public SearchRequest Parse(IList<LqlToken> tokens) { LoadSequenceStack(tokens); _lookaheadFirst = _tokenSequence.Pop(); _lookaheadSecond = _tokenSequence.Pop(); _searchRequest = new SearchRequest(); Match(); DiscardToken(TokenType.SequenceTerminator); return _searchRequest; }
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"); } }
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)"); }
private AdoQueryPayload GenerateMessagesQuery(SearchRequest searchRequest) { throw new NotImplementedException(); }
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"))); }
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()"))); }
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"))); }
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 }
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"))); }
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"))); }
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"))); }
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"))); }