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() });
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)); }
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(); }
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(); }
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(); }
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(); }
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))); }
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; }
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(); }
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(); }
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(); }
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); }
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()); }
/// <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); }
public override bool Translate(FilterSegment segment) { return(GetNextSegment() is FilterSegment filterSegment && filterSegment.EdmType == segment.EdmType); }
protected override Pipe VisitFilter(FilterSegment filter) { WriteLine(filter, "Allow " + filter.Output.MessageType); return(base.VisitFilter(filter)); }
/// <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); }