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
- PersonalizationStateInfoCollection.cs
- _RequestCacheProtocol.cs
- InvalidPipelineStoreException.cs
- FontResourceCache.cs
- DataGridViewLinkColumn.cs
- MeasureItemEvent.cs
- HtmlElementCollection.cs
- CornerRadius.cs
- StyleTypedPropertyAttribute.cs
- GenerateTemporaryTargetAssembly.cs
- SqlCacheDependency.cs
- CompModSwitches.cs
- ResourceKey.cs
- messageonlyhwndwrapper.cs
- CodeGenerator.cs
- CryptoStream.cs
- GPPOINT.cs
- XmlSequenceWriter.cs
- BinaryObjectReader.cs
- MetadataItemSerializer.cs
- UiaCoreProviderApi.cs
- HierarchicalDataTemplate.cs
- GenerateHelper.cs
- CommonProperties.cs
- httpstaticobjectscollection.cs
- IISMapPath.cs
- DataGridViewSortCompareEventArgs.cs
- GroupDescription.cs
- StringValidatorAttribute.cs
- CodeTypeConstructor.cs
- DbUpdateCommandTree.cs
- AutoGeneratedFieldProperties.cs
- Expression.cs
- control.ime.cs
- ReflectPropertyDescriptor.cs
- TransformGroup.cs
- ApplicationInterop.cs
- EndpointFilterProvider.cs
- DesignerRegion.cs
- ActivityExecutorDelegateInfo.cs
- CombinedGeometry.cs
- DeflateStream.cs
- FileUpload.cs
- UriTemplateTable.cs
- RoleManagerEventArgs.cs
- ProcessModule.cs
- TrackingCondition.cs
- IntSecurity.cs
- DiscreteKeyFrames.cs
- FieldDescriptor.cs
- CodeParameterDeclarationExpressionCollection.cs
- Base64Stream.cs
- StringFunctions.cs
- CompositeDispatchFormatter.cs
- LoadGrammarCompletedEventArgs.cs
- CodePageUtils.cs
- InputReport.cs
- Membership.cs
- FileSystemEventArgs.cs
- PageAsyncTaskManager.cs
- MatrixAnimationUsingPath.cs
- TextBoxBase.cs
- ZoneButton.cs
- SystemSounds.cs
- ContractDescription.cs
- OrderedDictionary.cs
- InlineUIContainer.cs
- SqlEnums.cs
- InternalBufferOverflowException.cs
- RtType.cs
- ObjectViewEntityCollectionData.cs
- Block.cs
- SimpleTableProvider.cs
- RegisteredScript.cs
- ImportContext.cs
- TextEditorTyping.cs
- safemediahandle.cs
- Types.cs
- StrongNamePublicKeyBlob.cs
- regiisutil.cs
- TaskbarItemInfo.cs
- SecurityException.cs
- SafeHandle.cs
- XpsFilter.cs
- MenuItemStyleCollection.cs
- SqlInternalConnection.cs
- XamlSerializer.cs
- PropertyFilterAttribute.cs
- AssignDesigner.xaml.cs
- DataGridViewAccessibleObject.cs
- ReadOnlyDictionary.cs
- FormViewDeletedEventArgs.cs
- DataGridTextBox.cs
- DataGridViewCellEventArgs.cs
- FieldMetadata.cs
- CharKeyFrameCollection.cs
- SapiInterop.cs
- LicFileLicenseProvider.cs
- XPathNavigatorKeyComparer.cs
- SourceChangedEventArgs.cs