Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Objects / SpanIndex.cs / 1305376 / 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
- DesignerGenericWebPart.cs
- EndOfStreamException.cs
- ProfilePropertyMetadata.cs
- SystemIcmpV6Statistics.cs
- FillErrorEventArgs.cs
- AsymmetricKeyExchangeFormatter.cs
- LineProperties.cs
- AlphabeticalEnumConverter.cs
- BitmapEffectGeneralTransform.cs
- RequestCacheEntry.cs
- MobileControlsSectionHelper.cs
- DataGridHeaderBorder.cs
- AsymmetricKeyExchangeFormatter.cs
- TypeDependencyAttribute.cs
- FloaterParaClient.cs
- XmlSchemaSequence.cs
- CodeTypeConstructor.cs
- Quaternion.cs
- Transform3DGroup.cs
- CodePageEncoding.cs
- ModelTreeEnumerator.cs
- FormParameter.cs
- RevocationPoint.cs
- DataGridViewCellLinkedList.cs
- BlurBitmapEffect.cs
- TemplatedMailWebEventProvider.cs
- MILUtilities.cs
- DateTimeConverter2.cs
- TemplateBindingExpressionConverter.cs
- Int16AnimationBase.cs
- QilStrConcatenator.cs
- LinkClickEvent.cs
- PenThread.cs
- IndentedTextWriter.cs
- UInt64.cs
- TreeNodeCollection.cs
- SSmlParser.cs
- FormatVersion.cs
- IteratorFilter.cs
- UserNameSecurityTokenProvider.cs
- BrushProxy.cs
- PersonalizationAdministration.cs
- XmlIgnoreAttribute.cs
- ChannelServices.cs
- MergeFilterQuery.cs
- WebPartZoneCollection.cs
- Pkcs7Signer.cs
- ValueOfAction.cs
- RuntimeComponentFilter.cs
- SqlCacheDependencyDatabaseCollection.cs
- UserPreferenceChangedEventArgs.cs
- FixedPageProcessor.cs
- XmlSigningNodeWriter.cs
- WorkflowHostingEndpoint.cs
- exports.cs
- LineMetrics.cs
- Rect.cs
- WebPartZoneAutoFormat.cs
- LoginCancelEventArgs.cs
- dataprotectionpermission.cs
- EntityEntry.cs
- DataGridAddNewRow.cs
- ProxyWebPartConnectionCollection.cs
- TransactionState.cs
- NamespaceCollection.cs
- BridgeDataReader.cs
- Size3DConverter.cs
- LinearGradientBrush.cs
- GridViewUpdatedEventArgs.cs
- IInstanceTable.cs
- AttributeInfo.cs
- Win32Native.cs
- TextCollapsingProperties.cs
- WebPartTransformer.cs
- HostSecurityManager.cs
- MouseCaptureWithinProperty.cs
- ComAwareEventInfo.cs
- SqlException.cs
- SimpleMailWebEventProvider.cs
- GlyphsSerializer.cs
- RuntimeVariableList.cs
- ElementMarkupObject.cs
- ExtractCollection.cs
- FaultHandlingFilter.cs
- LongValidator.cs
- ConfigXmlWhitespace.cs
- JournalEntry.cs
- SymbolMethod.cs
- HighlightOverlayGlyph.cs
- ApplicationCommands.cs
- EntityKeyElement.cs
- SmiEventSink_Default.cs
- TextTreeFixupNode.cs
- PbrsForward.cs
- RegistrySecurity.cs
- SQLConvert.cs
- FlowDocumentPage.cs
- linebase.cs
- BuilderElements.cs
- WindowsSecurityToken.cs