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
- StringTraceRecord.cs
- DispatcherExceptionEventArgs.cs
- HandlerFactoryCache.cs
- AccessViolationException.cs
- RuleSettingsCollection.cs
- TextSelection.cs
- EntityDataSourceContainerNameItem.cs
- IPAddressCollection.cs
- OciLobLocator.cs
- ListViewDeleteEventArgs.cs
- BidPrivateBase.cs
- CookieProtection.cs
- TreeNode.cs
- SmtpFailedRecipientException.cs
- KeyTimeConverter.cs
- _NtlmClient.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- AssociatedControlConverter.cs
- DesignerObjectListAdapter.cs
- WbemProvider.cs
- SharingService.cs
- AsmxEndpointPickerExtension.cs
- RegistryPermission.cs
- DbCommandDefinition.cs
- TransformPattern.cs
- listitem.cs
- KnownTypes.cs
- SqlWebEventProvider.cs
- OdbcError.cs
- ManagementBaseObject.cs
- ParameterDataSourceExpression.cs
- SecurityKeyType.cs
- BeginEvent.cs
- WrapPanel.cs
- ImageMap.cs
- CredentialManagerDialog.cs
- FormView.cs
- CompilationRelaxations.cs
- UTF8Encoding.cs
- ContentHostHelper.cs
- TreeNodeCollection.cs
- HyperlinkAutomationPeer.cs
- AssemblyBuilder.cs
- TokenFactoryFactory.cs
- PointAnimationBase.cs
- FixedNode.cs
- HtmlInputText.cs
- ButtonField.cs
- CodeEventReferenceExpression.cs
- Stack.cs
- PathData.cs
- StylusOverProperty.cs
- CannotUnloadAppDomainException.cs
- XomlCompilerError.cs
- HScrollProperties.cs
- PermissionSetEnumerator.cs
- SqlUDTStorage.cs
- SystemNetworkInterface.cs
- XmlDataProvider.cs
- ObjectConverter.cs
- PkcsUtils.cs
- BreakRecordTable.cs
- Compress.cs
- AspProxy.cs
- XmlJsonReader.cs
- DataViewSetting.cs
- ResourceContainer.cs
- SmiTypedGetterSetter.cs
- CfgParser.cs
- SystemException.cs
- DataGridViewElement.cs
- SelectionChangedEventArgs.cs
- exports.cs
- nulltextnavigator.cs
- DataServiceStreamProviderWrapper.cs
- FileNotFoundException.cs
- QilDataSource.cs
- ConsoleCancelEventArgs.cs
- WebConfigurationHost.cs
- WindowsScrollBar.cs
- ControllableStoryboardAction.cs
- ActivationArguments.cs
- UIInitializationException.cs
- AnnouncementEndpoint.cs
- ListParaClient.cs
- WriteableBitmap.cs
- CodeGotoStatement.cs
- BitConverter.cs
- HttpVersion.cs
- CurrencyWrapper.cs
- PasswordTextContainer.cs
- SwitchElementsCollection.cs
- Util.cs
- DynamicDataRoute.cs
- TreeViewTemplateSelector.cs
- DirtyTextRange.cs
- CachedBitmap.cs
- FreeFormDesigner.cs
- SecondaryIndex.cs
- GraphicsPath.cs