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
- SessionStateSection.cs
- TextLineBreak.cs
- CommonDialog.cs
- CompilerGeneratedAttribute.cs
- VectorAnimationUsingKeyFrames.cs
- PolicyLevel.cs
- CategoryNameCollection.cs
- DetailsView.cs
- BaseDataBoundControl.cs
- DPCustomTypeDescriptor.cs
- ConfigurationElementProperty.cs
- EntityContainerEmitter.cs
- TargetInvocationException.cs
- AsyncDataRequest.cs
- RadioButton.cs
- Mouse.cs
- DataSourceSelectArguments.cs
- CheckBoxField.cs
- BaseDataList.cs
- SystemTcpConnection.cs
- Boolean.cs
- WpfGeneratedKnownTypes.cs
- Cloud.cs
- TextParaLineResult.cs
- MailAddress.cs
- MessageFault.cs
- TemplatedMailWebEventProvider.cs
- SspiSecurityTokenProvider.cs
- WebPartVerb.cs
- Button.cs
- TimersDescriptionAttribute.cs
- LoginCancelEventArgs.cs
- ListenerElementsCollection.cs
- ReferencedType.cs
- PerformanceCounterLib.cs
- HandleCollector.cs
- VisualBasicSettingsHandler.cs
- HostedHttpRequestAsyncResult.cs
- GlyphElement.cs
- SoapMessage.cs
- ValueChangedEventManager.cs
- WebPartConnectionsCloseVerb.cs
- TraceSection.cs
- Vector3D.cs
- Bits.cs
- CompileXomlTask.cs
- ObjectDataSourceSelectingEventArgs.cs
- WebRequestModulesSection.cs
- NativeMethods.cs
- CrossSiteScriptingValidation.cs
- AppendHelper.cs
- TreeViewCancelEvent.cs
- EncoderFallback.cs
- PeerNameResolver.cs
- CollectionTypeElement.cs
- PropertyEntry.cs
- xmlglyphRunInfo.cs
- QueryStringParameter.cs
- XmlEntityReference.cs
- CodePageUtils.cs
- AutomationPropertyInfo.cs
- HttpConfigurationContext.cs
- AppDomainProtocolHandler.cs
- SecurityPermission.cs
- RNGCryptoServiceProvider.cs
- ActivityMetadata.cs
- ReadOnlyPropertyMetadata.cs
- SerializationBinder.cs
- CombinedHttpChannel.cs
- SqlCommandSet.cs
- Debug.cs
- XhtmlBasicFormAdapter.cs
- CapabilitiesAssignment.cs
- NavigationExpr.cs
- RemoteWebConfigurationHost.cs
- BinaryWriter.cs
- PageParser.cs
- TreeView.cs
- JournalEntry.cs
- TypographyProperties.cs
- CallbackTimeoutsElement.cs
- TypeUsageBuilder.cs
- SHA1Managed.cs
- Utility.cs
- MemoryMappedFileSecurity.cs
- RTLAwareMessageBox.cs
- BoundsDrawingContextWalker.cs
- AsymmetricSignatureFormatter.cs
- IdentityReference.cs
- VisualSerializer.cs
- ETagAttribute.cs
- InfoCardProofToken.cs
- MarkedHighlightComponent.cs
- DrawTreeNodeEventArgs.cs
- LogExtent.cs
- SynchronizingStream.cs
- VsPropertyGrid.cs
- TextParagraphCache.cs
- CTreeGenerator.cs
- QueryContinueDragEvent.cs