public void Test_when_orexpression_visitor_visits_orexpression_push_criteria_collection_for_every_condition() { // Arrange CmsqlQueryBinaryExpression expression = new CmsqlQueryBinaryExpression { Operator = ConditionalOperator.Or, LeftExpression = new CmsqlQueryCondition { Identifier = "PageName", Operator = EqualityOperator.GreaterThan, Value = "5" }, RightExpression = new CmsqlQueryCondition { Identifier = "PageName", Operator = EqualityOperator.GreaterThan, Value = "5" } }; CmsqlExpressionVisitorContext context = new CmsqlExpressionVisitorContext(new ContentType()); CmsqlExpressionVisitor cmsqlExpressionVisitor = new CmsqlBinaryOrExpressionVisitor( new QueryConditionToPropertyCriteriaMapper( new PropertyDataTypeResolver(new ContentType())), context); // Act cmsqlExpressionVisitor.VisitQueryExpression(expression); IEnumerable <PropertyCriteriaCollection> propertyCriteriaCollection = context.GetCriteria(); // Assert propertyCriteriaCollection.Should().HaveCount(2); }
public void Test_can_map_binary_andexpression_to_one_criteria_collections() { // Arrange CmsqlQueryBinaryExpression orExpression = new CmsqlQueryBinaryExpression { Operator = ConditionalOperator.And, LeftExpression = new CmsqlQueryCondition { Identifier = "PageName", Operator = EqualityOperator.GreaterThan, Value = "5" }, RightExpression = new CmsqlQueryCondition { Identifier = "PageName", Operator = EqualityOperator.Equals, Value = "10" } }; CmsqlExpressionVisitorContext context = new CmsqlExpressionVisitorContext(new ContentType()); CmsqlExpressionVisitor cmsqlExpressionVisitor = new CmsqlExpressionVisitor( new QueryConditionToPropertyCriteriaMapper( new PropertyDataTypeResolver(new ContentType())), context); // Act cmsqlExpressionVisitor.VisitQueryExpression(orExpression); IEnumerable <PropertyCriteriaCollection> propertyCriteriaCollection = context.GetCriteria(); // Assert propertyCriteriaCollection.Should().HaveCount(1); }
public void Test_can_parse_binary_expression_for_two_parenthesized_expressions() { CmsqlParser cmsqlParser = CmsqlParserFactory.CreateParserForQuery( "(jon != 'stark' and john = 'snow') or (arya = 'stark' and sansa = 'stark')"); CmsqlParser.BinaryExpressionContext parseTree = (CmsqlParser.BinaryExpressionContext)cmsqlParser.expression(); ExpressionVisitor visitor = new ExpressionVisitor(); CmsqlQueryBinaryExpression binaryExpression = (CmsqlQueryBinaryExpression)visitor.VisitBinaryExpression(parseTree); binaryExpression.LeftExpression.Should().BeOfType <CmsqlQueryBinaryExpression>(); binaryExpression.LeftExpression.Should().NotBeNull(); binaryExpression.RightExpression.Should().BeOfType <CmsqlQueryBinaryExpression>(); binaryExpression.RightExpression.Should().NotBeNull(); CmsqlQueryBinaryExpression leftParenthesizedBinaryExpression = (CmsqlQueryBinaryExpression)binaryExpression.LeftExpression; leftParenthesizedBinaryExpression.LeftExpression.Should().BeOfType <CmsqlQueryCondition>(); leftParenthesizedBinaryExpression.LeftExpression.Should().NotBeNull(); leftParenthesizedBinaryExpression.RightExpression.Should().BeOfType <CmsqlQueryCondition>(); leftParenthesizedBinaryExpression.RightExpression.Should().NotBeNull(); CmsqlQueryBinaryExpression rightParenthesizedBinaryExpression = (CmsqlQueryBinaryExpression)binaryExpression.RightExpression; rightParenthesizedBinaryExpression.LeftExpression.Should().BeOfType <CmsqlQueryCondition>(); rightParenthesizedBinaryExpression.LeftExpression.Should().NotBeNull(); rightParenthesizedBinaryExpression.RightExpression.Should().BeOfType <CmsqlQueryCondition>(); rightParenthesizedBinaryExpression.RightExpression.Should().NotBeNull(); }
public virtual void VisitQueryExpression(CmsqlQueryBinaryExpression binaryExpression) { CmsqlExpressionVisitor visitor = binaryExpression.Operator == ConditionalOperator.Or ? new CmsqlBinaryOrExpressionVisitor(_conditionToCriteriaMapper, Context) : new CmsqlExpressionVisitor(_conditionToCriteriaMapper, Context); binaryExpression.LeftExpression.Accept(visitor); binaryExpression.RightExpression.Accept(visitor); }
public override void VisitQueryExpression(CmsqlQueryBinaryExpression binaryExpression) { if (binaryExpression.Operator == ConditionalOperator.And) { Context.PushNewPropertyCriteriaCollection(); } base.VisitQueryExpression(binaryExpression); }
public void Test_can_parse_grouped_expression_and_condition() { CmsqlParser cmsqlParser = CmsqlParserFactory.CreateParserForQuery("where (bar = 'foo' and foo = 'bar') or foo != 'bar'"); CmsqlParser.WhereClauseContext parseTree = cmsqlParser.whereClause(); WhereClauseVisitor visitor = new WhereClauseVisitor(); CmsqlQueryBinaryExpression binaryExpression = visitor.VisitWhereClause(parseTree) as CmsqlQueryBinaryExpression; binaryExpression.Operator.ShouldBeEquivalentTo(ConditionalOperator.Or); binaryExpression.LeftExpression.Should().BeOfType <CmsqlQueryBinaryExpression>(); binaryExpression.RightExpression.Should().BeOfType <CmsqlQueryCondition>(); }
public void Test_can_parse_parenthesized_expression_for_binary_expression() { CmsqlParser cmsqlParser = CmsqlParserFactory.CreateParserForQuery("(foo != 'bar' and bar = 'foo')"); CmsqlParser.ParenthesizedExpressionContext parseTree = (CmsqlParser.ParenthesizedExpressionContext)cmsqlParser.expression(); ExpressionVisitor visitor = new ExpressionVisitor(); CmsqlQueryBinaryExpression binaryExpression = (CmsqlQueryBinaryExpression)visitor.VisitParenthesizedExpression(parseTree); binaryExpression.LeftExpression.Should().BeOfType <CmsqlQueryCondition>(); binaryExpression.LeftExpression.Should().NotBeNull(); binaryExpression.RightExpression.Should().BeOfType <CmsqlQueryCondition>(); binaryExpression.RightExpression.Should().NotBeNull(); }
public void Test_can_parse_binary_expression_containing_parenthesized_expression_and_condition_expression(string queryExpression) { CmsqlParser cmsqlParser = CmsqlParserFactory.CreateParserForQuery(queryExpression); CmsqlParser.BinaryExpressionContext parseTree = (CmsqlParser.BinaryExpressionContext)cmsqlParser.expression(); ExpressionVisitor visitor = new ExpressionVisitor(); CmsqlQueryBinaryExpression binaryExpression = (CmsqlQueryBinaryExpression)visitor.VisitBinaryExpression(parseTree); binaryExpression.LeftExpression.Should().BeOfType <CmsqlQueryCondition>(); binaryExpression.LeftExpression.Should().NotBeNull(); binaryExpression.RightExpression.Should().BeOfType <CmsqlQueryCondition>(); binaryExpression.RightExpression.Should().NotBeNull(); }
public void Test_can_binary_expression_containing_two_condition_expressions() { CmsqlParser cmsqlParser = CmsqlParserFactory.CreateParserForQuery("foo != 'bar' and bar = 'foo'"); CmsqlParser.BinaryExpressionContext parseTree = (CmsqlParser.BinaryExpressionContext)cmsqlParser.expression(); ExpressionVisitor visitor = new ExpressionVisitor(); CmsqlQueryBinaryExpression binaryExpression = (CmsqlQueryBinaryExpression)visitor.VisitBinaryExpression(parseTree); binaryExpression.LeftExpression.Should().BeOfType <CmsqlQueryCondition>(); binaryExpression.LeftExpression.Should().NotBeNull(); binaryExpression.RightExpression.Should().BeOfType <CmsqlQueryCondition>(); binaryExpression.RightExpression.Should().NotBeNull(); }
public void Test_can_map_nested_expressions() { // Arrange CmsqlQueryBinaryExpression expressions = new CmsqlQueryBinaryExpression { Operator = ConditionalOperator.Or, LeftExpression = new CmsqlQueryBinaryExpression { Operator = ConditionalOperator.Or, LeftExpression = new CmsqlQueryBinaryExpression { Operator = ConditionalOperator.Or, LeftExpression = new CmsqlQueryCondition { Identifier = "PageName", Operator = EqualityOperator.Equals, Value = "1" }, RightExpression = new CmsqlQueryBinaryExpression { Operator = ConditionalOperator.Or, LeftExpression = new CmsqlQueryCondition { Identifier = "PageName", Operator = EqualityOperator.Equals, Value = "2" }, RightExpression = new CmsqlQueryCondition { Identifier = "PageName", Operator = EqualityOperator.Equals, Value = "3" } } }, RightExpression = new CmsqlQueryBinaryExpression { Operator = ConditionalOperator.Or, LeftExpression = new CmsqlQueryCondition { Identifier = "PageName", Operator = EqualityOperator.Equals, Value = "4" }, RightExpression = new CmsqlQueryCondition { Identifier = "PageName", Operator = EqualityOperator.Equals, Value = "5" } } }, RightExpression = new CmsqlQueryBinaryExpression { Operator = ConditionalOperator.And, RightExpression = new CmsqlQueryCondition { Identifier = "PageName", Operator = EqualityOperator.Equals, Value = "6" }, LeftExpression = new CmsqlQueryCondition { Identifier = "PageName", Operator = EqualityOperator.Equals, Value = "7" } } }; CmsqlExpressionVisitorContext context = new CmsqlExpressionVisitorContext(new ContentType()); CmsqlExpressionVisitor cmsqlExpressionVisitor = new CmsqlExpressionVisitor( new QueryConditionToPropertyCriteriaMapper( new PropertyDataTypeResolver(new ContentType())), context); // Act cmsqlExpressionVisitor.VisitQueryExpression(expressions); IEnumerable <PropertyCriteriaCollection> propertyCriteriaCollection = context.GetCriteria(); // Assert propertyCriteriaCollection.Should().HaveCount(6); }