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
- EventHandlersStore.cs
- DataGridColumnHeaderCollection.cs
- ContextInformation.cs
- WebServiceData.cs
- ComboBoxItem.cs
- OAVariantLib.cs
- XpsS0ValidatingLoader.cs
- Renderer.cs
- BaseWebProxyFinder.cs
- PersonalizableAttribute.cs
- RecognizerInfo.cs
- Encoding.cs
- ColorInterpolationModeValidation.cs
- ImageMapEventArgs.cs
- counter.cs
- BitmapEffect.cs
- InlineCollection.cs
- SelectedDatesCollection.cs
- ContentHostHelper.cs
- SafeRightsManagementQueryHandle.cs
- DocumentApplication.cs
- TagNameToTypeMapper.cs
- TimeSpanConverter.cs
- URLAttribute.cs
- XmlMemberMapping.cs
- CommandValueSerializer.cs
- FormCollection.cs
- UnmanagedMarshal.cs
- StylusButton.cs
- XmlSchemaAnnotation.cs
- ToolStripContentPanel.cs
- SerializationInfo.cs
- MailSettingsSection.cs
- CircleEase.cs
- ProviderSettings.cs
- SystemIPAddressInformation.cs
- ServiceCredentialsElement.cs
- ObservableDictionary.cs
- TransformCollection.cs
- IERequestCache.cs
- MappingModelBuildProvider.cs
- DeclaredTypeElementCollection.cs
- ToolboxItemLoader.cs
- CacheEntry.cs
- SystemIPGlobalStatistics.cs
- ClassGenerator.cs
- Assert.cs
- PrimaryKeyTypeConverter.cs
- XmlSchemaObjectTable.cs
- Overlapped.cs
- FlowDocumentReader.cs
- MemberInfoSerializationHolder.cs
- VariableAction.cs
- PageHandlerFactory.cs
- ResourcePermissionBase.cs
- StateMachineHistory.cs
- _ProxyChain.cs
- UiaCoreApi.cs
- InstanceCollisionException.cs
- Camera.cs
- ParallelEnumerableWrapper.cs
- XPathParser.cs
- PersonalizationStateInfo.cs
- ISO2022Encoding.cs
- BamlTreeUpdater.cs
- StructuredTypeEmitter.cs
- AdRotatorDesigner.cs
- TrustLevel.cs
- TraceData.cs
- TogglePattern.cs
- ReflectionServiceProvider.cs
- Rfc2898DeriveBytes.cs
- ObjectResult.cs
- AdornerHitTestResult.cs
- HostedTransportConfigurationManager.cs
- AspCompat.cs
- IntSecurity.cs
- PropertyNames.cs
- DataRowExtensions.cs
- AppDomainManager.cs
- XmlNode.cs
- DataGridViewCellValueEventArgs.cs
- ServiceControllerDesigner.cs
- SqlDelegatedTransaction.cs
- SystemColorTracker.cs
- XmlQueryTypeFactory.cs
- FixedHyperLink.cs
- NameSpaceEvent.cs
- CodeParameterDeclarationExpressionCollection.cs
- XmlBaseWriter.cs
- ToolStripSettings.cs
- GridViewRowCollection.cs
- CommandExpr.cs
- TextBounds.cs
- ContractValidationHelper.cs
- HttpMethodConstraint.cs
- ButtonBaseDesigner.cs
- SelectionEditingBehavior.cs
- TypeContext.cs
- ToolStripDropDownButton.cs