Exemple #1
0
        public void Test_when_visit_query_condition_push_new_criteria_collection()
        {
            // Arrange
            CmsqlQueryCondition condition = 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.VisitQueryCondition(condition);

            IEnumerable <PropertyCriteriaCollection> propertyCriteriaCollection = context.GetCriteria();

            // Assert
            propertyCriteriaCollection.Should().HaveCount(1);
        }
        public void Test_can_parse_multiple_queries()
        {
            CmsqlQueryParser      parser      = new CmsqlQueryParser();
            CmsqlQueryParseResult parseResult = parser.Parse(
                "select test from start;select test from root where foo = 'bar';select barf from 123 where (foo = 'bar' and bar = 'foo') or (bla = 'bli' and bli = 'bla')");

            parseResult.Queries.Should().HaveCount(3);
            parseResult.Errors.Should().BeNullOrEmpty();

            CmsqlQuery firstQuery = parseResult.Queries.First();

            firstQuery.ContentType.ShouldBeEquivalentTo("test");
            firstQuery.StartNode.StartNodeId.Should().BeNullOrEmpty();
            firstQuery.StartNode.StartNodeType.ShouldBeEquivalentTo(CmsqlQueryStartNodeType.Start);
            firstQuery.Criteria.Should().BeNull();

            CmsqlQuery secondQuery = parseResult.Queries.ElementAt(1);

            secondQuery.ContentType.ShouldBeEquivalentTo("test");
            secondQuery.StartNode.StartNodeId.Should().BeNullOrEmpty();
            secondQuery.StartNode.StartNodeType.ShouldBeEquivalentTo(CmsqlQueryStartNodeType.Root);
            secondQuery.Criteria.Should().BeOfType <CmsqlQueryCondition>();
            CmsqlQueryCondition condition = secondQuery.Criteria as CmsqlQueryCondition;

            condition.Identifier.ShouldBeEquivalentTo("foo");
            condition.Operator.ShouldBeEquivalentTo(EqualityOperator.Equals);
            condition.Value.ShouldBeEquivalentTo("bar");

            CmsqlQuery thirdQuery = parseResult.Queries.ElementAt(2);

            thirdQuery.ContentType.ShouldBeEquivalentTo("barf");
            thirdQuery.StartNode.StartNodeId.ShouldBeEquivalentTo("123");
            thirdQuery.StartNode.StartNodeType.ShouldBeEquivalentTo(CmsqlQueryStartNodeType.Id);
            thirdQuery.Criteria.Should().BeOfType <CmsqlQueryBinaryExpression>();
        }
Exemple #3
0
        public void Test_when_property_cannot_be_resolved_context_should_contain_error()
        {
            // Arrange
            CmsqlQueryCondition condition = new CmsqlQueryCondition
            {
                Identifier = "ThisPropertyCannotBeFound",
                Operator   = EqualityOperator.GreaterThan,
                Value      = "5"
            };

            CmsqlExpressionVisitorContext context = new CmsqlExpressionVisitorContext(new ContentType());

            CmsqlExpressionVisitor cmsqlExpressionVisitor =
                new CmsqlExpressionVisitor(
                    new QueryConditionToPropertyCriteriaMapper(
                        new PropertyDataTypeResolver(new ContentType())), context);

            // Act
            cmsqlExpressionVisitor.VisitQueryCondition(condition);

            // Assert
            CmsqlQueryExecutionError error = context.Errors.Single();

            error.Message.ShouldBeEquivalentTo("Could not find property 'ThisPropertyCannotBeFound'");
        }
Exemple #4
0
        public void Test_can_map_query_condition_to_property_criteria()
        {
            // Arrange
            CmsqlQueryCondition condition = new CmsqlQueryCondition
            {
                Identifier = "PageName",
                Operator   = EqualityOperator.GreaterThan,
                Value      = "5"
            };

            CmsqlExpressionVisitorContext context = new CmsqlExpressionVisitorContext(new ContentType());

            CmsqlExpressionVisitor cmsqlExpressionVisitor =
                new CmsqlExpressionVisitor(
                    new QueryConditionToPropertyCriteriaMapper(
                        new PropertyDataTypeResolver(new ContentType())), context);

            // Act
            cmsqlExpressionVisitor.VisitQueryCondition(condition);

            PropertyCriteriaCollection propertyCriteriaCollection = context.GetCriteria().Single();

            PropertyCriteria propertyCriteria = propertyCriteriaCollection.Last();

            // Assert
            propertyCriteria.Value.ShouldBeEquivalentTo(condition.Value);
            propertyCriteria.Condition.ShouldBeEquivalentTo(CompareCondition.GreaterThan);
            propertyCriteria.Name.ShouldBeEquivalentTo(condition.Identifier);
        }
Exemple #5
0
        public void Test_when_condition_cannot_be_mapped_criteria_should_be_empty()
        {
            // Arrange
            CmsqlQueryCondition condition = new CmsqlQueryCondition
            {
                Identifier = "ThisPropertyCannotBeFound",
                Operator   = EqualityOperator.GreaterThan,
                Value      = "5"
            };

            CmsqlExpressionVisitorContext context = new CmsqlExpressionVisitorContext(new ContentType());

            CmsqlExpressionVisitor cmsqlExpressionVisitor =
                new CmsqlExpressionVisitor(
                    new QueryConditionToPropertyCriteriaMapper(
                        new PropertyDataTypeResolver(new ContentType())), context);

            // Act
            cmsqlExpressionVisitor.VisitQueryCondition(condition);

            IEnumerable <PropertyCriteriaCollection> propertyCriteriaCollection = context.GetCriteria();

            // Assert
            propertyCriteriaCollection.Should().BeEmpty();
        }
Exemple #6
0
        internal bool TryMap(CmsqlQueryCondition condition, out PropertyCriteria criteria)
        {
            criteria = null;

            if (condition == null)
            {
                return(false);
            }

            if (!_propertyDataTypeResolver.TryResolve(condition.Identifier, out PropertyDataType propertyDataType))
            {
                return(false);
            }

            CompareCondition compareCondition = MapEqualityOperatorToCompareCondition(condition.Operator);

            criteria = new PropertyCriteria
            {
                Condition = compareCondition,
                Value     = condition.Value,
                Name      = condition.Identifier,
                Type      = propertyDataType,
                Required  = true
            };

            return(true);
        }
        public void Test_can_parse_less_than_or_equals_condition()
        {
            CmsqlParser cmsqlParser = CmsqlParserFactory.CreateParserForQuery("foo <= 'bar'");

            CmsqlParser.ConditionContext parseTree = cmsqlParser.condition();

            ConditionVisitor    visitor   = new ConditionVisitor();
            CmsqlQueryCondition condition = visitor.VisitCondition(parseTree);

            condition.Identifier.ShouldBeEquivalentTo("foo");
            condition.Operator.ShouldBeEquivalentTo(EqualityOperator.LessThanOrEquals);
            condition.Value.ShouldBeEquivalentTo("bar");
        }
        public virtual void VisitQueryCondition(CmsqlQueryCondition condition)
        {
            if (condition == null)
            {
                Context.Errors.Add(new CmsqlQueryExecutionError("Could not process malformed query condition."));
                return;
            }

            if (_conditionToCriteriaMapper.TryMap(condition, out PropertyCriteria criteria))
            {
                Context.AddPropertyCriteria(criteria);
            }
            else
            {
                Context.Errors.Add(new CmsqlQueryExecutionError($"Could not find property '{condition.Identifier}'"));
            }
        }
        public void Test_when_property_is_unkown_mapping_should_return_false()
        {
            // Arrange
            CmsqlQueryCondition condition = new CmsqlQueryCondition
            {
                Identifier = "This is some unknown property",
                Operator   = EqualityOperator.GreaterThan,
                Value      = "5"
            };

            QueryConditionToPropertyCriteriaMapper mapper = new QueryConditionToPropertyCriteriaMapper(
                new PropertyDataTypeResolver(new ContentType()));

            // Act
            bool isMapSuccessfull = mapper.TryMap(condition, out PropertyCriteria criteria);

            // Assert
            isMapSuccessfull.Should().BeFalse();
            criteria.Should().BeNull();
        }
        public void Test_can_map_query_condition_to_property_criteria()
        {
            // Arrange
            ContentType contentType = new ContentType
            {
                PropertyDefinitions =
                {
                    new PropertyDefinition
                    {
                        Name = "FooBar",
                        Type = new PropertyDefinitionType
                        {
                            DataType = PropertyDataType.Number
                        }
                    }
                }
            };

            CmsqlQueryCondition condition = new CmsqlQueryCondition
            {
                Identifier = "FooBar",
                Operator   = EqualityOperator.GreaterThan,
                Value      = "5"
            };

            QueryConditionToPropertyCriteriaMapper mapper = new QueryConditionToPropertyCriteriaMapper(
                new PropertyDataTypeResolver(contentType));

            // Act
            bool isMapSuccessfull = mapper.TryMap(condition, out PropertyCriteria criteria);

            // Assert
            isMapSuccessfull.Should().BeTrue();
            criteria.Name.ShouldBeEquivalentTo(condition.Identifier);
            criteria.Condition.ShouldBeEquivalentTo(CompareCondition.GreaterThan);
            criteria.Value.ShouldBeEquivalentTo(condition.Value);
            criteria.Type.ShouldBeEquivalentTo(PropertyDataType.Number);
        }
        public void Test_can_map_query_condition_with_meta_data_property_to_property_criteria()
        {
            // Arrange
            CmsqlQueryCondition condition = new CmsqlQueryCondition
            {
                Identifier = MetaDataProperties.PageName,
                Operator   = EqualityOperator.GreaterThan,
                Value      = "5"
            };

            QueryConditionToPropertyCriteriaMapper mapper = new QueryConditionToPropertyCriteriaMapper(
                new PropertyDataTypeResolver(new ContentType()));

            // Act
            bool isMapSuccessfull = mapper.TryMap(condition, out PropertyCriteria criteria);

            // Assert
            isMapSuccessfull.Should().BeTrue();
            criteria.Name.ShouldBeEquivalentTo(condition.Identifier);
            criteria.Condition.ShouldBeEquivalentTo(CompareCondition.GreaterThan);
            criteria.Value.ShouldBeEquivalentTo(condition.Value);
            criteria.Type.ShouldBeEquivalentTo(PropertyDataType.String);
        }
        public override void VisitQueryCondition(CmsqlQueryCondition condition)
        {
            Context.PushNewPropertyCriteriaCollection();

            base.VisitQueryCondition(condition);
        }