Пример #1
0
        private static bool TryAssertIntegerConstantAsType(IEdmIntegerConstantExpression expression, IEdmTypeReference type, out IEnumerable <EdmError> discoveredErrors)
        {
            if (!type.IsIntegral())
            {
                discoveredErrors = new EdmError[] { new EdmError(expression.Location(), EdmErrorCode.ExpressionPrimitiveKindNotValidForAssertedType, Edm.Strings.EdmModel_Validator_Semantic_ExpressionPrimitiveKindNotValidForAssertedType) };
                return(false);
            }

            switch (type.PrimitiveKind())
            {
            case EdmPrimitiveTypeKind.Int64:
                return(TryAssertIntegerConstantInRange(expression, Int64.MinValue, Int64.MaxValue, out discoveredErrors));

            case EdmPrimitiveTypeKind.Int32:
                return(TryAssertIntegerConstantInRange(expression, Int32.MinValue, Int32.MaxValue, out discoveredErrors));

            case EdmPrimitiveTypeKind.Int16:
                return(TryAssertIntegerConstantInRange(expression, Int16.MinValue, Int16.MaxValue, out discoveredErrors));

            case EdmPrimitiveTypeKind.Byte:
                return(TryAssertIntegerConstantInRange(expression, Byte.MinValue, Byte.MaxValue, out discoveredErrors));

            case EdmPrimitiveTypeKind.SByte:
                return(TryAssertIntegerConstantInRange(expression, SByte.MinValue, SByte.MaxValue, out discoveredErrors));

            default:
                discoveredErrors = new EdmError[] { new EdmError(expression.Location(), EdmErrorCode.ExpressionPrimitiveKindNotValidForAssertedType, Edm.Strings.EdmModel_Validator_Semantic_ExpressionPrimitiveKindNotValidForAssertedType) };
                return(false);
            }
        }
Пример #2
0
        private static bool TryAssertIntegerConstantInRange(IEdmIntegerConstantExpression expression, long min, long max, out IEnumerable <EdmError> discoveredErrors)
        {
            if (expression.Value < min || expression.Value > max)
            {
                discoveredErrors = new EdmError[] { new EdmError(expression.Location(), EdmErrorCode.IntegerConstantValueOutOfRange, Edm.Strings.EdmModel_Validator_Semantic_IntegerConstantValueOutOfRange) };
                return(false);
            }

            discoveredErrors = Enumerable.Empty <EdmError>();
            return(true);
        }
Пример #3
0
        private static bool TryAssertIntegerConstantAsType(IEdmIntegerConstantExpression expression, IEdmTypeReference type, out IEnumerable <EdmError> discoveredErrors)
        {
            if (type.IsIntegral())
            {
                EdmPrimitiveTypeKind edmPrimitiveTypeKind = type.PrimitiveKind();
                if (edmPrimitiveTypeKind == EdmPrimitiveTypeKind.Byte)
                {
                    return(ExpressionTypeChecker.TryAssertIntegerConstantInRange(expression, (long)0, (long)0xff, out discoveredErrors));
                }
                else
                {
                    switch (edmPrimitiveTypeKind)
                    {
                    case EdmPrimitiveTypeKind.Int16:
                    {
                        return(ExpressionTypeChecker.TryAssertIntegerConstantInRange(expression, (long)-32768, (long)0x7fff, out discoveredErrors));
                    }

                    case EdmPrimitiveTypeKind.Int32:
                    {
                        return(ExpressionTypeChecker.TryAssertIntegerConstantInRange(expression, (long)-2147483648, (long)0x7fffffff, out discoveredErrors));
                    }

                    case EdmPrimitiveTypeKind.Int64:
                    {
                        return(ExpressionTypeChecker.TryAssertIntegerConstantInRange(expression, -9223372036854775808L, 0x7fffffffffffffffL, out discoveredErrors));
                    }

                    case EdmPrimitiveTypeKind.SByte:
                    {
                        return(ExpressionTypeChecker.TryAssertIntegerConstantInRange(expression, (long)-128, (long)127, out discoveredErrors));
                    }
                    }
                    EdmError[] edmError = new EdmError[1];
                    edmError[0]      = new EdmError(expression.Location(), EdmErrorCode.ExpressionPrimitiveKindNotValidForAssertedType, Strings.EdmModel_Validator_Semantic_ExpressionPrimitiveKindNotValidForAssertedType);
                    discoveredErrors = edmError;
                    return(false);
                }
            }
            else
            {
                EdmError[] edmErrorArray = new EdmError[1];
                edmErrorArray[0] = new EdmError(expression.Location(), EdmErrorCode.ExpressionPrimitiveKindNotValidForAssertedType, Strings.EdmModel_Validator_Semantic_ExpressionPrimitiveKindNotValidForAssertedType);
                discoveredErrors = edmErrorArray;
                return(false);
            }
        }
Пример #4
0
        /// <summary>
        /// Get the integer value from the record using the given property name.
        /// </summary>
        /// <param name="record">The record expression.</param>
        /// <param name="propertyName">The property name.</param>
        /// <returns>The integer value or null.</returns>
        public static long?GetInteger(this IEdmRecordExpression record, string propertyName)
        {
            Utils.CheckArgumentNull(record, nameof(record));
            Utils.CheckArgumentNull(propertyName, nameof(propertyName));

            if (record.Properties != null)
            {
                IEdmPropertyConstructor property = record.Properties.FirstOrDefault(e => e.Name == propertyName);
                if (property != null)
                {
                    IEdmIntegerConstantExpression value = property.Value as IEdmIntegerConstantExpression;
                    if (value != null)
                    {
                        return(value.Value);
                    }
                }
            }

            return(null);
        }
Пример #5
0
 protected override void ProcessIntegerConstantExpression(IEdmIntegerConstantExpression expression)
 {
     this.schemaWriter.WriteIntegerConstantExpressionElement(expression);
 }
 internal void WriteIntegerConstantExpressionElement(IEdmIntegerConstantExpression expression)
 {
     this.xmlWriter.WriteStartElement(CsdlConstants.Element_Int);
     this.xmlWriter.WriteString(EdmValueWriter.LongAsXml(expression.Value));
     this.WriteEndElement();
 }
Пример #7
0
        private static bool TryCastIntegerConstantInRange(IEdmIntegerConstantExpression expression, long min, long max, out IEnumerable<EdmError> discoveredErrors)
        {
            if (expression.Value < min || expression.Value > max)
            {
                discoveredErrors = new EdmError[] { new EdmError(expression.Location(), EdmErrorCode.IntegerConstantValueOutOfRange, Edm.Strings.EdmModel_Validator_Semantic_IntegerConstantValueOutOfRange) };
                return false;
            }

            discoveredErrors = Enumerable.Empty<EdmError>();
            return true;
        }
Пример #8
0
        private static bool TryCastIntegerConstantAsType(IEdmIntegerConstantExpression expression, IEdmTypeReference type, out IEnumerable<EdmError> discoveredErrors)
        {
            if (!type.IsIntegral())
            {
                discoveredErrors = new EdmError[] { new EdmError(expression.Location(), EdmErrorCode.ExpressionPrimitiveKindNotValidForAssertedType, Edm.Strings.EdmModel_Validator_Semantic_ExpressionPrimitiveKindNotValidForAssertedType) };
                return false;
            }

            switch (type.PrimitiveKind())
            {
                case EdmPrimitiveTypeKind.Int64:
                    return TryCastIntegerConstantInRange(expression, Int64.MinValue, Int64.MaxValue, out discoveredErrors);
                case EdmPrimitiveTypeKind.Int32:
                    return TryCastIntegerConstantInRange(expression, Int32.MinValue, Int32.MaxValue, out discoveredErrors);
                case EdmPrimitiveTypeKind.Int16:
                    return TryCastIntegerConstantInRange(expression, Int16.MinValue, Int16.MaxValue, out discoveredErrors);
                case EdmPrimitiveTypeKind.Byte:
                    return TryCastIntegerConstantInRange(expression, Byte.MinValue, Byte.MaxValue, out discoveredErrors);
                case EdmPrimitiveTypeKind.SByte:
                    return TryCastIntegerConstantInRange(expression, SByte.MinValue, SByte.MaxValue, out discoveredErrors);
                default:
                    discoveredErrors = new EdmError[] { new EdmError(expression.Location(), EdmErrorCode.ExpressionPrimitiveKindNotValidForAssertedType, Edm.Strings.EdmModel_Validator_Semantic_ExpressionPrimitiveKindNotValidForAssertedType) };
                    return false;
            }
        }
Пример #9
0
 protected virtual void ProcessIntegerConstantExpression(IEdmIntegerConstantExpression expression)
 {
     this.ProcessExpression(expression);
 }
Пример #10
0
 internal abstract void WriteIntegerConstantExpressionElement(IEdmIntegerConstantExpression expression);
Пример #11
0
        /// <summary>
        /// Convert an <see cref="IEdmExpression"/> to a <see cref="ODataValue"/>
        /// </summary>
        /// <param name="expression">The <see cref="IEdmExpression"/>.</param>
        /// <returns>The null or <see cref="ODataValue"/>.</returns>
        public static ODataValue Convert(this IEdmExpression expression)
        {
            if (expression == null)
            {
                return(null);
            }

            switch (expression.ExpressionKind)
            {
            case EdmExpressionKind.BinaryConstant:
                IEdmBinaryConstantExpression binaryConstant = (IEdmBinaryConstantExpression)expression;
                return(new ODataPrimitiveValue(binaryConstant.Value)
                {
                    TypeReference = EdmCoreModel.Instance.GetBinary(false)
                });

            case EdmExpressionKind.BooleanConstant:
                IEdmBooleanConstantExpression booleanConstant = (IEdmBooleanConstantExpression)expression;
                return(new ODataPrimitiveValue(booleanConstant.Value)
                {
                    TypeReference = EdmCoreModel.Instance.GetBoolean(false)
                });

            case EdmExpressionKind.DateTimeOffsetConstant:
                IEdmDateTimeOffsetConstantExpression dateTimeOffsetConstant = (IEdmDateTimeOffsetConstantExpression)expression;
                return(new ODataPrimitiveValue(dateTimeOffsetConstant.Value)
                {
                    TypeReference = EdmCoreModel.Instance.GetDateTimeOffset(false)
                });

            case EdmExpressionKind.DecimalConstant:
                IEdmDecimalConstantExpression decimalConstant = (IEdmDecimalConstantExpression)expression;
                return(new ODataPrimitiveValue(decimalConstant.Value)
                {
                    TypeReference = EdmCoreModel.Instance.GetDecimal(false)
                });

            case EdmExpressionKind.FloatingConstant:
                IEdmFloatingConstantExpression floatConstant = (IEdmFloatingConstantExpression)expression;
                return(new ODataPrimitiveValue(floatConstant.Value)
                {
                    TypeReference = EdmCoreModel.Instance.GetDouble(false)
                });

            case EdmExpressionKind.GuidConstant:
                IEdmGuidConstantExpression guidConstant = (IEdmGuidConstantExpression)expression;
                return(new ODataPrimitiveValue(guidConstant.Value)
                {
                    TypeReference = EdmCoreModel.Instance.GetGuid(false)
                });

            case EdmExpressionKind.IntegerConstant:
                IEdmIntegerConstantExpression integerConstant = (IEdmIntegerConstantExpression)expression;
                return(new ODataPrimitiveValue(integerConstant.Value)
                {
                    TypeReference = EdmCoreModel.Instance.GetInt64(false)
                });

            case EdmExpressionKind.StringConstant:
                IEdmStringConstantExpression stringConstant = (IEdmStringConstantExpression)expression;
                return(new ODataPrimitiveValue(stringConstant.Value)
                {
                    TypeReference = EdmCoreModel.Instance.GetString(false)
                });

            case EdmExpressionKind.DurationConstant:
                IEdmDurationConstantExpression durationConstant = (IEdmDurationConstantExpression)expression;
                return(new ODataPrimitiveValue(durationConstant.Value)
                {
                    TypeReference = EdmCoreModel.Instance.GetDuration(false)
                });

            case EdmExpressionKind.TimeOfDayConstant:
                IEdmTimeOfDayConstantExpression timeOfDayConstant = (IEdmTimeOfDayConstantExpression)expression;
                return(new ODataPrimitiveValue(timeOfDayConstant.Value)
                {
                    TypeReference = EdmCoreModel.Instance.GetTimeOfDay(false)
                });

            case EdmExpressionKind.DateConstant:
                IEdmDateConstantExpression dateConstant = (IEdmDateConstantExpression)expression;
                return(new ODataPrimitiveValue(dateConstant.Value)
                {
                    TypeReference = EdmCoreModel.Instance.GetDate(false)
                });

            case EdmExpressionKind.Record:
                IEdmRecordExpression recordExpression = (IEdmRecordExpression)expression;
                return(new ODataResourceValue
                {
                    TypeReference = recordExpression.DeclaredType,
                    Properties = recordExpression.Properties.ToDictionary(p => p.Name, p => p.Value.Convert())
                });

            case EdmExpressionKind.Collection:
                IEdmCollectionExpression collectionExpression = (IEdmCollectionExpression)expression;
                ODataCollectValue        collectionValue      = new ODataCollectValue
                {
                    TypeReference = collectionExpression.DeclaredType
                };

                collectionValue.Elements = collectionExpression.Elements.Select(e => e.Convert()).ToList();
                return(collectionValue);

            case EdmExpressionKind.Path:
            case EdmExpressionKind.PropertyPath:
            case EdmExpressionKind.NavigationPropertyPath:
            case EdmExpressionKind.EnumMember:
            default:
                throw new NotSupportedException(String.Format(SRResource.NotSupportedEdmExpressionKind, expression.ExpressionKind));
            }
        }
Пример #12
0
		private static bool TryAssertIntegerConstantAsType(IEdmIntegerConstantExpression expression, IEdmTypeReference type, out IEnumerable<EdmError> discoveredErrors)
		{
			if (type.IsIntegral())
			{
				EdmPrimitiveTypeKind edmPrimitiveTypeKind = type.PrimitiveKind();
				if (edmPrimitiveTypeKind == EdmPrimitiveTypeKind.Byte)
				{
					return ExpressionTypeChecker.TryAssertIntegerConstantInRange(expression, (long)0, (long)0xff, out discoveredErrors);
				}
				else
				{
					switch (edmPrimitiveTypeKind)
					{
						case EdmPrimitiveTypeKind.Int16:
						{
							return ExpressionTypeChecker.TryAssertIntegerConstantInRange(expression, (long)-32768, (long)0x7fff, out discoveredErrors);
						}
						case EdmPrimitiveTypeKind.Int32:
						{
							return ExpressionTypeChecker.TryAssertIntegerConstantInRange(expression, (long)-2147483648, (long)0x7fffffff, out discoveredErrors);
						}
						case EdmPrimitiveTypeKind.Int64:
						{
							return ExpressionTypeChecker.TryAssertIntegerConstantInRange(expression, -9223372036854775808L, 0x7fffffffffffffffL, out discoveredErrors);
						}
						case EdmPrimitiveTypeKind.SByte:
						{
							return ExpressionTypeChecker.TryAssertIntegerConstantInRange(expression, (long)-128, (long)127, out discoveredErrors);
						}
					}
					EdmError[] edmError = new EdmError[1];
					edmError[0] = new EdmError(expression.Location(), EdmErrorCode.ExpressionPrimitiveKindNotValidForAssertedType, Strings.EdmModel_Validator_Semantic_ExpressionPrimitiveKindNotValidForAssertedType);
					discoveredErrors = edmError;
					return false;
				}
			}
			else
			{
				EdmError[] edmErrorArray = new EdmError[1];
				edmErrorArray[0] = new EdmError(expression.Location(), EdmErrorCode.ExpressionPrimitiveKindNotValidForAssertedType, Strings.EdmModel_Validator_Semantic_ExpressionPrimitiveKindNotValidForAssertedType);
				discoveredErrors = edmErrorArray;
				return false;
			}
		}