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
- XPathParser.cs
- MultiTrigger.cs
- FrameworkObject.cs
- PropertyEmitterBase.cs
- EntitySetRetriever.cs
- SqlUtils.cs
- QueryConverter.cs
- Decorator.cs
- Token.cs
- DTCTransactionManager.cs
- WebPartDesigner.cs
- CapabilitiesPattern.cs
- DataGridViewAutoSizeModeEventArgs.cs
- MemberExpression.cs
- ObjectNotFoundException.cs
- FastEncoderWindow.cs
- Splitter.cs
- RegexRunnerFactory.cs
- IxmlLineInfo.cs
- CurrencyManager.cs
- ImageListUtils.cs
- ItemChangedEventArgs.cs
- Preprocessor.cs
- ToolStripContentPanel.cs
- SqlCommandSet.cs
- BookmarkWorkItem.cs
- BitmapData.cs
- DocumentOrderComparer.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs
- Sorting.cs
- xmlfixedPageInfo.cs
- SecurityContextTokenCache.cs
- DoubleIndependentAnimationStorage.cs
- HandlerBase.cs
- Span.cs
- ProfileParameter.cs
- CustomValidator.cs
- BindingManagerDataErrorEventArgs.cs
- IdleTimeoutMonitor.cs
- NullableDecimalMinMaxAggregationOperator.cs
- InstanceCreationEditor.cs
- DockPatternIdentifiers.cs
- UITypeEditor.cs
- AccessDataSource.cs
- WebBrowsableAttribute.cs
- WindowsStreamSecurityElement.cs
- Monitor.cs
- HttpProtocolReflector.cs
- autovalidator.cs
- EventItfInfo.cs
- AnimationTimeline.cs
- ClassicBorderDecorator.cs
- _AcceptOverlappedAsyncResult.cs
- SchemaTableOptionalColumn.cs
- EncryptedKeyHashIdentifierClause.cs
- SequenceFullException.cs
- CDSsyncETWBCLProvider.cs
- TerminateDesigner.cs
- InlineCollection.cs
- Pts.cs
- UserMapPath.cs
- DisposableCollectionWrapper.cs
- AuthenticationService.cs
- AlphabeticalEnumConverter.cs
- MappingException.cs
- AssemblyBuilder.cs
- FormViewPageEventArgs.cs
- SqlDataSource.cs
- Timer.cs
- FieldAccessException.cs
- CryptoStream.cs
- IndexObject.cs
- XmlArrayItemAttribute.cs
- Line.cs
- VectorValueSerializer.cs
- SmtpFailedRecipientsException.cs
- CorrelationTokenTypeConvertor.cs
- ArgumentNullException.cs
- SoapTypeAttribute.cs
- AddInEnvironment.cs
- BaseTemplateBuildProvider.cs
- TableHeaderCell.cs
- HttpResponseHeader.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- GeneralTransform3DCollection.cs
- HandlerFactoryWrapper.cs
- querybuilder.cs
- SmtpTransport.cs
- DesignerWebPartChrome.cs
- MonitoringDescriptionAttribute.cs
- InvalidOperationException.cs
- GenerateTemporaryAssemblyTask.cs
- ExceptionHelpers.cs
- SqlNotificationRequest.cs
- CryptoProvider.cs
- SecurityState.cs
- NamedPermissionSet.cs
- querybuilder.cs
- WriteStateInfoBase.cs
- BitmapData.cs