public void GetBuiltInFunctionSignatureFractionalseconds()
        {
            FunctionSignatureWithReturnType[] builtInFunctionsSignature;
            BuiltInUriFunctions.TryGetBuiltInFunction("fractionalseconds", out builtInFunctionsSignature);

            builtInFunctionsSignature.Length.Should().Be(4); // DateTimeOffset, TimeOfDay, Nullable and not Nullable
        }
        public void GetBuiltInFunctionSignaturesDateTimeOffsetDay()
        {
            FunctionSignatureWithReturnType[] builtInFunctionsSignature;
            BuiltInUriFunctions.TryGetBuiltInFunction("day", out builtInFunctionsSignature);

            builtInFunctionsSignature.Length.Should().Be(4); // DateTimeOffset and Date, Nullable and not Nullable
        }
        public void GetBuiltInFunctionSignatureSecond()
        {
            FunctionSignatureWithReturnType[] builtInFunctionsSignature;
            BuiltInUriFunctions.TryGetBuiltInFunction("second", out builtInFunctionsSignature);

            builtInFunctionsSignature.Length.Should().Be(6); // DateTimeOffset, Duration and TimeOfDay, Nullable and not Nullable
        }
Esempio n. 4
0
        public void GetBuiltInFunctionSignatureMinute()
        {
            FunctionSignatureWithReturnType[] builtInFunctionsSignature;
            BuiltInUriFunctions.TryGetBuiltInFunction("minute", out builtInFunctionsSignature);

            Assert.Equal(6, builtInFunctionsSignature.Length); // DateTimeOffset, Duration and TimeOfDay, Nullable and not Nullable
        }
        public void GetBuiltInFunctionSignaturesSubstring()
        {
            FunctionSignatureWithReturnType[] builtInFunctionsSignature;
            BuiltInUriFunctions.TryGetBuiltInFunction("substring", out builtInFunctionsSignature);

            builtInFunctionsSignature.Length.Should().Be(6);
        }
Esempio n. 6
0
        /// <summary>
        /// Finds all signatures for the given function name.
        /// Search in both BuiltIn uri functions and Custom uri functions.
        /// Combine and return the signatures overloads of the results.
        /// </summary>
        /// <param name="functionName">The function to get the signatures for.</param>
        /// <returns>The signatures which match the supplied function name.</returns>
        internal static FunctionSignatureWithReturnType[] GetUriFunctionSignatures(string functionName)
        {
            FunctionSignatureWithReturnType[] customUriFunctionsSignatures  = null;
            FunctionSignatureWithReturnType[] builtInUriFunctionsSignatures = null;

            // Try to find the function in the user custom functions and in our built-in functions
            bool customFound  = CustomUriFunctions.TryGetCustomFunction(functionName, out customUriFunctionsSignatures);
            bool builtInFound = BuiltInUriFunctions.TryGetBuiltInFunction(functionName, out builtInUriFunctionsSignatures);

            if (!customFound && !builtInFound)
            {
                // Not found in both built-in and custom.
                throw new ODataException(ODataErrorStrings.MetadataBinder_UnknownFunction(functionName));
            }

            if (!customFound)
            {
                Debug.Assert(builtInUriFunctionsSignatures != null, "No Built-in functions found");
                return(builtInUriFunctionsSignatures);
            }

            if (!builtInFound)
            {
                Debug.Assert(customUriFunctionsSignatures != null, "No Custom functions found");
                return(customUriFunctionsSignatures);
            }

            return(builtInUriFunctionsSignatures.Concat(customUriFunctionsSignatures).ToArray());
        }
Esempio n. 7
0
        public void GetBuiltInFunctionSignaturesDateTimeOffsetDay()
        {
            FunctionSignatureWithReturnType[] builtInFunctionsSignature;
            BuiltInUriFunctions.TryGetBuiltInFunction("day", out builtInFunctionsSignature);

            Assert.Equal(4, builtInFunctionsSignature.Length); // DateTimeOffset and Date, Nullable and not Nullable
        }
Esempio n. 8
0
        public void GetBuiltInFunctionSignaturesSubstring()
        {
            FunctionSignatureWithReturnType[] builtInFunctionsSignature;
            BuiltInUriFunctions.TryGetBuiltInFunction("substring", out builtInFunctionsSignature);

            Assert.Equal(6, builtInFunctionsSignature.Length);
        }
        public void GetBuiltInFunctionSignaturesShouldThrowOnIncorrectName()
        {
            FunctionSignatureWithReturnType[] builtInFunctionsSignature;
            var result = BuiltInUriFunctions.TryGetBuiltInFunction("rarg", out builtInFunctionsSignature);

            result.Should().BeFalse();
            builtInFunctionsSignature.Should().BeNull();
        }
Esempio n. 10
0
        public void GetBuiltInFunctionSignaturesShouldThrowOnIncorrectName()
        {
            FunctionSignatureWithReturnType[] builtInFunctionsSignature;
            var result = BuiltInUriFunctions.TryGetBuiltInFunction("rarg", out builtInFunctionsSignature);

            Assert.False(result);
            Assert.Null(builtInFunctionsSignature);
        }
Esempio n. 11
0
        public void DistanceOnlyWorksBetweenTwoPoints()
        {
            string functionName = "geo.distance";
            FunctionSignatureWithReturnType[] signatures;
            BuiltInUriFunctions.TryGetBuiltInFunction(functionName, out signatures);

            Action parseDistanceWithNonPointOperand = () => ParseFilter("geo.distance(GeometryLineString, geometry'POINT(10 30)') eq 2", HardCodedTestModel.TestModel, HardCodedTestModel.GetPersonType(), HardCodedTestModel.GetPeopleSet());
            parseDistanceWithNonPointOperand.Throws<ODataException>(ODataErrorStrings.MetadataBinder_NoApplicableFunctionFound(functionName, UriFunctionsHelper.BuildFunctionSignatureListDescription(functionName, signatures)));
        }
Esempio n. 12
0
        public void CreateBuiltInSpatialFunctionsSignaturesCorrectly()
        {
            var functions = new Dictionary <string, FunctionSignatureWithReturnType[]>(StringComparer.Ordinal);

            BuiltInUriFunctions.CreateSpatialFunctions(functions);
            FunctionSignatureWithReturnType[] signatures;
            functions.TryGetValue("geo.distance", out signatures);
            Assert.Equal(2, signatures.Length);
            Assert.Equal("Edm.Double", signatures[0].ReturnType.Definition.FullTypeName());

            Assert.Equal("Edm.GeographyPoint", signatures[0].ArgumentTypes[0].Definition.FullTypeName());
            Assert.Equal("Edm.GeographyPoint", signatures[0].ArgumentTypes[1].Definition.FullTypeName());

            Assert.Equal("Edm.Double", signatures[1].ReturnType.Definition.FullTypeName());
            Assert.Equal("Edm.GeometryPoint", signatures[1].ArgumentTypes[0].Definition.FullTypeName());
            Assert.Equal("Edm.GeometryPoint", signatures[1].ArgumentTypes[1].Definition.FullTypeName());
        }
        public void CreateBuiltInSpatialFunctionsSignaturesCorrectly()
        {
            var functions = new Dictionary <string, FunctionSignatureWithReturnType[]>(StringComparer.Ordinal);

            BuiltInUriFunctions.CreateSpatialFunctions(functions);
            FunctionSignatureWithReturnType[] signatures;
            functions.TryGetValue("geo.distance", out signatures);
            signatures.Length.Should().Be(2);
            signatures[0].ReturnType.Definition.FullTypeName().Should().Be(EdmCoreModel.Instance.GetDouble(true).FullName());
            signatures[0].ArgumentTypes[0].Definition.FullTypeName().Should()
            .Be(EdmCoreModel.Instance.GetSpatial(EdmPrimitiveTypeKind.GeographyPoint, true).FullName());
            signatures[0].ArgumentTypes[1].Definition.FullTypeName().Should()
            .Be(EdmCoreModel.Instance.GetSpatial(EdmPrimitiveTypeKind.GeographyPoint, true).FullName());
            signatures[1].ReturnType.Definition.FullTypeName().Should().Be(EdmCoreModel.Instance.GetDouble(true).FullName());
            signatures[1].ArgumentTypes[0].Definition.FullTypeName().Should()
            .Be(EdmCoreModel.Instance.GetSpatial(EdmPrimitiveTypeKind.GeometryPoint, true).FullName());
            signatures[1].ArgumentTypes[1].Definition.FullTypeName().Should()
            .Be(EdmCoreModel.Instance.GetSpatial(EdmPrimitiveTypeKind.GeometryPoint, true).FullName());
        }