Imported Upstream version 3.6.0

Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
This commit is contained in:
Jo Shields
2014-08-13 10:39:27 +01:00
commit a575963da9
50588 changed files with 8155799 additions and 0 deletions

View File

@ -0,0 +1,63 @@
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
namespace System.Data.Entity.Spatial
{
using System.Data.Common;
using System.Data.Entity.Core.Metadata.Edm;
using System.Data.Entity.Utilities;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
internal static class SpatialHelpers
{
internal static object GetSpatialValue(MetadataWorkspace workspace, DbDataReader reader, TypeUsage columnType, int columnOrdinal)
{
Debug.Assert(Helper.IsSpatialType(columnType));
var spatialReader = CreateSpatialDataReader(workspace, reader);
if (Helper.IsGeographicType((PrimitiveType)columnType.EdmType))
{
return spatialReader.GetGeography(columnOrdinal);
}
else
{
return spatialReader.GetGeometry(columnOrdinal);
}
}
#if !NET40
internal static async Task<object> GetSpatialValueAsync(
MetadataWorkspace workspace, DbDataReader reader,
TypeUsage columnType, int columnOrdinal, CancellationToken cancellationToken)
{
Debug.Assert(Helper.IsSpatialType(columnType));
var spatialReader = CreateSpatialDataReader(workspace, reader);
if (Helper.IsGeographicType((PrimitiveType)columnType.EdmType))
{
return
await spatialReader.GetGeographyAsync(columnOrdinal, cancellationToken).ConfigureAwait(continueOnCapturedContext: false);
}
else
{
return
await spatialReader.GetGeometryAsync(columnOrdinal, cancellationToken).ConfigureAwait(continueOnCapturedContext: false);
}
}
#endif
internal static DbSpatialDataReader CreateSpatialDataReader(MetadataWorkspace workspace, DbDataReader reader)
{
var storeItemCollection = (StoreItemCollection)workspace.GetItemCollection(DataSpace.SSpace);
var providerFactory = storeItemCollection.StoreProviderFactory;
Debug.Assert(providerFactory != null, "GetProviderSpatialServices requires provider factory to have been initialized");
var providerServices = providerFactory.GetProviderServices();
var result = providerServices.GetSpatialDataReader(reader, storeItemCollection.StoreProviderManifestToken);
Debug.Assert(result != null, "DbProviderServices did not throw ProviderIncompatibleException for null IDbSpatialDataReader");
return result;
}
}
}