Пример #1
0
 public async Task VisitAsync(ODataPath path)
 {
     NotFound       = false;
     BadRequest     = false;
     Result         = null;
     ResultType     = null;
     PropertySetter = null;
     Index          = 0;
     foreach (var segment in path)
     {
         await(segment switch
         {
             TypeSegment typeSegment => VisitAsync(typeSegment),
             NavigationPropertySegment navigationPropertySegment => VisitAsync(navigationPropertySegment),
             EntitySetSegment entitySetSegment => VisitAsync(entitySetSegment),
             SingletonSegment singletonSegment => VisitAsync(singletonSegment),
             KeySegment keySegment => VisitAsync(keySegment),
             PropertySegment propertySegment => VisitAsync(propertySegment),
             AnnotationSegment annotationSegment => VisitAsync(annotationSegment),
             OperationImportSegment operationImportSegment => VisitAsync(operationImportSegment),
             OperationSegment operationSegment => VisitAsync(operationSegment),
             DynamicPathSegment dynamicPathSegment => VisitAsync(dynamicPathSegment),
             CountSegment countSegment => VisitAsync(countSegment),
             FilterSegment filterSegment => VisitAsync(filterSegment),
             ReferenceSegment referenceSegment => VisitAsync(referenceSegment),
             EachSegment eachSegment => VisitAsync(eachSegment),
             NavigationPropertyLinkSegment navigationPropertyLinkSegment => VisitAsync(navigationPropertyLinkSegment),
             ValueSegment valueSegment => VisitAsync(valueSegment),
             BatchSegment batchSegment => VisitAsync(batchSegment),
             BatchReferenceSegment batchReferenceSegment => VisitAsync(batchReferenceSegment),
             MetadataSegment metadataSegment => VisitAsync(metadataSegment),
             PathTemplateSegment pathTemplateSegment => VisitAsync(pathTemplateSegment),
             _ => throw new NotSupportedException()
         });
Пример #2
0
        protected override Pipe VisitFilter(FilterSegment filter)
        {
            _lastNodeVertex = GetSink(filter.GetHashCode(), () => "Filter", typeof(FilterSegment), filter.MessageType);

            if (_stack.Count > 0)
                _edges.Add(new Edge(_stack.Peek(), _lastNodeVertex, _lastNodeVertex.TargetType.Name));

            return Recurse(() => base.VisitFilter(filter));
        }
Пример #3
0
        public void FilterSegmentShouldHaveSameTypeAsRangeVariableTypeDefinition()
        {
            const string filterExpression = "@a1";

            FilterClause       filterClause  = CreateFilterClause(filterExpression);
            ParameterAliasNode expression    = filterClause.Expression as ParameterAliasNode;
            FilterSegment      filterSegment = new FilterSegment(expression, filterClause.RangeVariable, HardCodedTestModel.GetPet1Set());

            filterSegment.EdmType.Equals(filterClause.RangeVariable.TypeReference.Definition).Should().BeFalse();
        }
Пример #4
0
        public void FilterSegmentShouldNotBeSingleResult()
        {
            const string filterExpression = "@a1";

            FilterClause       filterClause  = CreateFilterClause(filterExpression);
            ParameterAliasNode expression    = filterClause.Expression as ParameterAliasNode;
            FilterSegment      filterSegment = new FilterSegment(expression, filterClause.RangeVariable, HardCodedTestModel.GetPet1Set());

            filterSegment.SingleResult.Should().BeFalse();
        }
Пример #5
0
        public void FilterSegmentWithExpressionShouldConstructSuccessfully()
        {
            const string filterExpression = "ID eq 1";

            FilterClause       filterClause  = CreateFilterClause(filterExpression);
            BinaryOperatorNode expression    = filterClause.Expression as BinaryOperatorNode;
            FilterSegment      filterSegment = new FilterSegment(expression, filterClause.RangeVariable, HardCodedTestModel.GetPet1Set());

            filterSegment.Expression.Equals(expression).Should().BeTrue();
            filterSegment.RangeVariable.Equals(filterClause.RangeVariable).Should().BeTrue();
        }
Пример #6
0
        public void FilterSegmentWithAllParametersShouldConstructSuccessfully()
        {
            const string filterExpression = "@a1";

            FilterClause       filterClause  = CreateFilterClause(filterExpression);
            ParameterAliasNode expression    = filterClause.Expression as ParameterAliasNode;
            FilterSegment      filterSegment = new FilterSegment(expression, filterClause.RangeVariable, HardCodedTestModel.GetPet1Set());

            filterSegment.Expression.Equals(expression).Should().BeTrue();
            filterSegment.RangeVariable.Equals(filterClause.RangeVariable).Should().BeTrue();
        }
Пример #7
0
        protected override Pipe VisitFilter(FilterSegment filter)
        {
            _lastNodeVertex = GetSink(filter.GetHashCode(), () => "Filter", typeof(FilterSegment), filter.MessageType);

            if (_stack.Count > 0)
            {
                _edges.Add(new Edge(_stack.Peek(), _lastNodeVertex, _lastNodeVertex.TargetType.Name));
            }

            return(Recurse(() => base.VisitFilter(filter)));
        }
Пример #8
0
        protected virtual Pipe VisitFilter(FilterSegment filter)
        {
            if (filter == null)
                return null;

            Pipe output = Visit(filter.Output);
            if (output != filter.Output)
                return new FilterSegment(output, filter.MessageType);

            return filter;
        }
Пример #9
0
        public void FilterSegmentsWithSameExpressionShouldBeEqual()
        {
            const string filterExpression = "@a1";

            FilterClause       filterClause   = CreateFilterClause(filterExpression);
            ParameterAliasNode expression     = filterClause.Expression as ParameterAliasNode;
            FilterSegment      filterSegment1 = new FilterSegment(expression, filterClause.RangeVariable, HardCodedTestModel.GetPet1Set());
            FilterSegment      filterSegment2 = new FilterSegment(expression, filterClause.RangeVariable, HardCodedTestModel.GetPet1Set());

            filterSegment1.Equals(filterSegment2).Should().BeTrue();
            filterSegment2.Equals(filterSegment1).Should().BeTrue();
        }
Пример #10
0
        public void FilterSegmentsWithDifferentNavigationSourcesShouldNotBeEqual()
        {
            const string filterExpression1 = "@a1";

            FilterClause       filterClause   = CreateFilterClause(filterExpression1);
            ParameterAliasNode expression     = filterClause.Expression as ParameterAliasNode;
            FilterSegment      filterSegment1 = new FilterSegment(expression, filterClause.RangeVariable, HardCodedTestModel.GetPet1Set());
            FilterSegment      filterSegment2 = new FilterSegment(expression, filterClause.RangeVariable, HardCodedTestModel.GetPeopleSet());

            filterSegment1.Equals(filterSegment2).Should().BeFalse();
            filterSegment2.Equals(filterSegment1).Should().BeFalse();
        }
Пример #11
0
        public void FilterSegmentsWithDifferentExpressionsShouldNotBeEqual()
        {
            const string filterExpression1 = "@a1";
            const string filterExpression2 = "@a2";

            FilterClause       filterClause1  = CreateFilterClause(filterExpression1);
            FilterClause       filterClause2  = CreateFilterClause(filterExpression2);
            ParameterAliasNode expression1    = filterClause1.Expression as ParameterAliasNode;
            ParameterAliasNode expression2    = filterClause2.Expression as ParameterAliasNode;
            FilterSegment      filterSegment1 = new FilterSegment(expression1, filterClause1.RangeVariable, HardCodedTestModel.GetPet1Set());
            FilterSegment      filterSegment2 = new FilterSegment(expression2, filterClause2.RangeVariable, HardCodedTestModel.GetPet1Set());

            filterSegment1.Equals(filterSegment2).Should().BeFalse();
            filterSegment2.Equals(filterSegment1).Should().BeFalse();
        }
Пример #12
0
        protected virtual Pipe VisitFilter(FilterSegment filter)
        {
            if (filter == null)
            {
                return(null);
            }

            Pipe output = Visit(filter.Output);

            if (output != filter.Output)
            {
                return(new FilterSegment(output, filter.MessageType));
            }

            return(filter);
        }
Пример #13
0
        public void Should_contain_all_nodes()

        {
            MessageConsumerSegment consumer      = PipeSegment.Consumer <SomethingHappenedEvent>(x => { });
            EndSegment             end           = PipeSegment.End <SomethingHappenedEvent>();
            RecipientListSegment   recipientList = PipeSegment.RecipientList <SomethingHappenedEvent>(new Pipe[] { consumer, end });
            FilterSegment          filter        = PipeSegment.Filter <object>(recipientList);
            Pipe input = PipeSegment.Input(filter);

            //var generator = new PipelineGraphGenerator();

            //string filename = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "graph.png");

            //generator.SaveGraphToFile(input.GetGraphData(), 2560, 1920, filename);

            PipelineDebugVisualizer.TestShowVisualizer(input.GetGraphData());
        }
Пример #14
0
        /// <summary>
        /// 获取过滤块sqlcommand
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="filterSegment"></param>
        /// <returns></returns>
        private SqlCommand GetFilterSegmentSqlCommand(string baseSqlString, List <FilterSegment> filterSegments)
        {
            SqlCommand sqlCommand = new SqlCommand();

            List <SqlCommand> tempSqlCommands = new List <SqlCommand>();

            StringBuilder sqlBuilder = new StringBuilder();

            //原始的查询条件是否包括where
            bool isContainerWhere = baseSqlString.ToLower().IndexOf("where") > 0;

            for (int i = 0; i < filterSegments.Count; i++)
            {
                FilterSegment segment = filterSegments[i];

                SqlCommand segmentSqlCommand = GetConditionSqlCommand("", segment.Conditions, "segment" + i, true);

                if (!isContainerWhere)
                {
                    sqlBuilder.Append($" WHERE ({segmentSqlCommand.Sql})  ");
                    isContainerWhere = true;
                }
                else
                {
                    sqlBuilder.Append($" {segment.OperatorType.ToString("G")} ({segmentSqlCommand.Sql})  ");
                }

                sqlCommand.Parameters.AddDynamicParams(segmentSqlCommand.Parameters);
            }

            if (sqlBuilder.Length > 0)
            {
                baseSqlString += sqlBuilder.ToString();
                sqlCommand.Sql = baseSqlString;
            }

            return(sqlCommand);
        }
Пример #15
0
 public override bool Translate(FilterSegment segment)
 {
     return(GetNextSegment() is FilterSegment filterSegment && filterSegment.EdmType == segment.EdmType);
 }
Пример #16
0
        protected override Pipe VisitFilter(FilterSegment filter)
        {
            WriteLine(filter, "Allow " + filter.Output.MessageType);

            return(base.VisitFilter(filter));
        }
Пример #17
0
 /// <summary>
 /// Handle validating a FilterSegment
 /// </summary>
 /// <param name="segment">The filter segment to valdiate.</param>
 public override void Handle(FilterSegment segment)
 {
     ValidateItem(segment);
     ValidateExpression(segment.Expression);
 }