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
- XamlClipboardData.cs
- OutputCacheModule.cs
- OrderingQueryOperator.cs
- Italic.cs
- CodeBinaryOperatorExpression.cs
- PersistenceTypeAttribute.cs
- ClonableStack.cs
- KerberosReceiverSecurityToken.cs
- Membership.cs
- ProfileSection.cs
- TextRange.cs
- RepeaterItemCollection.cs
- BoundField.cs
- Bold.cs
- MailHeaderInfo.cs
- LayoutUtils.cs
- PlainXmlDeserializer.cs
- IpcServerChannel.cs
- SchemeSettingElement.cs
- WebPartConnectionsEventArgs.cs
- RepeatButton.cs
- Flowchart.cs
- ModuleConfigurationInfo.cs
- DateTimeOffsetConverter.cs
- EncoderNLS.cs
- DataGridColumn.cs
- ListMarkerSourceInfo.cs
- DrawingCollection.cs
- Convert.cs
- DrawingBrush.cs
- UserNameSecurityTokenAuthenticator.cs
- RangeValidator.cs
- BufferedOutputStream.cs
- DockingAttribute.cs
- ArgIterator.cs
- TabletDevice.cs
- ManipulationBoundaryFeedbackEventArgs.cs
- DefaultTextStore.cs
- RTLAwareMessageBox.cs
- peersecurityelement.cs
- HwndHost.cs
- LogEntryDeserializer.cs
- DefaultValueTypeConverter.cs
- WebPartConnectionsCancelVerb.cs
- ImageSource.cs
- DispatchOperationRuntime.cs
- ComponentManagerBroker.cs
- ParallelTimeline.cs
- FreezableCollection.cs
- TripleDESCryptoServiceProvider.cs
- AnnotationComponentManager.cs
- DateTimeOffsetConverter.cs
- PageWrapper.cs
- DiscoveryCallbackBehavior.cs
- TypeLibConverter.cs
- WindowsListViewGroup.cs
- SelectionProcessor.cs
- Parser.cs
- ConsumerConnectionPoint.cs
- CompilerInfo.cs
- XmlAnyElementAttributes.cs
- WebDisplayNameAttribute.cs
- RequestBringIntoViewEventArgs.cs
- DataGridItem.cs
- CodeMemberField.cs
- DateTimeSerializationSection.cs
- RawStylusSystemGestureInputReport.cs
- BidOverLoads.cs
- AssertFilter.cs
- FormatException.cs
- SupportsEventValidationAttribute.cs
- UnmanagedBitmapWrapper.cs
- ExtentCqlBlock.cs
- EntityContainerEntitySetDefiningQuery.cs
- RoleManagerEventArgs.cs
- MenuItemBindingCollection.cs
- Wildcard.cs
- baseaxisquery.cs
- ErrorEventArgs.cs
- IMembershipProvider.cs
- RequestQueue.cs
- MethodSet.cs
- DataGridComboBoxColumn.cs
- CodeGenHelper.cs
- PageVisual.cs
- InternalResources.cs
- AdCreatedEventArgs.cs
- IntermediatePolicyValidator.cs
- RequestTimeoutManager.cs
- TraceXPathNavigator.cs
- ButtonStandardAdapter.cs
- VisualBasicSettingsHandler.cs
- FixedSOMPageConstructor.cs
- Function.cs
- EntityClassGenerator.cs
- FontUnitConverter.cs
- TextServicesCompartment.cs
- FormViewPagerRow.cs
- ObjectHandle.cs
- SrgsElementFactoryCompiler.cs