public static IQueryExpression Parse(string query) { // first check for boolean operators Regex r = new Regex(QueryParser.BooleanOperatorRegEx); Match m = r.Match(query); if (m.Success) { BooleanQueryExpression expression = new BooleanQueryExpression() { Left = QueryParser.Parse(query.Substring(0, m.Index)), Operator = (BooleanOperator)Enum.Parse(typeof(BooleanOperator), m.Value.Trim()), Right = QueryParser.Parse(query.Substring(m.Index + m.Length)) }; return expression; } else { return BuildComparisonExpression(query); } }
public void GetMessagesSQLCommandTest_MultipartBooleanExpression() { // Arrange IQueryExpression expression = new BooleanQueryExpression { Left = new ComparisonQueryExpression { Field = "app", Comparator = ExpressionComparator.Equals, Value = "Echo" }, Operator = BooleanOperator.AND, Right = new BooleanQueryExpression { Left = new ComparisonQueryExpression { Field = "host", Comparator = ExpressionComparator.Equals, Value = "app1" }, Operator = BooleanOperator.OR, Right = new ComparisonQueryExpression { Field = "host", Comparator = ExpressionComparator.Equals, Value = "app2" } } }; // Act var actual = SQLMonitorStoreHelper.GetMessagesSQLCommand(expression); // Assert Assert.AreEqual(2, actual.Parameters.Count); Assert.AreEqual("@field1", actual.Parameters[0].ParameterName); Assert.AreEqual("app", actual.Parameters[0].Value); Assert.AreEqual("@value1", actual.Parameters[1].ParameterName); Assert.AreEqual("Echo", actual.Parameters[1].Value); }
public void ParseTest_ThreePartBooleanExpression() { // Arrange const string query = "app:Echo AND host:app1 OR host:app2"; IQueryExpression expected = new BooleanQueryExpression { Left = new ComparisonQueryExpression { Field = "app", Comparator = ExpressionComparator.Equals, Value = "Echo" }, Operator = BooleanOperator.AND, Right = new BooleanQueryExpression { Left = new ComparisonQueryExpression { Field = "host", Comparator = ExpressionComparator.Equals, Value = "app1" }, Operator = BooleanOperator.OR, Right = new ComparisonQueryExpression { Field = "host", Comparator = ExpressionComparator.Equals, Value = "app2" } } }; // Act IQueryExpression actual = QueryParser.Parse(query); // Assert Assert.AreEqual(expected, actual); }
public void TranslateQueryExpressionToWhereClauseTest_TwoPartBooleanExpresion() { // Arrange IQueryExpression expression = new BooleanQueryExpression { Left = new ComparisonQueryExpression { Field = "app", Comparator = ExpressionComparator.Equals, Value = "Echo" }, Operator = BooleanOperator.AND, Right = new ComparisonQueryExpression { Field = "host", Comparator = ExpressionComparator.Equals, Value = "app2" } }; const string expected = "([f0].[Value] = @vf0 AND [f0].[Field] = @ff0)" + " AND ([f1].[Value] = @vf1 AND [f1].[Field] = @ff1)"; var parameters = new Dictionary<string, object>(); var fieldTableAliases = new List<string>(); // Act var actual = SQLMonitorStoreHelper.TranslateQueryExpressionToWhereClause(expression, parameters, fieldTableAliases); // Assert Assert.AreEqual(expected, actual); Assert.AreEqual("app", parameters["@ff0"]); Assert.AreEqual("Echo", parameters["@vf0"]); Assert.AreEqual("host", parameters["@ff1"]); Assert.AreEqual("app2", parameters["@vf1"]); }