// Given an assembly purportedly containing SqlServerTypes for spatial values, attempt to // create a corersponding Sql spefic DbSpatialServices value backed by types from that assembly. // Uses a dictionary to ensure that there is at most db spatial service per assembly. It's important that // this be done in a way that ensures that the underlying SqlTypesAssembly value is also atomized, // since that's caching compilation. // Relies on SqlTypesAssembly to verify that the assembly is appropriate. private static bool TryGetSpatialServiceFromAssembly(Assembly assembly, out SqlSpatialServices services) { if (otherSpatialServices == null || !otherSpatialServices.TryGetValue(assembly.FullName, out services)) { lock (Instance) { if (otherSpatialServices == null || !otherSpatialServices.TryGetValue(assembly.FullName, out services)) { SqlTypesAssembly sqlAssembly; if (SqlTypesAssembly.TryGetSqlTypesAssembly(assembly, out sqlAssembly)) { if (otherSpatialServices == null) { otherSpatialServices = new Dictionary <string, SqlSpatialServices>(1); } services = new SqlSpatialServices(() => sqlAssembly); otherSpatialServices.Add(assembly.FullName, services); } else { services = null; } } } } return(services != null); }
private SqlSpatialServices(SerializationInfo info, StreamingContext context) { SqlSpatialServices instance = Instance; this._sqlTypesAssemblySingleton = instance._sqlTypesAssemblySingleton; this.InitializeMemberInfo(instance); }
private void InitializeMemberInfo(SqlSpatialServices from) { this.smi_SqlGeography_Parse = from.smi_SqlGeography_Parse; this.smi_SqlGeography_STGeomFromText = from.smi_SqlGeography_STGeomFromText; this.smi_SqlGeography_STPointFromText = from.smi_SqlGeography_STPointFromText; this.smi_SqlGeography_STLineFromText = from.smi_SqlGeography_STLineFromText; this.smi_SqlGeography_STPolyFromText = from.smi_SqlGeography_STPolyFromText; this.smi_SqlGeography_STMPointFromText = from.smi_SqlGeography_STMPointFromText; this.smi_SqlGeography_STMLineFromText = from.smi_SqlGeography_STMLineFromText; this.smi_SqlGeography_STMPolyFromText = from.smi_SqlGeography_STMPolyFromText; this.smi_SqlGeography_STGeomCollFromText = from.smi_SqlGeography_STGeomCollFromText; this.smi_SqlGeography_STGeomFromWKB = from.smi_SqlGeography_STGeomFromWKB; this.smi_SqlGeography_STPointFromWKB = from.smi_SqlGeography_STPointFromWKB; this.smi_SqlGeography_STLineFromWKB = from.smi_SqlGeography_STLineFromWKB; this.smi_SqlGeography_STPolyFromWKB = from.smi_SqlGeography_STPolyFromWKB; this.smi_SqlGeography_STMPointFromWKB = from.smi_SqlGeography_STMPointFromWKB; this.smi_SqlGeography_STMLineFromWKB = from.smi_SqlGeography_STMLineFromWKB; this.smi_SqlGeography_STMPolyFromWKB = from.smi_SqlGeography_STMPolyFromWKB; this.smi_SqlGeography_STGeomCollFromWKB = from.smi_SqlGeography_STGeomCollFromWKB; this.smi_SqlGeography_GeomFromGml = from.smi_SqlGeography_GeomFromGml; this.ipi_SqlGeography_STSrid = from.ipi_SqlGeography_STSrid; this.imi_SqlGeography_STGeometryType = from.imi_SqlGeography_STGeometryType; this.imi_SqlGeography_STDimension = from.imi_SqlGeography_STDimension; this.imi_SqlGeography_STAsBinary = from.imi_SqlGeography_STAsBinary; this.imi_SqlGeography_AsGml = from.imi_SqlGeography_AsGml; this.imi_SqlGeography_STAsText = from.imi_SqlGeography_STAsText; this.imi_SqlGeography_STIsEmpty = from.imi_SqlGeography_STIsEmpty; this.imi_SqlGeography_STEquals = from.imi_SqlGeography_STEquals; this.imi_SqlGeography_STDisjoint = from.imi_SqlGeography_STDisjoint; this.imi_SqlGeography_STIntersects = from.imi_SqlGeography_STIntersects; this.imi_SqlGeography_STBuffer = from.imi_SqlGeography_STBuffer; this.imi_SqlGeography_STDistance = from.imi_SqlGeography_STDistance; this.imi_SqlGeography_STIntersection = from.imi_SqlGeography_STIntersection; this.imi_SqlGeography_STUnion = from.imi_SqlGeography_STUnion; this.imi_SqlGeography_STDifference = from.imi_SqlGeography_STDifference; this.imi_SqlGeography_STSymDifference = from.imi_SqlGeography_STSymDifference; this.imi_SqlGeography_STNumGeometries = from.imi_SqlGeography_STNumGeometries; this.imi_SqlGeography_STGeometryN = from.imi_SqlGeography_STGeometryN; this.ipi_SqlGeography_Lat = from.ipi_SqlGeography_Lat; this.ipi_SqlGeography_Long = from.ipi_SqlGeography_Long; this.ipi_SqlGeography_Z = from.ipi_SqlGeography_Z; this.ipi_SqlGeography_M = from.ipi_SqlGeography_M; this.imi_SqlGeography_STLength = from.imi_SqlGeography_STLength; this.imi_SqlGeography_STStartPoint = from.imi_SqlGeography_STStartPoint; this.imi_SqlGeography_STEndPoint = from.imi_SqlGeography_STEndPoint; this.imi_SqlGeography_STIsClosed = from.imi_SqlGeography_STIsClosed; this.imi_SqlGeography_STNumPoints = from.imi_SqlGeography_STNumPoints; this.imi_SqlGeography_STPointN = from.imi_SqlGeography_STPointN; this.imi_SqlGeography_STArea = from.imi_SqlGeography_STArea; this.smi_SqlGeometry_Parse = from.smi_SqlGeometry_Parse; this.smi_SqlGeometry_STGeomFromText = from.smi_SqlGeometry_STGeomFromText; this.smi_SqlGeometry_STPointFromText = from.smi_SqlGeometry_STPointFromText; this.smi_SqlGeometry_STLineFromText = from.smi_SqlGeometry_STLineFromText; this.smi_SqlGeometry_STPolyFromText = from.smi_SqlGeometry_STPolyFromText; this.smi_SqlGeometry_STMPointFromText = from.smi_SqlGeometry_STMPointFromText; this.smi_SqlGeometry_STMLineFromText = from.smi_SqlGeometry_STMLineFromText; this.smi_SqlGeometry_STMPolyFromText = from.smi_SqlGeometry_STMPolyFromText; this.smi_SqlGeometry_STGeomCollFromText = from.smi_SqlGeometry_STGeomCollFromText; this.smi_SqlGeometry_STGeomFromWKB = from.smi_SqlGeometry_STGeomFromWKB; this.smi_SqlGeometry_STPointFromWKB = from.smi_SqlGeometry_STPointFromWKB; this.smi_SqlGeometry_STLineFromWKB = from.smi_SqlGeometry_STLineFromWKB; this.smi_SqlGeometry_STPolyFromWKB = from.smi_SqlGeometry_STPolyFromWKB; this.smi_SqlGeometry_STMPointFromWKB = from.smi_SqlGeometry_STMPointFromWKB; this.smi_SqlGeometry_STMLineFromWKB = from.smi_SqlGeometry_STMLineFromWKB; this.smi_SqlGeometry_STMPolyFromWKB = from.smi_SqlGeometry_STMPolyFromWKB; this.smi_SqlGeometry_STGeomCollFromWKB = from.smi_SqlGeometry_STGeomCollFromWKB; this.smi_SqlGeometry_GeomFromGml = from.smi_SqlGeometry_GeomFromGml; this.ipi_SqlGeometry_STSrid = from.ipi_SqlGeometry_STSrid; this.imi_SqlGeometry_STGeometryType = from.imi_SqlGeometry_STGeometryType; this.imi_SqlGeometry_STDimension = from.imi_SqlGeometry_STDimension; this.imi_SqlGeometry_STEnvelope = from.imi_SqlGeometry_STEnvelope; this.imi_SqlGeometry_STAsBinary = from.imi_SqlGeometry_STAsBinary; this.imi_SqlGeometry_AsGml = from.imi_SqlGeometry_AsGml; this.imi_SqlGeometry_STAsText = from.imi_SqlGeometry_STAsText; this.imi_SqlGeometry_STIsEmpty = from.imi_SqlGeometry_STIsEmpty; this.imi_SqlGeometry_STIsSimple = from.imi_SqlGeometry_STIsSimple; this.imi_SqlGeometry_STBoundary = from.imi_SqlGeometry_STBoundary; this.imi_SqlGeometry_STIsValid = from.imi_SqlGeometry_STIsValid; this.imi_SqlGeometry_STEquals = from.imi_SqlGeometry_STEquals; this.imi_SqlGeometry_STDisjoint = from.imi_SqlGeometry_STDisjoint; this.imi_SqlGeometry_STIntersects = from.imi_SqlGeometry_STIntersects; this.imi_SqlGeometry_STTouches = from.imi_SqlGeometry_STTouches; this.imi_SqlGeometry_STCrosses = from.imi_SqlGeometry_STCrosses; this.imi_SqlGeometry_STWithin = from.imi_SqlGeometry_STWithin; this.imi_SqlGeometry_STContains = from.imi_SqlGeometry_STContains; this.imi_SqlGeometry_STOverlaps = from.imi_SqlGeometry_STOverlaps; this.imi_SqlGeometry_STRelate = from.imi_SqlGeometry_STRelate; this.imi_SqlGeometry_STBuffer = from.imi_SqlGeometry_STBuffer; this.imi_SqlGeometry_STDistance = from.imi_SqlGeometry_STDistance; this.imi_SqlGeometry_STConvexHull = from.imi_SqlGeometry_STConvexHull; this.imi_SqlGeometry_STIntersection = from.imi_SqlGeometry_STIntersection; this.imi_SqlGeometry_STUnion = from.imi_SqlGeometry_STUnion; this.imi_SqlGeometry_STDifference = from.imi_SqlGeometry_STDifference; this.imi_SqlGeometry_STSymDifference = from.imi_SqlGeometry_STSymDifference; this.imi_SqlGeometry_STNumGeometries = from.imi_SqlGeometry_STNumGeometries; this.imi_SqlGeometry_STGeometryN = from.imi_SqlGeometry_STGeometryN; this.ipi_SqlGeometry_STX = from.ipi_SqlGeometry_STX; this.ipi_SqlGeometry_STY = from.ipi_SqlGeometry_STY; this.ipi_SqlGeometry_Z = from.ipi_SqlGeometry_Z; this.ipi_SqlGeometry_M = from.ipi_SqlGeometry_M; this.imi_SqlGeometry_STLength = from.imi_SqlGeometry_STLength; this.imi_SqlGeometry_STStartPoint = from.imi_SqlGeometry_STStartPoint; this.imi_SqlGeometry_STEndPoint = from.imi_SqlGeometry_STEndPoint; this.imi_SqlGeometry_STIsClosed = from.imi_SqlGeometry_STIsClosed; this.imi_SqlGeometry_STIsRing = from.imi_SqlGeometry_STIsRing; this.imi_SqlGeometry_STNumPoints = from.imi_SqlGeometry_STNumPoints; this.imi_SqlGeometry_STPointN = from.imi_SqlGeometry_STPointN; this.imi_SqlGeometry_STArea = from.imi_SqlGeometry_STArea; this.imi_SqlGeometry_STCentroid = from.imi_SqlGeometry_STCentroid; this.imi_SqlGeometry_STPointOnSurface = from.imi_SqlGeometry_STPointOnSurface; this.imi_SqlGeometry_STExteriorRing = from.imi_SqlGeometry_STExteriorRing; this.imi_SqlGeometry_STNumInteriorRing = from.imi_SqlGeometry_STNumInteriorRing; this.imi_SqlGeometry_STInteriorRingN = from.imi_SqlGeometry_STInteriorRingN; }