Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Objects / SpanIndex.cs / 1305376 / SpanIndex.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupowner [....]
//---------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Data.Common;
using System.Data.Common.Utils;
using System.Data.Metadata.Edm;
using System.Data.Common.CommandTrees;
namespace System.Data.Objects.Internal
{
///
/// An index containing information about how the query was spanned
/// This helps to determine how to materialize the query result
///
internal sealed class SpanIndex
{
#region Nested types
///
/// Helper class to compare two RowTypes using EdmEquals instead of reference equality.
///
sealed private class RowTypeEqualityComparer : IEqualityComparer
{
private RowTypeEqualityComparer() { }
internal static readonly RowTypeEqualityComparer Instance = new RowTypeEqualityComparer();
#region IEqualityComparer Members
public bool Equals(RowType x, RowType y)
{
if (x == null || y == null)
{
return false;
}
return x.EdmEquals(y);
}
public int GetHashCode(RowType obj)
{
return obj.Identity.GetHashCode();
}
#endregion
}
#endregion
// When a query is spanned, the result is always a RowType
// The _spanMap index maps RowTypes that are a span result to a map between
// column ordinal and end member metadata of the type that is spanned
private Dictionary> _spanMap;
// A map from a spanned RowType (or parent RowType) to the original TypeUsage prior
// to the query being rewritten
private Dictionary _rowMap;
internal SpanIndex()
{
}
internal void AddSpannedRowType(RowType spannedRowType, TypeUsage originalRowType)
{
Debug.Assert(spannedRowType != null, "Spanned RowType cannot be null");
Debug.Assert(originalRowType != null, "Original RowType cannot be null");
Debug.Assert(originalRowType.EdmType.BuiltInTypeKind == BuiltInTypeKind.RowType, "Original RowType must be a RowType");
if (null == _rowMap)
{
_rowMap = new Dictionary(RowTypeEqualityComparer.Instance);
}
_rowMap[spannedRowType] = originalRowType;
}
internal TypeUsage GetSpannedRowType(RowType spannedRowType)
{
TypeUsage retType;
if (_rowMap != null && _rowMap.TryGetValue(spannedRowType, out retType))
{
return retType;
}
return null;
}
internal bool HasSpanMap(RowType spanRowType)
{
Debug.Assert(spanRowType != null, "Span RowType cannot be null");
if (null == _spanMap)
{
return false;
}
return _spanMap.ContainsKey(spanRowType);
}
internal void AddSpanMap(RowType rowType, Dictionary columnMap)
{
Debug.Assert(rowType != null, "Span row type cannot be null");
Debug.Assert(columnMap != null, "Span column map cannot be null");
if (null == _spanMap)
{
_spanMap = new Dictionary>(RowTypeEqualityComparer.Instance);
}
_spanMap[rowType] = columnMap;
}
internal Dictionary GetSpanMap(RowType rowType)
{
Dictionary retMap = null;
if (_spanMap != null && _spanMap.TryGetValue(rowType, out retMap))
{
return retMap;
}
return null;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupowner [....]
//---------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Data.Common;
using System.Data.Common.Utils;
using System.Data.Metadata.Edm;
using System.Data.Common.CommandTrees;
namespace System.Data.Objects.Internal
{
///
/// An index containing information about how the query was spanned
/// This helps to determine how to materialize the query result
///
internal sealed class SpanIndex
{
#region Nested types
///
/// Helper class to compare two RowTypes using EdmEquals instead of reference equality.
///
sealed private class RowTypeEqualityComparer : IEqualityComparer
{
private RowTypeEqualityComparer() { }
internal static readonly RowTypeEqualityComparer Instance = new RowTypeEqualityComparer();
#region IEqualityComparer Members
public bool Equals(RowType x, RowType y)
{
if (x == null || y == null)
{
return false;
}
return x.EdmEquals(y);
}
public int GetHashCode(RowType obj)
{
return obj.Identity.GetHashCode();
}
#endregion
}
#endregion
// When a query is spanned, the result is always a RowType
// The _spanMap index maps RowTypes that are a span result to a map between
// column ordinal and end member metadata of the type that is spanned
private Dictionary> _spanMap;
// A map from a spanned RowType (or parent RowType) to the original TypeUsage prior
// to the query being rewritten
private Dictionary _rowMap;
internal SpanIndex()
{
}
internal void AddSpannedRowType(RowType spannedRowType, TypeUsage originalRowType)
{
Debug.Assert(spannedRowType != null, "Spanned RowType cannot be null");
Debug.Assert(originalRowType != null, "Original RowType cannot be null");
Debug.Assert(originalRowType.EdmType.BuiltInTypeKind == BuiltInTypeKind.RowType, "Original RowType must be a RowType");
if (null == _rowMap)
{
_rowMap = new Dictionary(RowTypeEqualityComparer.Instance);
}
_rowMap[spannedRowType] = originalRowType;
}
internal TypeUsage GetSpannedRowType(RowType spannedRowType)
{
TypeUsage retType;
if (_rowMap != null && _rowMap.TryGetValue(spannedRowType, out retType))
{
return retType;
}
return null;
}
internal bool HasSpanMap(RowType spanRowType)
{
Debug.Assert(spanRowType != null, "Span RowType cannot be null");
if (null == _spanMap)
{
return false;
}
return _spanMap.ContainsKey(spanRowType);
}
internal void AddSpanMap(RowType rowType, Dictionary columnMap)
{
Debug.Assert(rowType != null, "Span row type cannot be null");
Debug.Assert(columnMap != null, "Span column map cannot be null");
if (null == _spanMap)
{
_spanMap = new Dictionary>(RowTypeEqualityComparer.Instance);
}
_spanMap[rowType] = columnMap;
}
internal Dictionary GetSpanMap(RowType rowType)
{
Dictionary retMap = null;
if (_spanMap != null && _spanMap.TryGetValue(rowType, out retMap))
{
return retMap;
}
return null;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- StylusButton.cs
- StylusPointPropertyInfo.cs
- FindCriteria.cs
- XsltQilFactory.cs
- FilteredDataSetHelper.cs
- BamlLocalizabilityResolver.cs
- TableLayoutPanelCodeDomSerializer.cs
- UnsafeNativeMethods.cs
- TableItemProviderWrapper.cs
- ImageIndexConverter.cs
- AnimationStorage.cs
- ChannelListenerBase.cs
- IncrementalHitTester.cs
- TypeInfo.cs
- Crypto.cs
- RegistrySecurity.cs
- TextElementCollection.cs
- SqlNodeAnnotation.cs
- DataServiceEntityAttribute.cs
- SortedSetDebugView.cs
- WindowsScroll.cs
- OutputCacheProfile.cs
- Add.cs
- DoubleAverageAggregationOperator.cs
- SafeSecurityHelper.cs
- DefaultSerializationProviderAttribute.cs
- TransactionFlowProperty.cs
- DataGridViewColumnTypeEditor.cs
- Figure.cs
- GroupBoxRenderer.cs
- RTLAwareMessageBox.cs
- LostFocusEventManager.cs
- WebServiceResponseDesigner.cs
- FlowPanelDesigner.cs
- TrackingServices.cs
- WindowsListViewItemCheckBox.cs
- TypeResolvingOptions.cs
- WebServiceHandlerFactory.cs
- OperationFormatStyle.cs
- DrawListViewSubItemEventArgs.cs
- ApplyTemplatesAction.cs
- ManagementDateTime.cs
- indexingfiltermarshaler.cs
- Parameter.cs
- TargetControlTypeAttribute.cs
- XmlSchemaElement.cs
- GenericAuthenticationEventArgs.cs
- XmlSignatureManifest.cs
- MenuRenderer.cs
- DirectoryInfo.cs
- DataTableCollection.cs
- EllipseGeometry.cs
- COM2TypeInfoProcessor.cs
- EdmError.cs
- TreeBuilder.cs
- _PooledStream.cs
- ScriptRegistrationManager.cs
- TraceEventCache.cs
- PeerCollaboration.cs
- QueryLifecycle.cs
- Size3D.cs
- TextSyndicationContent.cs
- CacheManager.cs
- ElementMarkupObject.cs
- SmiMetaDataProperty.cs
- TreeNodeBindingCollection.cs
- DataBoundControlDesigner.cs
- SystemIcmpV6Statistics.cs
- ImageAttributes.cs
- WebReferencesBuildProvider.cs
- PolyBezierSegmentFigureLogic.cs
- PrintPageEvent.cs
- CompilerScope.Storage.cs
- StylusEditingBehavior.cs
- DefaultPropertiesToSend.cs
- IpcServerChannel.cs
- SourceLineInfo.cs
- JavaScriptObjectDeserializer.cs
- DocumentViewerBase.cs
- CorrelationManager.cs
- PageContent.cs
- ScrollContentPresenter.cs
- BasicViewGenerator.cs
- WindowsListView.cs
- StreamUpgradeBindingElement.cs
- TitleStyle.cs
- SynchronizationLockException.cs
- ApplicationSettingsBase.cs
- Boolean.cs
- DateTimeOffset.cs
- CellTreeNode.cs
- OdbcDataReader.cs
- WebPartDisplayModeCollection.cs
- RecipientInfo.cs
- CodeDelegateCreateExpression.cs
- QilFactory.cs
- QilLiteral.cs
- HtmlEmptyTagControlBuilder.cs
- ImpersonateTokenRef.cs
- XmlILTrace.cs