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
- FilteredXmlReader.cs
- EntitySetBaseCollection.cs
- xmlfixedPageInfo.cs
- WorkflowServiceInstance.cs
- TransportationConfigurationTypeInstallComponent.cs
- WebPartDisplayModeCollection.cs
- PerfProviderCollection.cs
- MultipartContentParser.cs
- XmlFormatMapping.cs
- EqualityComparer.cs
- _SpnDictionary.cs
- ColumnClickEvent.cs
- SmiEventSink.cs
- DecoderFallbackWithFailureFlag.cs
- TdsParser.cs
- VirtualStackFrame.cs
- FormsAuthenticationCredentials.cs
- StylusPointProperty.cs
- Events.cs
- DrawToolTipEventArgs.cs
- InstanceKey.cs
- SafeNativeMemoryHandle.cs
- OlePropertyStructs.cs
- PipeSecurity.cs
- HttpFileCollectionBase.cs
- Wildcard.cs
- ReadWriteObjectLock.cs
- ThreadExceptionDialog.cs
- CatalogPartCollection.cs
- DiffuseMaterial.cs
- NumberFunctions.cs
- NumberSubstitution.cs
- OracleFactory.cs
- CryptoApi.cs
- PerformanceCounter.cs
- RankException.cs
- WorkflowRequestContext.cs
- DataBindingExpressionBuilder.cs
- TypeSystem.cs
- AttachedPropertyMethodSelector.cs
- loginstatus.cs
- BinaryWriter.cs
- RegexCode.cs
- Decorator.cs
- RequestQueryParser.cs
- AddValidationError.cs
- ProjectionPruner.cs
- DesignOnlyAttribute.cs
- DataFormats.cs
- ConfigXmlCDataSection.cs
- DefaultBinder.cs
- SpinWait.cs
- CallbackDebugElement.cs
- VisualTreeUtils.cs
- WriteableBitmap.cs
- ToolStripManager.cs
- FontDifferentiator.cs
- UnsignedPublishLicense.cs
- EntityDataSourceView.cs
- EntityDesignPluralizationHandler.cs
- RTLAwareMessageBox.cs
- CallbackValidator.cs
- ExecutionPropertyManager.cs
- Ray3DHitTestResult.cs
- Soap.cs
- CodeTypeDeclarationCollection.cs
- ButtonChrome.cs
- XmlObjectSerializerWriteContext.cs
- XmlSchemaAnyAttribute.cs
- HttpClientCertificate.cs
- WebScriptServiceHost.cs
- CurrencyManager.cs
- WindowsFont.cs
- PersonalizableTypeEntry.cs
- WebEventCodes.cs
- DependentList.cs
- MeasureData.cs
- NotifyIcon.cs
- SerialPinChanges.cs
- AccessControlEntry.cs
- HotSpotCollection.cs
- BatchWriter.cs
- HTTPNotFoundHandler.cs
- XmlExceptionHelper.cs
- RoleManagerEventArgs.cs
- Baml6Assembly.cs
- milrender.cs
- StandardMenuStripVerb.cs
- Util.cs
- ExitEventArgs.cs
- UnhandledExceptionEventArgs.cs
- HttpHeaderCollection.cs
- NumericUpDown.cs
- StateMachineSubscription.cs
- BCLDebug.cs
- MenuItem.cs
- RemotingConfigParser.cs
- Parameter.cs
- PropertyItemInternal.cs
- DataListItem.cs