Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataEntity / System / Data / Objects / SpanIndex.cs / 1 / 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
- ClientOperation.cs
- XPathException.cs
- ComponentDispatcher.cs
- TransformedBitmap.cs
- ConstantSlot.cs
- Zone.cs
- ExpressionReplacer.cs
- WebPartUtil.cs
- AssemblySettingAttributes.cs
- DataServiceHostWrapper.cs
- SingleSelectRootGridEntry.cs
- Speller.cs
- WebPartDescription.cs
- BitmapEncoder.cs
- ItemType.cs
- BufferedGraphics.cs
- PermissionAttributes.cs
- StrokeNodeEnumerator.cs
- _KerberosClient.cs
- Membership.cs
- XmlJsonReader.cs
- ProfileGroupSettings.cs
- CodeObject.cs
- WebBaseEventKeyComparer.cs
- IgnoreSectionHandler.cs
- SystemIPv4InterfaceProperties.cs
- TimeSpanMinutesConverter.cs
- FormsAuthenticationUserCollection.cs
- SiteMapPath.cs
- StringConverter.cs
- ContractSearchPattern.cs
- FileLevelControlBuilderAttribute.cs
- MediaTimeline.cs
- ChannelTerminatedException.cs
- TextCollapsingProperties.cs
- LassoHelper.cs
- PerformanceCounterPermission.cs
- ColumnMapCopier.cs
- XamlWriter.cs
- ReadContentAsBinaryHelper.cs
- DataGrid.cs
- GlyphManager.cs
- EdmTypeAttribute.cs
- NullRuntimeConfig.cs
- MaskInputRejectedEventArgs.cs
- ExtenderProvidedPropertyAttribute.cs
- ImageField.cs
- shaper.cs
- WrappedReader.cs
- DeviceSpecificChoice.cs
- ClientSettingsStore.cs
- MachinePropertyVariants.cs
- DesignerTextBoxAdapter.cs
- DescendantBaseQuery.cs
- ByteAnimation.cs
- TrackingQuery.cs
- WebZoneDesigner.cs
- SimpleHandlerFactory.cs
- OdbcFactory.cs
- AvTrace.cs
- TreeNode.cs
- ContainerParaClient.cs
- LassoSelectionBehavior.cs
- MediaPlayer.cs
- RecordBuilder.cs
- PageCodeDomTreeGenerator.cs
- ConfigurationElementProperty.cs
- Types.cs
- SecUtil.cs
- GlyphRunDrawing.cs
- DoubleAnimationUsingPath.cs
- DodSequenceMerge.cs
- ImageList.cs
- TextFormatterImp.cs
- ObjectList.cs
- ShaderEffect.cs
- CurrencyManager.cs
- BookmarkTable.cs
- PrimarySelectionGlyph.cs
- ScrollChangedEventArgs.cs
- OleDbConnection.cs
- ProcessHostMapPath.cs
- InitializationEventAttribute.cs
- SetStateEventArgs.cs
- UseAttributeSetsAction.cs
- TextViewBase.cs
- AssemblyHelper.cs
- DetailsViewUpdateEventArgs.cs
- InkPresenterAutomationPeer.cs
- CodeRegionDirective.cs
- Variant.cs
- ZipArchive.cs
- TimerEventSubscriptionCollection.cs
- UInt32Storage.cs
- UrlSyndicationContent.cs
- oledbconnectionstring.cs
- ImageClickEventArgs.cs
- PageSetupDialog.cs
- BadImageFormatException.cs
- StdValidatorsAndConverters.cs