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
- DefaultTextStore.cs
- SafeHandles.cs
- M3DUtil.cs
- TagPrefixInfo.cs
- datacache.cs
- ListBox.cs
- Overlapped.cs
- Code.cs
- DisplayMemberTemplateSelector.cs
- ListItemConverter.cs
- WebPartsSection.cs
- CodeDomExtensionMethods.cs
- TreeNodeCollection.cs
- ListViewInsertEventArgs.cs
- DataGridAutomationPeer.cs
- EventLog.cs
- CreateParams.cs
- ReachObjectContext.cs
- ObjectDataSourceStatusEventArgs.cs
- CryptoHelper.cs
- AnonymousIdentificationModule.cs
- HttpCapabilitiesEvaluator.cs
- LockCookie.cs
- QueryContinueDragEventArgs.cs
- ScrollChangedEventArgs.cs
- SystemIcmpV6Statistics.cs
- ProcessThread.cs
- CharUnicodeInfo.cs
- RegisterInfo.cs
- PropertyGridEditorPart.cs
- TextCharacters.cs
- TreeViewEvent.cs
- BitStack.cs
- HashMembershipCondition.cs
- AstNode.cs
- Utils.cs
- UnauthorizedAccessException.cs
- ArgumentException.cs
- TextEndOfLine.cs
- ContentValidator.cs
- ContextQuery.cs
- TextServicesContext.cs
- BufferModesCollection.cs
- DataContractSerializer.cs
- _ShellExpression.cs
- ClientScriptManager.cs
- EditingCommands.cs
- BreakRecordTable.cs
- ClassValidator.cs
- CultureInfoConverter.cs
- DoubleLinkList.cs
- __Error.cs
- Debug.cs
- ScheduleChanges.cs
- CreateUserWizardStep.cs
- CacheModeConverter.cs
- Update.cs
- BrowserTree.cs
- PersonalizationAdministration.cs
- MatrixTransform3D.cs
- SectionInformation.cs
- MatrixConverter.cs
- UserNameServiceElement.cs
- BrowserTree.cs
- HttpListenerRequest.cs
- ListViewItemCollectionEditor.cs
- StaticExtension.cs
- SpecularMaterial.cs
- UmAlQuraCalendar.cs
- HttpListenerPrefixCollection.cs
- TabRenderer.cs
- AttributeData.cs
- CopyOfAction.cs
- ExtensionFile.cs
- MatrixAnimationUsingPath.cs
- BitmapEncoder.cs
- Control.cs
- Double.cs
- PkcsUtils.cs
- NativeMethodsOther.cs
- ScrollChangedEventArgs.cs
- VectorCollectionConverter.cs
- RawAppCommandInputReport.cs
- PersonalizationProviderCollection.cs
- ResourceIDHelper.cs
- DesignerDataStoredProcedure.cs
- ArgIterator.cs
- SafeNativeMethods.cs
- BufferModeSettings.cs
- FunctionImportElement.cs
- QilNode.cs
- RowsCopiedEventArgs.cs
- Cursor.cs
- ToolboxItem.cs
- Transform.cs
- DBCSCodePageEncoding.cs
- WindowsTokenRoleProvider.cs
- UrlAuthorizationModule.cs
- MaskDescriptor.cs
- PermissionListSet.cs