Exemple #1
0
        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);
        }
Exemple #2
0
        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();
        }
Exemple #10
0
        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);
        }