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
- DbRetry.cs
- IDReferencePropertyAttribute.cs
- RegexGroupCollection.cs
- DocumentXPathNavigator.cs
- XsltContext.cs
- StreamWriter.cs
- DbParameterCollectionHelper.cs
- UriParserTemplates.cs
- FileChangeNotifier.cs
- ColorConverter.cs
- UniqueID.cs
- Mutex.cs
- FontUnitConverter.cs
- CheckBox.cs
- QuaternionAnimationBase.cs
- ItemsControlAutomationPeer.cs
- SplitterPanelDesigner.cs
- MetaTableHelper.cs
- ArglessEventHandlerProxy.cs
- PeerMaintainer.cs
- DefaultValueAttribute.cs
- GifBitmapEncoder.cs
- GeneralTransform3DGroup.cs
- BuildProviderAppliesToAttribute.cs
- HostedElements.cs
- PasswordRecoveryDesigner.cs
- DefaultValidator.cs
- XmlObjectSerializerReadContextComplex.cs
- XmlSchemaValidator.cs
- AspNetHostingPermission.cs
- NumericUpDown.cs
- DrawingDrawingContext.cs
- ScriptComponentDescriptor.cs
- TdsParserSessionPool.cs
- FunctionNode.cs
- ContainerParaClient.cs
- StrictAndMessageFilter.cs
- ReferenceEqualityComparer.cs
- TriggerAction.cs
- UserPersonalizationStateInfo.cs
- DetailsViewUpdateEventArgs.cs
- ThreadAttributes.cs
- ExtenderProvidedPropertyAttribute.cs
- WebPartDisplayMode.cs
- DebugHandleTracker.cs
- ByteFacetDescriptionElement.cs
- MimeImporter.cs
- FileDataSourceCache.cs
- IntSecurity.cs
- TypeListConverter.cs
- OciEnlistContext.cs
- HelloMessageApril2005.cs
- CodeEntryPointMethod.cs
- CompiledQueryCacheEntry.cs
- StyleCollection.cs
- dataprotectionpermission.cs
- ArrayMergeHelper.cs
- Event.cs
- DescendentsWalker.cs
- XPathExpr.cs
- TheQuery.cs
- JsonFormatReaderGenerator.cs
- DateTimeConstantAttribute.cs
- FormatException.cs
- CurrentTimeZone.cs
- SqlBooleanizer.cs
- HttpCapabilitiesSectionHandler.cs
- CommandHelper.cs
- CharUnicodeInfo.cs
- DocumentXmlWriter.cs
- ListViewGroup.cs
- OleDbDataReader.cs
- WebControlParameterProxy.cs
- HttpRequestWrapper.cs
- oledbmetadatacolumnnames.cs
- StorageAssociationSetMapping.cs
- WeakEventTable.cs
- ConnectionInterfaceCollection.cs
- diagnosticsswitches.cs
- Utils.cs
- Scalars.cs
- WrappedIUnknown.cs
- Matrix3DStack.cs
- HierarchicalDataBoundControlAdapter.cs
- HtmlTableCellCollection.cs
- ApplicationServiceManager.cs
- VisualBasic.cs
- CompiledELinqQueryState.cs
- LinqDataSource.cs
- NewExpression.cs
- DataControlFieldHeaderCell.cs
- ComponentSerializationService.cs
- MimeBasePart.cs
- AssemblyBuilderData.cs
- ILGenerator.cs
- VectorValueSerializer.cs
- Setter.cs
- OrderByQueryOptionExpression.cs
- SizeFConverter.cs
- Keywords.cs