Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- AutoResizedEvent.cs
- RootDesignerSerializerAttribute.cs
- HeaderedContentControl.cs
- LineServices.cs
- WebBrowserNavigatedEventHandler.cs
- ArrayList.cs
- activationcontext.cs
- TextEvent.cs
- EncodedStreamFactory.cs
- SqlFileStream.cs
- XamlToRtfParser.cs
- BoundField.cs
- GlyphInfoList.cs
- CmsInterop.cs
- QuaternionKeyFrameCollection.cs
- TemplateBuilder.cs
- InputMethodStateChangeEventArgs.cs
- WebScriptClientGenerator.cs
- DbMetaDataCollectionNames.cs
- WindowsGraphics.cs
- XDeferredAxisSource.cs
- SpeechSynthesizer.cs
- TableHeaderCell.cs
- OracleCommand.cs
- PageHandlerFactory.cs
- GridViewColumnHeader.cs
- MetadataHelper.cs
- DynamicAttribute.cs
- DbDataAdapter.cs
- DesignerForm.cs
- EllipseGeometry.cs
- SecurityContextSecurityTokenResolver.cs
- Permission.cs
- BindingManagerDataErrorEventArgs.cs
- InstanceData.cs
- TypeBuilderInstantiation.cs
- SrgsElementFactoryCompiler.cs
- SqlException.cs
- MissingSatelliteAssemblyException.cs
- MobileControlPersister.cs
- EntitySet.cs
- DbDataReader.cs
- _NestedSingleAsyncResult.cs
- Int64AnimationBase.cs
- EventListenerClientSide.cs
- GridViewAutomationPeer.cs
- FieldMetadata.cs
- DbConvert.cs
- PartManifestEntry.cs
- ContentElement.cs
- MetadataPropertyvalue.cs
- ManualResetEvent.cs
- TranslateTransform.cs
- DataControlFieldCell.cs
- FixedSOMSemanticBox.cs
- RequiredAttributeAttribute.cs
- ThreadAttributes.cs
- ViewEvent.cs
- XslException.cs
- CombinedTcpChannel.cs
- BitConverter.cs
- _Rfc2616CacheValidators.cs
- DataGridViewSortCompareEventArgs.cs
- FormattedTextSymbols.cs
- TemplateNameScope.cs
- HuffCodec.cs
- XamlVector3DCollectionSerializer.cs
- VoiceSynthesis.cs
- Configuration.cs
- FtpWebRequest.cs
- XXXOnTypeBuilderInstantiation.cs
- OdbcReferenceCollection.cs
- WebReferencesBuildProvider.cs
- Profiler.cs
- GroupBoxDesigner.cs
- ProviderSettingsCollection.cs
- CmsUtils.cs
- PageStatePersister.cs
- VisualBasicReference.cs
- TextCharacters.cs
- NativeMethods.cs
- XmlRawWriter.cs
- ViewBase.cs
- mediaeventshelper.cs
- CurrencyWrapper.cs
- QilNode.cs
- contentDescriptor.cs
- PagedDataSource.cs
- DataGridCaption.cs
- SqlStream.cs
- FamilyTypefaceCollection.cs
- DataGridViewEditingControlShowingEventArgs.cs
- OdbcConnectionStringbuilder.cs
- SchemaTypeEmitter.cs
- SQLSingleStorage.cs
- ReceiveReply.cs
- ToolStrip.cs
- ZipArchive.cs
- MarkerProperties.cs
- NamedPipeProcessProtocolHandler.cs