public void ConstructableTypeReferenceToStringTest() { IEdmEntityType astonishing = new EdmEntityType("AwesomeNamespace", "AstonishingEntity", null, false, false); IEdmComplexType breathTaking = new EdmComplexType("AwesomeNamespace", "BreathtakingComplex", null, false); IEdmEntityTypeReference entity = new EdmEntityTypeReference(astonishing, true); IEdmComplexTypeReference complex = new EdmComplexTypeReference(breathTaking, true); IEdmPrimitiveTypeReference primitive = EdmCoreModel.Instance.GetInt32(true); IEdmStringTypeReference stringType = EdmCoreModel.Instance.GetString(false, 128, false, true); IEdmBinaryTypeReference binary = EdmCoreModel.Instance.GetBinary(true, null, true); IEdmTemporalTypeReference temporal = EdmCoreModel.Instance.GetTemporal(EdmPrimitiveTypeKind.DateTimeOffset, 1, true); IEdmDecimalTypeReference decimalType = EdmCoreModel.Instance.GetDecimal(3, 2, true); IEdmSpatialTypeReference spatial = EdmCoreModel.Instance.GetSpatial(EdmPrimitiveTypeKind.Geography, 1, true); IEdmEntityReferenceTypeReference entityRef = new EdmEntityReferenceTypeReference(new EdmEntityReferenceType(astonishing), true); IEdmCollectionTypeReference collection = EdmCoreModel.GetCollection(EdmCoreModel.Instance.GetInt32(true)); IEdmTypeReference type = new EdmEntityTypeReference(astonishing, true); Assert.AreEqual("[AwesomeNamespace.AstonishingEntity Nullable=True]", entity.ToString(), "To string correct"); Assert.AreEqual("[AwesomeNamespace.BreathtakingComplex Nullable=True]", complex.ToString(), "To string correct"); Assert.AreEqual("[Edm.Int32 Nullable=True]", primitive.ToString(), "To string correct"); Assert.AreEqual("[Edm.String Nullable=True MaxLength=128 Unicode=False]", stringType.ToString(), "To string correct"); Assert.AreEqual("[Edm.Binary Nullable=True MaxLength=max]", binary.ToString(), "To string correct"); Assert.AreEqual("[Edm.DateTimeOffset Nullable=True Precision=1]", temporal.ToString(), "To string correct"); Assert.AreEqual("[Edm.Decimal Nullable=True Precision=3 Scale=2]", decimalType.ToString(), "To string correct"); Assert.AreEqual("[Edm.Geography Nullable=True SRID=1]", spatial.ToString(), "To string correct"); Assert.AreEqual("[Collection([Edm.Int32 Nullable=True]) Nullable=True]", collection.ToString(), "To string correct"); Assert.AreEqual("[EntityReference(AwesomeNamespace.AstonishingEntity) Nullable=True]", entityRef.ToString(), "To string correct"); Assert.AreEqual("[AwesomeNamespace.AstonishingEntity Nullable=True]", type.ToString(), "To string correct"); }
internal override void WriteSpatialTypeAttributes(IEdmSpatialTypeReference reference) { if (reference.IsGeography()) { this.WriteOptionalAttribute(CsdlConstants.Attribute_Srid, reference.SpatialReferenceIdentifier, CsdlConstants.Default_SpatialGeographySrid, SridAsXml); } else if (reference.IsGeometry()) { this.WriteOptionalAttribute(CsdlConstants.Attribute_Srid, reference.SpatialReferenceIdentifier, CsdlConstants.Default_SpatialGeometrySrid, SridAsXml); } }
private static void AppendSpatialFacets(this StringBuilder sb, IEdmSpatialTypeReference type) { string str; StringBuilder stringBuilder = sb; string str1 = "SRID"; int? spatialReferenceIdentifier = type.SpatialReferenceIdentifier; if (spatialReferenceIdentifier.HasValue) { int?nullable = type.SpatialReferenceIdentifier; str = nullable.ToString(); } else { str = "Variable"; } stringBuilder.AppendKeyValue(str1, str); }
/// <summary> /// If this reference is of a spatial type, this will return a valid spatial type reference to the type definition. Otherwise, it will return a bad spatial type reference. /// </summary> /// <param name="type">Reference to the calling object.</param> /// <returns>A valid spatial type reference if the definition of the reference is of a spatial type. Otherwise a bad spatial type reference.</returns> public static IEdmSpatialTypeReference AsSpatial(this IEdmTypeReference type) { EdmUtil.CheckArgumentNull(type, "type"); IEdmSpatialTypeReference spatial = type as IEdmSpatialTypeReference; if (spatial != null) { return(spatial); } string typeFullName = type.FullName(); List <EdmError> errors = new List <EdmError>(type.Errors()); if (errors.Count == 0) { errors.AddRange(ConversionError(type.Location(), typeFullName, EdmConstants.Type_Spatial)); } return(new BadSpatialTypeReference(typeFullName, type.IsNullable, errors)); }
private static bool IsEquivalentTo(this IEdmSpatialTypeReference thisType, IEdmSpatialTypeReference otherType) { if (thisType.IsNullable != otherType.IsNullable) { return(false); } else { int?spatialReferenceIdentifier = thisType.SpatialReferenceIdentifier; int?nullable = otherType.SpatialReferenceIdentifier; if (spatialReferenceIdentifier.GetValueOrDefault() != nullable.GetValueOrDefault()) { return(false); } else { return(spatialReferenceIdentifier.HasValue == nullable.HasValue); } } }
public static IEdmSpatialTypeReference AsSpatial(this IEdmTypeReference type) { EdmUtil.CheckArgumentNull <IEdmTypeReference>(type, "type"); IEdmSpatialTypeReference edmSpatialTypeReference = type as IEdmSpatialTypeReference; if (edmSpatialTypeReference == null) { string str = type.FullName(); List <EdmError> edmErrors = new List <EdmError>(type.Errors()); if (edmErrors.Count == 0) { edmErrors.AddRange(EdmTypeSemantics.ConversionError(type.Location(), str, "Spatial")); } return(new BadSpatialTypeReference(str, type.IsNullable, edmErrors)); } else { return(edmSpatialTypeReference); } }
/// <summary> /// Clones the specified type reference. /// </summary> /// <param name="typeReference">The type reference to clone.</param> /// <param name="nullable">true to make the cloned type reference nullable; false to make it non-nullable.</param> /// <returns>The cloned <see cref="IEdmTypeReference"/> instance.</returns> public static IEdmTypeReference Clone(this IEdmTypeReference typeReference, bool nullable) { if (typeReference == null) { return(null); } EdmTypeKind typeKind = typeReference.TypeKind(); switch (typeKind) { case EdmTypeKind.Primitive: EdmPrimitiveTypeKind kind = typeReference.PrimitiveKind(); IEdmPrimitiveType primitiveType = (IEdmPrimitiveType)typeReference.Definition; switch (kind) { case EdmPrimitiveTypeKind.Boolean: case EdmPrimitiveTypeKind.Byte: case EdmPrimitiveTypeKind.Double: case EdmPrimitiveTypeKind.Guid: case EdmPrimitiveTypeKind.Int16: case EdmPrimitiveTypeKind.Int32: case EdmPrimitiveTypeKind.Int64: case EdmPrimitiveTypeKind.SByte: case EdmPrimitiveTypeKind.Single: case EdmPrimitiveTypeKind.Stream: return(new EdmPrimitiveTypeReference(primitiveType, nullable)); case EdmPrimitiveTypeKind.Binary: IEdmBinaryTypeReference binaryTypeReference = (IEdmBinaryTypeReference)typeReference; return(new EdmBinaryTypeReference( primitiveType, nullable, binaryTypeReference.IsUnbounded, binaryTypeReference.MaxLength)); case EdmPrimitiveTypeKind.String: IEdmStringTypeReference stringTypeReference = (IEdmStringTypeReference)typeReference; return(new EdmStringTypeReference( primitiveType, nullable, stringTypeReference.IsUnbounded, stringTypeReference.MaxLength, stringTypeReference.IsUnicode)); case EdmPrimitiveTypeKind.Decimal: IEdmDecimalTypeReference decimalTypeReference = (IEdmDecimalTypeReference)typeReference; return(new EdmDecimalTypeReference(primitiveType, nullable, decimalTypeReference.Precision, decimalTypeReference.Scale)); case EdmPrimitiveTypeKind.DateTimeOffset: case EdmPrimitiveTypeKind.Duration: IEdmTemporalTypeReference temporalTypeReference = (IEdmTemporalTypeReference)typeReference; return(new EdmTemporalTypeReference(primitiveType, nullable, temporalTypeReference.Precision)); case EdmPrimitiveTypeKind.Geography: case EdmPrimitiveTypeKind.GeographyPoint: case EdmPrimitiveTypeKind.GeographyLineString: case EdmPrimitiveTypeKind.GeographyPolygon: case EdmPrimitiveTypeKind.GeographyCollection: case EdmPrimitiveTypeKind.GeographyMultiPolygon: case EdmPrimitiveTypeKind.GeographyMultiLineString: case EdmPrimitiveTypeKind.GeographyMultiPoint: case EdmPrimitiveTypeKind.Geometry: case EdmPrimitiveTypeKind.GeometryCollection: case EdmPrimitiveTypeKind.GeometryPoint: case EdmPrimitiveTypeKind.GeometryLineString: case EdmPrimitiveTypeKind.GeometryPolygon: case EdmPrimitiveTypeKind.GeometryMultiPolygon: case EdmPrimitiveTypeKind.GeometryMultiLineString: case EdmPrimitiveTypeKind.GeometryMultiPoint: IEdmSpatialTypeReference spatialTypeReference = (IEdmSpatialTypeReference)typeReference; return(new EdmSpatialTypeReference(primitiveType, nullable, spatialTypeReference.SpatialReferenceIdentifier)); default: throw new TaupoNotSupportedException("Invalid primitive type kind: " + typeKind.ToString()); } case EdmTypeKind.Entity: return(new EdmEntityTypeReference((IEdmEntityType)typeReference.Definition, nullable)); case EdmTypeKind.Complex: return(new EdmComplexTypeReference((IEdmComplexType)typeReference.Definition, nullable)); case EdmTypeKind.Collection: return(new EdmCollectionTypeReference((IEdmCollectionType)typeReference.Definition)); case EdmTypeKind.EntityReference: return(new EdmEntityReferenceTypeReference((IEdmEntityReferenceType)typeReference.Definition, nullable)); case EdmTypeKind.Enum: return(new EdmEnumTypeReference((IEdmEnumType)typeReference.Definition, nullable)); case EdmTypeKind.None: // fall through default: throw new TaupoNotSupportedException("Invalid type kind: " + typeKind.ToString()); } }
internal void WriteSpatialTypeAttributes(IEdmSpatialTypeReference reference) { this.WriteRequiredAttribute(CsdlConstants.Attribute_Srid, reference.SpatialReferenceIdentifier, SridAsXml); }
private static bool IsEquivalentTo(this IEdmSpatialTypeReference thisType, IEdmSpatialTypeReference otherType) { return(thisType != null && otherType != null && thisType.IsNullable == otherType.IsNullable && thisType.SpatialReferenceIdentifier == otherType.SpatialReferenceIdentifier); }
internal abstract void WriteSpatialTypeAttributes(IEdmSpatialTypeReference reference);
private static void AppendSpatialFacets(this StringBuilder sb, IEdmSpatialTypeReference type) { sb.AppendKeyValue(EdmConstants.FacetName_Srid, type.SpatialReferenceIdentifier != null ? type.SpatialReferenceIdentifier.ToString() : EdmConstants.Value_SridVariable); }
internal void WriteSpatialTypeAttributes(IEdmSpatialTypeReference reference) { this.WriteRequiredAttribute <int?>("SRID", reference.SpatialReferenceIdentifier, new Func <int?, string>(EdmModelCsdlSchemaWriter.SridAsXml)); }
internal static IEdmTypeReference Clone(this IEdmTypeReference typeReference, bool nullable) { if (typeReference == null) { return(null); } switch (typeReference.TypeKind()) { case EdmTypeKind.Primitive: { EdmPrimitiveTypeKind kind2 = typeReference.PrimitiveKind(); IEdmPrimitiveType definition = (IEdmPrimitiveType)typeReference.Definition; switch (kind2) { case EdmPrimitiveTypeKind.Binary: { IEdmBinaryTypeReference reference = (IEdmBinaryTypeReference)typeReference; return(new EdmBinaryTypeReference(definition, nullable, reference.IsUnbounded, reference.MaxLength, reference.IsFixedLength)); } case EdmPrimitiveTypeKind.Boolean: case EdmPrimitiveTypeKind.Byte: case EdmPrimitiveTypeKind.Double: case EdmPrimitiveTypeKind.Guid: case EdmPrimitiveTypeKind.Int16: case EdmPrimitiveTypeKind.Int32: case EdmPrimitiveTypeKind.Int64: case EdmPrimitiveTypeKind.SByte: case EdmPrimitiveTypeKind.Single: case EdmPrimitiveTypeKind.Stream: return(new EdmPrimitiveTypeReference(definition, nullable)); case EdmPrimitiveTypeKind.DateTime: case EdmPrimitiveTypeKind.DateTimeOffset: case EdmPrimitiveTypeKind.Time: { IEdmTemporalTypeReference reference4 = (IEdmTemporalTypeReference)typeReference; return(new EdmTemporalTypeReference(definition, nullable, reference4.Precision)); } case EdmPrimitiveTypeKind.Decimal: { IEdmDecimalTypeReference reference3 = (IEdmDecimalTypeReference)typeReference; return(new EdmDecimalTypeReference(definition, nullable, reference3.Precision, reference3.Scale)); } case EdmPrimitiveTypeKind.String: { IEdmStringTypeReference reference2 = (IEdmStringTypeReference)typeReference; return(new EdmStringTypeReference(definition, nullable, reference2.IsUnbounded, reference2.MaxLength, reference2.IsFixedLength, reference2.IsUnicode, reference2.Collation)); } case EdmPrimitiveTypeKind.Geography: case EdmPrimitiveTypeKind.GeographyPoint: case EdmPrimitiveTypeKind.GeographyLineString: case EdmPrimitiveTypeKind.GeographyPolygon: case EdmPrimitiveTypeKind.GeographyCollection: case EdmPrimitiveTypeKind.GeographyMultiPolygon: case EdmPrimitiveTypeKind.GeographyMultiLineString: case EdmPrimitiveTypeKind.GeographyMultiPoint: case EdmPrimitiveTypeKind.Geometry: case EdmPrimitiveTypeKind.GeometryPoint: case EdmPrimitiveTypeKind.GeometryLineString: case EdmPrimitiveTypeKind.GeometryPolygon: case EdmPrimitiveTypeKind.GeometryCollection: case EdmPrimitiveTypeKind.GeometryMultiPolygon: case EdmPrimitiveTypeKind.GeometryMultiLineString: case EdmPrimitiveTypeKind.GeometryMultiPoint: { IEdmSpatialTypeReference reference5 = (IEdmSpatialTypeReference)typeReference; return(new EdmSpatialTypeReference(definition, nullable, reference5.SpatialReferenceIdentifier)); } } throw new ODataException(Microsoft.Data.OData.Strings.General_InternalError(InternalErrorCodesCommon.EdmLibraryExtensions_Clone_PrimitiveTypeKind)); } case EdmTypeKind.Entity: return(new EdmEntityTypeReference((IEdmEntityType)typeReference.Definition, nullable)); case EdmTypeKind.Complex: return(new EdmComplexTypeReference((IEdmComplexType)typeReference.Definition, nullable)); case EdmTypeKind.Row: return(new EdmRowTypeReference((IEdmRowType)typeReference.Definition, nullable)); case EdmTypeKind.Collection: return(new EdmCollectionTypeReference((IEdmCollectionType)typeReference.Definition, nullable)); case EdmTypeKind.EntityReference: return(new EdmEntityReferenceTypeReference((IEdmEntityReferenceType)typeReference.Definition, nullable)); case EdmTypeKind.Enum: return(new EdmEnumTypeReference((IEdmEnumType)typeReference.Definition, nullable)); } throw new ODataException(Microsoft.Data.OData.Strings.General_InternalError(InternalErrorCodesCommon.EdmLibraryExtensions_Clone_TypeKind)); }
private static bool IsEquivalentTo(this IEdmSpatialTypeReference thisType, IEdmSpatialTypeReference otherType) { return thisType.IsNullable == otherType.IsNullable && thisType.SpatialReferenceIdentifier == otherType.SpatialReferenceIdentifier; }
private static bool IsEquivalentTo(this IEdmSpatialTypeReference thisType, IEdmSpatialTypeReference otherType) { if (thisType.IsNullable != otherType.IsNullable) { return false; } else { int? spatialReferenceIdentifier = thisType.SpatialReferenceIdentifier; int? nullable = otherType.SpatialReferenceIdentifier; if (spatialReferenceIdentifier.GetValueOrDefault() != nullable.GetValueOrDefault()) { return false; } else { return spatialReferenceIdentifier.HasValue == nullable.HasValue; } } }
public void CsdlTypeReferenceToStringTest() { const string csdl = @"<?xml version=""1.0"" encoding=""utf-16""?> <Schema Namespace=""AwesomeNamespace"" Alias=""Alias"" xmlns=""http://docs.oasis-open.org/odata/ns/edm""> <EntityType Name=""AstonishingEntity""> <Key> <PropertyRef Name=""Id"" /> </Key> <Property Name=""Id"" Type=""Int32"" Nullable=""false"" /> </EntityType> <EntityType Name=""AweInspiringEntity""> <Key> <PropertyRef Name=""Id"" /> </Key> <Property Name=""Id"" Type=""Int32"" Nullable=""false"" /> <Property Name=""AstonishingID"" Type=""Int32"" /> </EntityType> <ComplexType Name=""BreathtakingComplex""> <Property Name=""Par1"" Type=""Int32"" Nullable=""false"" /> <Property Name=""Par2"" Type=""Int32"" Nullable=""false"" /> </ComplexType> <Function Name=""Function1""><ReturnType Type=""Edm.Int32""/> <Parameter Name=""P1"" Type=""AwesomeNamespace.AstonishingEntity"" /> <Parameter Name=""P2"" Type=""AwesomeNamespace.BreathtakingComplex"" /> <Parameter Name=""P3"" Type=""AwesomeNamespace.ExaltedAssociation"" /> <Parameter Name=""P4"" Type=""Edm.Int32"" /> <Parameter Name=""P5"" Type=""Edm.String"" MaxLength=""128"" Unicode=""false"" /> <Parameter Name=""P6"" Type=""Edm.Stream"" /> <Parameter Name=""P7"" Type=""Edm.Binary"" MaxLength=""max""/> <Parameter Name=""P8"" Type=""Edm.DateTimeOffset"" Precision=""1"" /> <Parameter Name=""P9"" Type=""Edm.Decimal"" Precision=""3"" Scale=""2""/> <Parameter Name=""P10"" Type=""Edm.Geography"" SRID=""1"" /> <Parameter Name=""P11"" Type=""Ref(AwesomeNamespace.AstonishingEntity)"" /> <Parameter Name=""P12"" Type=""Collection(Edm.Int32)"" /> <Parameter Name=""P14"" Type=""AwesomeNamespace.FabulousEnum"" /> </Function> <EnumType Name=""FabulousEnum""> <Member Name=""m1"" /> <Member Name=""m2"" /> </EnumType> </Schema>"; IEdmModel model; IEnumerable <EdmError> errors; bool parsed = CsdlReader.TryParse(new XmlReader[] { XmlReader.Create(new StringReader(csdl)) }, out model, out errors); Assert.IsTrue(parsed, "parsed"); Assert.IsTrue(errors.Count() == 0, "No errors"); IEdmOperation operation = (IEdmOperation)(model.FindOperations("AwesomeNamespace.Function1")).First(); IEdmEntityTypeReference entity = operation.FindParameter("P1").Type.AsEntity(); IEdmComplexTypeReference complex = operation.FindParameter("P2").Type.AsComplex(); IEdmTypeReference association = operation.FindParameter("P3").Type; IEdmPrimitiveTypeReference primitive = operation.FindParameter("P4").Type.AsPrimitive(); IEdmStringTypeReference stringType = operation.FindParameter("P5").Type.AsString(); IEdmPrimitiveTypeReference stream = operation.FindParameter("P6").Type.AsPrimitive(); IEdmBinaryTypeReference binary = operation.FindParameter("P7").Type.AsBinary(); IEdmTemporalTypeReference temporal = operation.FindParameter("P8").Type.AsTemporal(); IEdmDecimalTypeReference decimalType = operation.FindParameter("P9").Type.AsDecimal(); IEdmSpatialTypeReference spatial = operation.FindParameter("P10").Type.AsSpatial(); IEdmEntityReferenceTypeReference entityRef = operation.FindParameter("P11").Type.AsEntityReference(); IEdmCollectionTypeReference collection = operation.FindParameter("P12").Type.AsCollection(); IEdmEnumTypeReference enumTypeRef = operation.FindParameter("P14").Type.AsEnum(); IEdmTypeReference type = operation.FindParameter("P1").Type; Assert.IsFalse(association.IsBad(), "Associations cannot be types"); Assert.IsTrue(association.Definition.IsBad(), "Associations cannot be types"); Assert.AreEqual("[AwesomeNamespace.AstonishingEntity Nullable=True]", entity.ToString(), "To string correct"); Assert.AreEqual("[AwesomeNamespace.BreathtakingComplex Nullable=True]", complex.ToString(), "To string correct"); Assert.AreEqual("[Edm.Int32 Nullable=True]", primitive.ToString(), "To string correct"); Assert.AreEqual("[Edm.String Nullable=True MaxLength=128 Unicode=False]", stringType.ToString(), "To string correct"); Assert.AreEqual("[Edm.Stream Nullable=True]", stream.ToString(), "To string correct"); Assert.AreEqual("[Edm.Binary Nullable=True MaxLength=max]", binary.ToString(), "To string correct"); Assert.AreEqual("[Edm.DateTimeOffset Nullable=True Precision=1]", temporal.ToString(), "To string correct"); Assert.AreEqual("[Edm.Decimal Nullable=True Precision=3 Scale=2]", decimalType.ToString(), "To string correct"); Assert.AreEqual("[Edm.Geography Nullable=True SRID=1]", spatial.ToString(), "To string correct"); Assert.AreEqual("[Collection([Edm.Int32 Nullable=True]) Nullable=True]", collection.ToString(), "To string correct"); Assert.AreEqual("[EntityReference(AwesomeNamespace.AstonishingEntity) Nullable=True]", entityRef.ToString(), "To string correct"); Assert.AreEqual("[AwesomeNamespace.FabulousEnum Nullable=True]", enumTypeRef.ToString(), "To string correct"); Assert.AreEqual("[AwesomeNamespace.AstonishingEntity Nullable=True]", type.ToString(), "To string correct"); }
protected virtual void ProcessSpatialTypeReference(IEdmSpatialTypeReference reference) { this.ProcessPrimitiveTypeReference(reference); }
protected override void ProcessSpatialTypeReference(IEdmSpatialTypeReference element) { this.schemaWriter.WriteSpatialTypeAttributes(element); }
private static void AppendSpatialFacets(this StringBuilder sb, IEdmSpatialTypeReference type) { string str; StringBuilder stringBuilder = sb; string str1 = "SRID"; int? spatialReferenceIdentifier = type.SpatialReferenceIdentifier; if (spatialReferenceIdentifier.HasValue) { int? nullable = type.SpatialReferenceIdentifier; str = nullable.ToString(); } else { str = "Variable"; } stringBuilder.AppendKeyValue(str1, str); }