Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- DetailsViewInsertEventArgs.cs
- RegionData.cs
- TreeViewItem.cs
- PackUriHelper.cs
- VectorCollectionConverter.cs
- MeshGeometry3D.cs
- DataServiceConfiguration.cs
- MergeEnumerator.cs
- UnsafeNativeMethods.cs
- CrossContextChannel.cs
- BoundField.cs
- MimeTypePropertyAttribute.cs
- TrackingServices.cs
- NamedObject.cs
- CustomErrorCollection.cs
- EventWaitHandleSecurity.cs
- TextTabProperties.cs
- LinearKeyFrames.cs
- RowUpdatingEventArgs.cs
- TextSelectionProcessor.cs
- SafeArrayTypeMismatchException.cs
- ProxyManager.cs
- StubHelpers.cs
- Marshal.cs
- TdsParserStateObject.cs
- Component.cs
- CodeConditionStatement.cs
- StylusOverProperty.cs
- Size3DValueSerializer.cs
- ConstNode.cs
- FreezableOperations.cs
- CursorInteropHelper.cs
- Literal.cs
- SignedXml.cs
- itemelement.cs
- CodeDirectiveCollection.cs
- DebugHandleTracker.cs
- columnmapkeybuilder.cs
- SupportsEventValidationAttribute.cs
- TimeoutConverter.cs
- MenuItemStyle.cs
- xmlglyphRunInfo.cs
- StatusBarItemAutomationPeer.cs
- SequentialActivityDesigner.cs
- ClientSettingsStore.cs
- HttpHandlerActionCollection.cs
- HtmlTableRowCollection.cs
- MruCache.cs
- PropertyDescriptorGridEntry.cs
- BrowserCapabilitiesCodeGenerator.cs
- DurationConverter.cs
- HttpWebResponse.cs
- ToolStripPanelSelectionBehavior.cs
- DataError.cs
- WebPartDisplayModeEventArgs.cs
- GetPageCompletedEventArgs.cs
- UserControl.cs
- ComNativeDescriptor.cs
- CodeTypeReference.cs
- XmlSchemaDocumentation.cs
- Size3DConverter.cs
- EpmSourcePathSegment.cs
- KeyboardDevice.cs
- IChannel.cs
- FileClassifier.cs
- FlowDocumentPaginator.cs
- DataGridViewImageColumn.cs
- EventLogPermissionEntry.cs
- Empty.cs
- FixedNode.cs
- XmlNodeChangedEventArgs.cs
- ListParaClient.cs
- DocumentPropertiesDialog.cs
- Panel.cs
- MenuAutomationPeer.cs
- MessageTraceRecord.cs
- AddressHeaderCollection.cs
- NamedPipeChannelFactory.cs
- RandomNumberGenerator.cs
- DataServiceHost.cs
- TransformedBitmap.cs
- MatrixCamera.cs
- SetterBaseCollection.cs
- TextComposition.cs
- ListViewGroupCollectionEditor.cs
- AncillaryOps.cs
- WorkflowPersistenceService.cs
- ValueConversionAttribute.cs
- TableColumn.cs
- __Filters.cs
- ContentTextAutomationPeer.cs
- EditorPartChrome.cs
- TreeNodeStyle.cs
- AuthenticationConfig.cs
- DataBinding.cs
- XmlDigitalSignatureProcessor.cs
- ObjectReaderCompiler.cs
- AssemblyInfo.cs
- ToolboxComponentsCreatedEventArgs.cs
- SpeechSynthesizer.cs