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); } }
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); }
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); } }
/// <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); }
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(); }
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; }
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; } }
protected virtual void ProcessIntegerConstantExpression(IEdmIntegerConstantExpression expression) { this.ProcessExpression(expression); }
internal abstract void WriteIntegerConstantExpressionElement(IEdmIntegerConstantExpression expression);
/// <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)); } }
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; } }