//--------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner willa // @backupOwner [....] //-------------------------------------------------------------------------- // This file is automatically generated and should not be changed directly. // // See %SDXROOT%\ndp\fx\test\DataEntity\CheckinTests\Metadata\MetadataUnitTests.sln // for the spatial functions unit test that generates this file. // // See %SDXROOT%\ddsuites\src\fx\DataEntity\Spatial\Functions // for the template for this file. // //-------------------------------------------------------------------------- using System.Collections.Generic; using System.Data.Common.CommandTrees; using System.Diagnostics; using System.Linq; using System.Linq.Expressions; using System.Reflection; namespace System.Data.Objects.ELinq { internal sealed partial class ExpressionConverter { private sealed partial class MemberAccessTranslator : TypedTranslator { private sealed class SpatialPropertyTranslator : PropertyTranslator { private readonly Dictionary propertyFunctionRenames = GetRenamedPropertyFunctions(); internal SpatialPropertyTranslator() : base(GetSupportedProperties()) { } private static PropertyInfo GetProperty(Expression> lambda) { MemberExpression memberEx = (MemberExpression)lambda.Body; PropertyInfo property = (PropertyInfo)memberEx.Member; Debug.Assert(property.GetGetMethod().IsPublic && !property.GetGetMethod().IsStatic && (property.DeclaringType == typeof(System.Data.Spatial.DbGeography) || property.DeclaringType == typeof(System.Data.Spatial.DbGeometry)), "GetProperty should only be used to bind to public instance spatial properties"); return property; } private static IEnumerable GetSupportedProperties() { yield return GetProperty((System.Data.Spatial.DbGeography geo) => geo.CoordinateSystemId); yield return GetProperty((System.Data.Spatial.DbGeography geo) => geo.SpatialTypeName); yield return GetProperty((System.Data.Spatial.DbGeography geo) => geo.Dimension); yield return GetProperty((System.Data.Spatial.DbGeography geo) => geo.IsEmpty); yield return GetProperty((System.Data.Spatial.DbGeography geo) => geo.ElementCount); yield return GetProperty((System.Data.Spatial.DbGeography geo) => geo.Latitude); yield return GetProperty((System.Data.Spatial.DbGeography geo) => geo.Longitude); yield return GetProperty((System.Data.Spatial.DbGeography geo) => geo.Elevation); yield return GetProperty((System.Data.Spatial.DbGeography geo) => geo.Measure); yield return GetProperty((System.Data.Spatial.DbGeography geo) => geo.Length); yield return GetProperty((System.Data.Spatial.DbGeography geo) => geo.StartPoint); yield return GetProperty((System.Data.Spatial.DbGeography geo) => geo.EndPoint); yield return GetProperty((System.Data.Spatial.DbGeography geo) => geo.IsClosed); yield return GetProperty((System.Data.Spatial.DbGeography geo) => geo.PointCount); yield return GetProperty((System.Data.Spatial.DbGeography geo) => geo.Area); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.CoordinateSystemId); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.SpatialTypeName); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.Dimension); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.Envelope); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.IsEmpty); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.IsSimple); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.Boundary); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.IsValid); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.ConvexHull); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.ElementCount); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.XCoordinate); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.YCoordinate); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.Elevation); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.Measure); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.Length); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.StartPoint); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.EndPoint); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.IsClosed); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.IsRing); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.PointCount); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.Area); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.Centroid); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.PointOnSurface); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.ExteriorRing); yield return GetProperty((System.Data.Spatial.DbGeometry geo) => geo.InteriorRingCount); } private static Dictionary GetRenamedPropertyFunctions() { Dictionary result = new Dictionary(); result.Add(GetProperty((System.Data.Spatial.DbGeography geo) => geo.CoordinateSystemId), "CoordinateSystemId"); result.Add(GetProperty((System.Data.Spatial.DbGeography geo) => geo.SpatialTypeName), "SpatialTypeName"); result.Add(GetProperty((System.Data.Spatial.DbGeography geo) => geo.Dimension), "SpatialDimension"); result.Add(GetProperty((System.Data.Spatial.DbGeography geo) => geo.IsEmpty), "IsEmptySpatial"); result.Add(GetProperty((System.Data.Spatial.DbGeography geo) => geo.ElementCount), "SpatialElementCount"); result.Add(GetProperty((System.Data.Spatial.DbGeography geo) => geo.Latitude), "Latitude"); result.Add(GetProperty((System.Data.Spatial.DbGeography geo) => geo.Longitude), "Longitude"); result.Add(GetProperty((System.Data.Spatial.DbGeography geo) => geo.Elevation), "Elevation"); result.Add(GetProperty((System.Data.Spatial.DbGeography geo) => geo.Measure), "Measure"); result.Add(GetProperty((System.Data.Spatial.DbGeography geo) => geo.Length), "SpatialLength"); result.Add(GetProperty((System.Data.Spatial.DbGeography geo) => geo.StartPoint), "StartPoint"); result.Add(GetProperty((System.Data.Spatial.DbGeography geo) => geo.EndPoint), "EndPoint"); result.Add(GetProperty((System.Data.Spatial.DbGeography geo) => geo.IsClosed), "IsClosedSpatial"); result.Add(GetProperty((System.Data.Spatial.DbGeography geo) => geo.PointCount), "PointCount"); result.Add(GetProperty((System.Data.Spatial.DbGeography geo) => geo.Area), "Area"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.CoordinateSystemId), "CoordinateSystemId"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.SpatialTypeName), "SpatialTypeName"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.Dimension), "SpatialDimension"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.Envelope), "SpatialEnvelope"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.IsEmpty), "IsEmptySpatial"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.IsSimple), "IsSimpleGeometry"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.Boundary), "SpatialBoundary"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.IsValid), "IsValidGeometry"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.ConvexHull), "SpatialConvexHull"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.ElementCount), "SpatialElementCount"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.XCoordinate), "XCoordinate"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.YCoordinate), "YCoordinate"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.Elevation), "Elevation"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.Measure), "Measure"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.Length), "SpatialLength"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.StartPoint), "StartPoint"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.EndPoint), "EndPoint"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.IsClosed), "IsClosedSpatial"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.IsRing), "IsRing"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.PointCount), "PointCount"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.Area), "Area"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.Centroid), "Centroid"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.PointOnSurface), "PointOnSurface"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.ExteriorRing), "ExteriorRing"); result.Add(GetProperty((System.Data.Spatial.DbGeometry geo) => geo.InteriorRingCount), "InteriorRingCount"); return result; } // Translator for spatial properties into canonical functions. Both static and instance properties are handled. // Unless a canonical function name is explicitly specified for a property, the mapping from property name to // canonical function name consists simply of applying the 'ST' prefix. Then, translation proceeds as follows: // object.PropertyName -> CanonicalFunctionName(object) // Type.PropertyName -> CanonicalFunctionName() internal override DbExpression Translate(ExpressionConverter parent, MemberExpression call) { PropertyInfo property = (PropertyInfo)call.Member; string canonicalFunctionName; if(!propertyFunctionRenames.TryGetValue(property, out canonicalFunctionName)) { canonicalFunctionName = "ST" + property.Name; } Debug.Assert(call.Expression != null, "No static spatial properties currently map to canonical functions"); DbExpression result = parent.TranslateIntoCanonicalFunction(canonicalFunctionName, call, call.Expression); return result; } } } } }