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
- StringInfo.cs
- DateTimeSerializationSection.cs
- ObjectItemCollectionAssemblyCacheEntry.cs
- FrameworkTemplate.cs
- InheritanceContextHelper.cs
- PagerStyle.cs
- RoutedUICommand.cs
- MD5.cs
- AssemblyNameProxy.cs
- DateTimeFormatInfo.cs
- PeerApplication.cs
- AsymmetricSignatureFormatter.cs
- DrawingContext.cs
- PlaceHolder.cs
- EndOfStreamException.cs
- NamespaceEmitter.cs
- ObjectDataSource.cs
- InputEventArgs.cs
- DataGridViewComboBoxCell.cs
- DependentTransaction.cs
- _DigestClient.cs
- ActivityStatusChangeEventArgs.cs
- cryptoapiTransform.cs
- SelectionRange.cs
- HttpRequestMessageProperty.cs
- MessageRpc.cs
- Matrix3DConverter.cs
- SqlFacetAttribute.cs
- XmlCharacterData.cs
- ObjectNavigationPropertyMapping.cs
- ValidationError.cs
- X509Extension.cs
- CodeCommentStatementCollection.cs
- GeneralTransformGroup.cs
- Wizard.cs
- OdbcStatementHandle.cs
- _ScatterGatherBuffers.cs
- DBCommandBuilder.cs
- QilChoice.cs
- AccessText.cs
- AddressAccessDeniedException.cs
- InputDevice.cs
- BitSet.cs
- TypeConverterHelper.cs
- StopStoryboard.cs
- AnnotationHighlightLayer.cs
- ConfigurationValidatorAttribute.cs
- GACIdentityPermission.cs
- RedirectionProxy.cs
- IgnorePropertiesAttribute.cs
- DescendantQuery.cs
- DetailsViewPagerRow.cs
- CreatingCookieEventArgs.cs
- SystemInformation.cs
- StringFunctions.cs
- WebPartMovingEventArgs.cs
- Utilities.cs
- BulletChrome.cs
- RayHitTestParameters.cs
- QilGeneratorEnv.cs
- AndCondition.cs
- KeyProperty.cs
- ProtocolViolationException.cs
- PreservationFileReader.cs
- DragDeltaEventArgs.cs
- TextEditor.cs
- DataBoundLiteralControl.cs
- DtcInterfaces.cs
- XmlILOptimizerVisitor.cs
- ALinqExpressionVisitor.cs
- QilStrConcat.cs
- FieldToken.cs
- UniformGrid.cs
- SendActivityEventArgs.cs
- UniqueSet.cs
- ResourceDescriptionAttribute.cs
- TextEditorSpelling.cs
- ObjectDataSourceEventArgs.cs
- Activator.cs
- WebEventTraceProvider.cs
- Gdiplus.cs
- InkCanvasFeedbackAdorner.cs
- UnsafeNativeMethodsCLR.cs
- SHA256Managed.cs
- EventProviderBase.cs
- InvokeMethodDesigner.xaml.cs
- ScriptControlDescriptor.cs
- StylusPointDescription.cs
- XmlHierarchicalEnumerable.cs
- TileModeValidation.cs
- Point3D.cs
- StringFreezingAttribute.cs
- SystemIPGlobalProperties.cs
- AddDataControlFieldDialog.cs
- HttpDebugHandler.cs
- XmlReflectionImporter.cs
- BasicViewGenerator.cs
- OleDbReferenceCollection.cs
- ObjectToIdCache.cs
- ToolStripSeparator.cs