Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SystemInformation.cs
- AttachedPropertyMethodSelector.cs
- PhoneCallDesigner.cs
- XmlValidatingReader.cs
- TreePrinter.cs
- SmiXetterAccessMap.cs
- Int16AnimationUsingKeyFrames.cs
- DBAsyncResult.cs
- Compiler.cs
- FederatedMessageSecurityOverHttpElement.cs
- StylusOverProperty.cs
- CodeDomDesignerLoader.cs
- SqlDataSourceView.cs
- BuildResultCache.cs
- ExpressionPrefixAttribute.cs
- BasePattern.cs
- DragEvent.cs
- TextureBrush.cs
- ConfigurationSectionCollection.cs
- DesignerView.xaml.cs
- SafeNativeMethods.cs
- ScrollableControl.cs
- MethodToken.cs
- ThicknessAnimationUsingKeyFrames.cs
- ApplicationDirectoryMembershipCondition.cs
- UnsafeNativeMethods.cs
- IdentityValidationException.cs
- PrintController.cs
- PresentationSource.cs
- WebServiceErrorEvent.cs
- SortKey.cs
- SectionInput.cs
- OleDbEnumerator.cs
- MarshalDirectiveException.cs
- NavigationHelper.cs
- ImageClickEventArgs.cs
- DelayedRegex.cs
- DataTemplate.cs
- MessageQueueCriteria.cs
- FreeFormDragDropManager.cs
- CallbackTimeoutsBehavior.cs
- SQLBinaryStorage.cs
- MemoryStream.cs
- SortDescriptionCollection.cs
- CompoundFileStreamReference.cs
- AssociationEndMember.cs
- TriState.cs
- TableCellCollection.cs
- BamlLocalizableResourceKey.cs
- TreeNodeBinding.cs
- TextServicesPropertyRanges.cs
- AuthenticateEventArgs.cs
- SingleAnimationBase.cs
- Tile.cs
- _ProxyChain.cs
- JsonXmlDataContract.cs
- DataMember.cs
- Vector3DCollection.cs
- ValueUnavailableException.cs
- SelectionItemPatternIdentifiers.cs
- DoubleConverter.cs
- UInt64Converter.cs
- CharStorage.cs
- BindingManagerDataErrorEventArgs.cs
- ParserOptions.cs
- InfoCardRSACryptoProvider.cs
- CollectionContainer.cs
- PeerApplicationLaunchInfo.cs
- AppDomainProtocolHandler.cs
- MobileTextWriter.cs
- _LocalDataStoreMgr.cs
- HtmlHistory.cs
- DataRow.cs
- NetTcpSecurity.cs
- Ticks.cs
- ComPersistableTypeElement.cs
- TypeForwardedToAttribute.cs
- ColorComboBox.cs
- TableCell.cs
- DataServiceExpressionVisitor.cs
- JsonFormatWriterGenerator.cs
- SafeProcessHandle.cs
- __FastResourceComparer.cs
- QueryFunctions.cs
- FindCriteriaElement.cs
- Hashtable.cs
- ToolBarButton.cs
- XmlAttributes.cs
- DataServiceContext.cs
- AttachedAnnotationChangedEventArgs.cs
- EncodingFallbackAwareXmlTextWriter.cs
- DataObjectMethodAttribute.cs
- LinkConverter.cs
- LineVisual.cs
- CompositionTarget.cs
- EncryptedReference.cs
- SoapSchemaMember.cs
- SoapSchemaExporter.cs
- CompoundFileStreamReference.cs
- ProcessStartInfo.cs