/// <summary> /// We return the <see cref="ResourceRangeVariableReferenceNode"/> within a <see cref="QueryNode"/> /// </summary> /// <param name="node">The node to extract the ResourceRangeVariableReferenceNode.</param> /// <returns>The extracted ResourceRangeVariableReferenceNode.</returns> private ResourceRangeVariableReferenceNode GetResourceRangeVariableReferenceNode(QueryNode node) { if (node == null) { return(null); } switch (node.Kind) { case QueryNodeKind.SingleValuePropertyAccess: SingleValuePropertyAccessNode singleValuePropertyAccessNode = node as SingleValuePropertyAccessNode; return(GetResourceRangeVariableReferenceNode(singleValuePropertyAccessNode.Source)); case QueryNodeKind.Convert: ConvertNode convertNode = node as ConvertNode; return(GetResourceRangeVariableReferenceNode(convertNode.Source)); case QueryNodeKind.Any: AnyNode anyNode = node as AnyNode; return(GetResourceRangeVariableReferenceNode(anyNode.Source)); case QueryNodeKind.SingleValueFunctionCall: SingleValueFunctionCallNode singleValueFunctionCallNode = node as SingleValueFunctionCallNode; return(GetResourceRangeVariableReferenceNode(singleValueFunctionCallNode.Parameters.First())); case QueryNodeKind.ResourceRangeVariableReference: return(node as ResourceRangeVariableReferenceNode); case QueryNodeKind.SingleValueOpenPropertyAccess: SingleValueOpenPropertyAccessNode singleValueOpenPropertyAccessNode = node as SingleValueOpenPropertyAccessNode; return(GetResourceRangeVariableReferenceNode(singleValueOpenPropertyAccessNode.Source)); case QueryNodeKind.SingleComplexNode: SingleComplexNode singleComplexNode = node as SingleComplexNode; return(GetResourceRangeVariableReferenceNode(singleComplexNode.Source)); case QueryNodeKind.CollectionComplexNode: CollectionComplexNode collectionComplexNode = node as CollectionComplexNode; return(GetResourceRangeVariableReferenceNode(collectionComplexNode.Source)); case QueryNodeKind.CollectionNavigationNode: CollectionNavigationNode collectionNavigationNode = node as CollectionNavigationNode; return(GetResourceRangeVariableReferenceNode(collectionNavigationNode.Source)); case QueryNodeKind.SingleNavigationNode: SingleNavigationNode singleNavigationNode = node as SingleNavigationNode; return(GetResourceRangeVariableReferenceNode(singleNavigationNode.Source)); case QueryNodeKind.CollectionResourceFunctionCall: CollectionResourceFunctionCallNode collectionResourceFunctionCallNode = node as CollectionResourceFunctionCallNode; return(GetResourceRangeVariableReferenceNode(collectionResourceFunctionCallNode.Source)); case QueryNodeKind.SingleResourceFunctionCall: SingleResourceFunctionCallNode singleResourceFunctionCallNode = node as SingleResourceFunctionCallNode; return(GetResourceRangeVariableReferenceNode(singleResourceFunctionCallNode.Source)); } return(null); }
public void NameIsSetCorrectly() { var entityCollectionFunctionCallNode = new CollectionResourceFunctionCallNode("stuff", new List <IEdmFunction>() { HardCodedTestModel.GetFunctionForHasJob() }, null, this.entityCollectionTypeReference, HardCodedTestModel.GetPeopleSet(), null); Assert.Equal("stuff", entityCollectionFunctionCallNode.Name); }
public void KindIsSingleEntityFunction() { var entityFunctionCallNode = new CollectionResourceFunctionCallNode("stuff", new List <IEdmFunction>() { HardCodedTestModel.GetFunctionForHasJob() }, new QueryNode[] { new ConstantNode(1) }, this.entityCollectionTypeReference, HardCodedTestModel.GetPeopleSet(), null); Assert.Equal(QueryNodeKind.CollectionResourceFunctionCall, entityFunctionCallNode.Kind); }
public void FunctionImportsAreSetCorrectly() { var entityCollectionFunctionCallNode = new CollectionResourceFunctionCallNode("stuff", new List <IEdmFunction>() { HardCodedTestModel.GetFunctionForHasJob() }, null, this.entityCollectionTypeReference, HardCodedTestModel.GetPeopleSet(), null); entityCollectionFunctionCallNode.ShouldBeCollectionResourceFunctionCallNode(HardCodedTestModel.GetFunctionForHasJob()); }
/// <summary> /// Translate an CollectionResourceFunctionCallNode. /// </summary> /// <param name="nodeIn">The node to be translated.</param> /// <returns>The translated node.</returns> public override QueryNode Visit(CollectionResourceFunctionCallNode nodeIn) { return(new CollectionResourceFunctionCallNode( nodeIn.Name, nodeIn.Functions, nodeIn.Parameters.Select(p => p.Accept(this)), nodeIn.CollectionType, (IEdmEntitySetBase)nodeIn.NavigationSource, nodeIn.Source == null ? null : nodeIn.Source.Accept(this))); }
public void EntityTypeReferenceSetCorrectly() { var entityFunctionCallNode = new CollectionResourceFunctionCallNode("stuff", new List <IEdmFunction>() { HardCodedTestModel.GetFunctionForHasJob() }, new QueryNode[] { new ConstantNode(1) }, this.entityCollectionTypeReference, HardCodedTestModel.GetPeopleSet(), null); Assert.Same(entityFunctionCallNode.ItemType, this.entityTypeReference); Assert.Same(entityFunctionCallNode.ItemStructuredType, this.entityTypeReference); }
public void ArgumentsSetCorrectly() { var entityFunctionCallNode = new CollectionResourceFunctionCallNode("stuff", new List <IEdmFunction>() { HardCodedTestModel.GetFunctionForHasJob() }, new QueryNode[] { new ConstantNode(1) }, this.entityCollectionTypeReference, HardCodedTestModel.GetPeopleSet(), null); var parameter = Assert.Single(entityFunctionCallNode.Parameters); parameter.ShouldBeConstantQueryNode(1); }
public void ArgumentsSetCorrectly() { var entityFunctionCallNode = new CollectionResourceFunctionCallNode("stuff", new List <IEdmFunction>() { HardCodedTestModel.GetFunctionForHasJob() }, new QueryNode[] { new ConstantNode(1) }, this.entityCollectionTypeReference, HardCodedTestModel.GetPeopleSet(), null); entityFunctionCallNode.Parameters.Should().HaveCount(1); entityFunctionCallNode.Parameters.ElementAt(0).ShouldBeConstantQueryNode(1); }
/// <summary> /// Translates a <see cref="CollectionResourceFunctionCallNode"/> into a corresponding <see cref="String"/>. /// </summary> /// <param name="node">The node to translate.</param> /// <returns>The translated String of CollectionResourceFunctionCallNode.</returns> public override String Visit(CollectionResourceFunctionCallNode node) { ExceptionUtils.CheckArgumentNotNull(node, "node"); String result = node.Name; if (node.Source != null) { result = this.TranslatePropertyAccess(node.Source, result); } return this.TranslateFunctionCall(result, node.Parameters); }
/// <summary> /// Translates a <see cref="EntityCollectionFunctionCallNode"/> into a corresponding <see cref="string"/>. /// </summary> /// <param name="node">The node to translate.</param> /// <returns>The translated string of EntityCollectionFunctionCallNode.</returns> public override string Visit(CollectionResourceFunctionCallNode node) { string result = node.Name; if (node.Source != null) { result = this.TranslatePropertyAccess(node.Source, result); } return(this.TranslateFunctionCall(result, node.Parameters)); }
public override QueryNode Visit(CollectionResourceFunctionCallNode nodeIn) { QueryNode?source = nodeIn.Source == null ? null : Visit(nodeIn.Source); IEnumerable <QueryNode>?parameters = VisitParameters(nodeIn.Parameters); if (nodeIn.Source != source || nodeIn.Parameters != parameters) { nodeIn = new CollectionResourceFunctionCallNode(nodeIn.Name, nodeIn.Functions, parameters, nodeIn.CollectionType, (IEdmEntitySetBase)nodeIn.NavigationSource, source); } return(nodeIn); }
/// <summary> /// Visit a CollectionResourceFunctionCallNode /// </summary> /// <param name="nodeIn">the node to visit</param> /// <returns>true, indicating that the node has been visited.</returns> public override bool Visit(CollectionResourceFunctionCallNode nodeIn) { validate(nodeIn); validate(nodeIn.ItemType.Definition); validate(nodeIn.CollectionType.CollectionDefinition()); foreach (IEdmFunction function in nodeIn.Functions) { validate(function); } foreach (QueryNode param in nodeIn.Parameters) { ValidateNode(param); } return(true); }
public static CollectionResourceFunctionCallNode ShouldHaveConstantParameter <TValue>(this CollectionResourceFunctionCallNode functionCallNode, string name, TValue value) { Assert.NotNull(functionCallNode); functionCallNode.Parameters.ContainItemsAssignableTo <NamedFunctionParameterNode>(); var argument = functionCallNode.Parameters.OfType <NamedFunctionParameterNode>().SingleOrDefault(p => p.Name == name); Assert.NotNull(argument); argument.Value.ShouldBeConstantQueryNode(value); return(functionCallNode); }
/// <summary> /// Visit a CollectionResourceFunctionCallNode /// </summary> /// <param name="nodeIn">The node to visit</param> /// <returns>The translated expression</returns> public override Expression Visit(CollectionResourceFunctionCallNode nodeIn) { throw new NotImplementedException(); }
public static AndConstraint <CollectionResourceFunctionCallNode> ShouldHaveConstantParameter <TValue>(this CollectionResourceFunctionCallNode functionCallNode, string name, TValue value) { functionCallNode.Should().NotBeNull(); functionCallNode.Parameters.Should().ContainItemsAssignableTo <NamedFunctionParameterNode>(); var argument = functionCallNode.Parameters.Cast <NamedFunctionParameterNode>().SingleOrDefault(p => p.Name == name); argument.Should().NotBeNull(); argument.Value.ShouldBeConstantQueryNode(value); return(new AndConstraint <CollectionResourceFunctionCallNode>(functionCallNode)); }
public override T Visit(CollectionResourceFunctionCallNode nodeIn) => DebuggerBreakVisited(nodeIn);