示例#1
0
        /// <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());
        }
示例#5
0
 /// <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);
        }
示例#9
0
        /// <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);
        }
示例#10
0
        /// <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));
        }
示例#11
0
        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);
        }
示例#12
0
 /// <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);
 }
示例#13
0
        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();
 }
示例#15
0
        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);