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
- PrintDialog.cs
- ClipboardData.cs
- FontNamesConverter.cs
- InfoCardRSAOAEPKeyExchangeFormatter.cs
- TemplateFactory.cs
- XhtmlConformanceSection.cs
- ArglessEventHandlerProxy.cs
- ModuleElement.cs
- HuffModule.cs
- WebPartHelpVerb.cs
- CredentialCache.cs
- ToolBarButtonClickEvent.cs
- XhtmlBasicSelectionListAdapter.cs
- AuthorizationRule.cs
- TemplateControl.cs
- WebConvert.cs
- UnmanagedMemoryStream.cs
- StylusButton.cs
- SessionPageStatePersister.cs
- MSAAWinEventWrap.cs
- PropertyMap.cs
- InvokeBinder.cs
- DocComment.cs
- TableSectionStyle.cs
- InstanceHandle.cs
- HebrewCalendar.cs
- Point3DAnimation.cs
- DoubleStorage.cs
- VariableAction.cs
- PKCS1MaskGenerationMethod.cs
- FontUnitConverter.cs
- DocumentViewerBase.cs
- StringDictionaryEditor.cs
- WebServiceHost.cs
- XmlArrayAttribute.cs
- HostedTcpTransportManager.cs
- WindowsStartMenu.cs
- ScriptingProfileServiceSection.cs
- _RequestCacheProtocol.cs
- PageThemeCodeDomTreeGenerator.cs
- XmlSchemaAnnotation.cs
- PathTooLongException.cs
- LogicalExpr.cs
- ErrorFormatter.cs
- DoubleAnimationClockResource.cs
- Dynamic.cs
- FamilyCollection.cs
- QilVisitor.cs
- CategoryGridEntry.cs
- CachingHintValidation.cs
- CryptoConfig.cs
- MultiBindingExpression.cs
- ErrorCodes.cs
- EntityCommand.cs
- DropDownButton.cs
- PropertyValidationContext.cs
- IsolatedStorageFile.cs
- DebugView.cs
- X509CertificateChain.cs
- TypeDelegator.cs
- PageContentCollection.cs
- SerializableTypeCodeDomSerializer.cs
- SqlFacetAttribute.cs
- DbDataReader.cs
- FontInfo.cs
- SessionStateSection.cs
- PrintDialog.cs
- MatrixAnimationUsingKeyFrames.cs
- WhitespaceSignificantCollectionAttribute.cs
- PersonalizationStateInfo.cs
- GeneralTransform3DTo2D.cs
- ItemsControl.cs
- BuildProviderAppliesToAttribute.cs
- ObjectQuery_EntitySqlExtensions.cs
- XmlSchemaElement.cs
- TreeNodeEventArgs.cs
- KeyPullup.cs
- ValueSerializer.cs
- CqlWriter.cs
- ProcessHostMapPath.cs
- ProjectionCamera.cs
- ContainerUtilities.cs
- Vars.cs
- String.cs
- AbstractExpressions.cs
- FilterFactory.cs
- SslSecurityTokenParameters.cs
- SemaphoreSecurity.cs
- CharacterBufferReference.cs
- SubMenuStyle.cs
- CompilerErrorCollection.cs
- DateTimeFormatInfo.cs
- ButtonChrome.cs
- VectorAnimationUsingKeyFrames.cs
- XamlDesignerSerializationManager.cs
- ToolStripSettings.cs
- DefaultAsyncDataDispatcher.cs
- BitmapInitialize.cs
- TextDecoration.cs
- TableParagraph.cs