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
- BufferedStream.cs
- ErrorsHelper.cs
- UserPreferenceChangedEventArgs.cs
- regiisutil.cs
- ResourceAssociationTypeEnd.cs
- RequestCachingSection.cs
- Invariant.cs
- WebPartMenu.cs
- UriTemplateDispatchFormatter.cs
- CollectionView.cs
- StorageInfo.cs
- _NestedSingleAsyncResult.cs
- JumpItem.cs
- ContractMethodParameterInfo.cs
- KeyInstance.cs
- XPathDescendantIterator.cs
- SettingsPropertyNotFoundException.cs
- ReflectPropertyDescriptor.cs
- UIElementIsland.cs
- CryptoApi.cs
- WebPartTransformerAttribute.cs
- DbCommandDefinition.cs
- JsonReaderWriterFactory.cs
- WCFServiceClientProxyGenerator.cs
- CryptoStream.cs
- DataControlLinkButton.cs
- FreezableDefaultValueFactory.cs
- Rules.cs
- printdlgexmarshaler.cs
- ListViewHitTestInfo.cs
- XmlSchemaAnnotated.cs
- XmlEnumAttribute.cs
- RijndaelCryptoServiceProvider.cs
- ProfileSettingsCollection.cs
- SerializerDescriptor.cs
- WindowsTitleBar.cs
- DataControlLinkButton.cs
- PrivateFontCollection.cs
- NetNamedPipeBindingCollectionElement.cs
- EntityStoreSchemaFilterEntry.cs
- PropertyRecord.cs
- FlowNode.cs
- figurelength.cs
- FixedSOMImage.cs
- ImageField.cs
- EntitySqlQueryCacheEntry.cs
- ToolStripItemTextRenderEventArgs.cs
- IgnoreFlushAndCloseStream.cs
- _emptywebproxy.cs
- Queue.cs
- ObjectDataSourceEventArgs.cs
- Symbol.cs
- EntityTemplateUserControl.cs
- PropertyDescriptor.cs
- BStrWrapper.cs
- MessageBox.cs
- ColorTransformHelper.cs
- ClientRolePrincipal.cs
- SoapException.cs
- ThrowHelper.cs
- OrderPreservingPipeliningMergeHelper.cs
- FragmentQuery.cs
- ToggleButtonAutomationPeer.cs
- TypeConverterHelper.cs
- DataServiceException.cs
- DocumentViewerConstants.cs
- streamingZipPartStream.cs
- SynchronizationFilter.cs
- KeyGesture.cs
- TreeNodeEventArgs.cs
- XslTransform.cs
- _BufferOffsetSize.cs
- WindowsListViewItem.cs
- LinearKeyFrames.cs
- HatchBrush.cs
- counter.cs
- DeviceContexts.cs
- WasHttpHandlersInstallComponent.cs
- ProgressBar.cs
- ScrollableControl.cs
- NumberFormatter.cs
- SafeBitVector32.cs
- BitStack.cs
- OutputScopeManager.cs
- Rect3D.cs
- ListViewSortEventArgs.cs
- WebPartDisplayModeCancelEventArgs.cs
- ProcessHostServerConfig.cs
- SqlParameterCollection.cs
- Configuration.cs
- WindowsBrush.cs
- ConfigurationConverterBase.cs
- LicFileLicenseProvider.cs
- CodeDelegateInvokeExpression.cs
- MessageVersionConverter.cs
- RawStylusInput.cs
- DocumentCollection.cs
- GradientStop.cs
- ItemDragEvent.cs
- MouseActionValueSerializer.cs