Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataEntity / System / Data / Objects / SpanIndex.cs / 2 / 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
- TextParaLineResult.cs
- TableParaClient.cs
- DependsOnAttribute.cs
- CustomAttributeBuilder.cs
- StandardCommands.cs
- PropertyTab.cs
- Label.cs
- PlainXmlSerializer.cs
- MonthCalendar.cs
- BitmapCacheBrush.cs
- XMLSyntaxException.cs
- HelpInfo.cs
- SharedHttpTransportManager.cs
- DataChangedEventManager.cs
- Input.cs
- PrePrepareMethodAttribute.cs
- OdbcDataReader.cs
- DataGridColumnDropSeparator.cs
- FileChangesMonitor.cs
- TransformerTypeCollection.cs
- ListControlBoundActionList.cs
- SelectionUIService.cs
- Transform3D.cs
- Header.cs
- DataTemplateSelector.cs
- TreeNodeStyle.cs
- CapacityStreamGeometryContext.cs
- ProviderConnectionPoint.cs
- DataKey.cs
- HttpModuleAction.cs
- HttpWrapper.cs
- TraceLevelHelper.cs
- SecurityElement.cs
- DefaultSection.cs
- QueryIntervalOp.cs
- ProxyFragment.cs
- CellParagraph.cs
- BamlLocalizerErrorNotifyEventArgs.cs
- ExtentKey.cs
- GeometryConverter.cs
- EastAsianLunisolarCalendar.cs
- XmlNodeList.cs
- _CommandStream.cs
- NamedElement.cs
- ProgressiveCrcCalculatingStream.cs
- BrowserDefinition.cs
- CapabilitiesPattern.cs
- GuidelineSet.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- TraceHwndHost.cs
- FileAuthorizationModule.cs
- xmlNames.cs
- TemplateControl.cs
- Rijndael.cs
- DBConnection.cs
- TypeConverterAttribute.cs
- PageCodeDomTreeGenerator.cs
- OdbcRowUpdatingEvent.cs
- DoubleCollectionValueSerializer.cs
- NavigationWindowAutomationPeer.cs
- RoleManagerModule.cs
- RbTree.cs
- COM2PropertyDescriptor.cs
- AutomationPropertyInfo.cs
- TrustManagerMoreInformation.cs
- BooleanKeyFrameCollection.cs
- Debug.cs
- ToolStripSeparatorRenderEventArgs.cs
- IPCCacheManager.cs
- FlowLayout.cs
- DropTarget.cs
- SymbolEqualComparer.cs
- CacheMemory.cs
- DashStyles.cs
- CollectionsUtil.cs
- DynamicPropertyHolder.cs
- XamlInt32CollectionSerializer.cs
- RoleManagerModule.cs
- DataGridViewCellCancelEventArgs.cs
- TextMarkerSource.cs
- DecimalAnimationBase.cs
- Matrix3D.cs
- BinHexEncoding.cs
- TemplatedEditableDesignerRegion.cs
- TreeNodeBinding.cs
- ClassGenerator.cs
- ConfigurationFileMap.cs
- IncomingWebRequestContext.cs
- XsdBuilder.cs
- DataConnectionHelper.cs
- NameTable.cs
- SqlTypesSchemaImporter.cs
- FastPropertyAccessor.cs
- SqlCommandBuilder.cs
- FileChangesMonitor.cs
- PeerToPeerException.cs
- WebResponse.cs
- GraphicsContainer.cs
- ToolTipAutomationPeer.cs
- DeploymentSection.cs