Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataEntity / System / Data / Objects / SpanIndex.cs / 1 / 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
- ButtonFieldBase.cs
- AutoGeneratedFieldProperties.cs
- RecordManager.cs
- COM2FontConverter.cs
- DataGridViewRowsRemovedEventArgs.cs
- SoapAttributes.cs
- EntityContainerEmitter.cs
- WebConfigurationManager.cs
- Operator.cs
- CreateParams.cs
- ADMembershipUser.cs
- SignalGate.cs
- DatagramAdapter.cs
- _ConnectionGroup.cs
- NodeFunctions.cs
- PassportAuthentication.cs
- ProfileEventArgs.cs
- SqlAggregateChecker.cs
- PartialCachingAttribute.cs
- CfgSemanticTag.cs
- StatusBar.cs
- EventEntry.cs
- GridViewEditEventArgs.cs
- RemotingConfigParser.cs
- Window.cs
- IItemContainerGenerator.cs
- XhtmlBasicTextBoxAdapter.cs
- SiteOfOriginPart.cs
- XmlnsCache.cs
- XmlSchemaAnnotation.cs
- ResolveNextArgumentWorkItem.cs
- ImageMap.cs
- ObsoleteAttribute.cs
- FragmentQuery.cs
- ValidationErrorEventArgs.cs
- PrintPreviewControl.cs
- RoleGroupCollection.cs
- DataBindingHandlerAttribute.cs
- GlobalizationSection.cs
- PropertySourceInfo.cs
- Region.cs
- TextBreakpoint.cs
- Lease.cs
- ParseChildrenAsPropertiesAttribute.cs
- ProxyWebPart.cs
- CapiSafeHandles.cs
- OLEDB_Enum.cs
- NamedPermissionSet.cs
- PageWrapper.cs
- ColorComboBox.cs
- ObjectTokenCategory.cs
- FileStream.cs
- LogicalCallContext.cs
- PersonalizationAdministration.cs
- SystemColors.cs
- CustomBindingElementCollection.cs
- WebPartChrome.cs
- OneWayElement.cs
- HttpPostProtocolImporter.cs
- newinstructionaction.cs
- AppearanceEditorPart.cs
- AuthenticationModuleElement.cs
- OleAutBinder.cs
- SecurityUniqueId.cs
- ClientSponsor.cs
- PersistenceTypeAttribute.cs
- TextContainerChangedEventArgs.cs
- XmlSerializerAssemblyAttribute.cs
- HighlightVisual.cs
- UnlockInstanceCommand.cs
- MonitoringDescriptionAttribute.cs
- Mutex.cs
- SingleObjectCollection.cs
- ConnectionStringSettings.cs
- SafeHandles.cs
- counter.cs
- LayoutSettings.cs
- Pool.cs
- ImplicitInputBrush.cs
- RadioButtonDesigner.cs
- ExtendedPropertiesHandler.cs
- InkSerializer.cs
- PrivilegedConfigurationManager.cs
- QueryableDataSourceEditData.cs
- Comparer.cs
- AttachInfo.cs
- EditableTreeList.cs
- ConfigViewGenerator.cs
- MSAAWinEventWrap.cs
- ColorKeyFrameCollection.cs
- ToolStripItemTextRenderEventArgs.cs
- VerificationException.cs
- SapiInterop.cs
- TagNameToTypeMapper.cs
- EventMappingSettingsCollection.cs
- SQLByte.cs
- ToolStripContentPanel.cs
- NotSupportedException.cs
- MethodToken.cs
- ListViewCancelEventArgs.cs