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
- Mappings.cs
- DataGridViewCellParsingEventArgs.cs
- InputScopeNameConverter.cs
- EventHandlers.cs
- RSAOAEPKeyExchangeFormatter.cs
- RawStylusInputCustomDataList.cs
- SoapAttributeAttribute.cs
- PartialClassGenerationTask.cs
- XmlElementCollection.cs
- SectionInput.cs
- HttpWebRequest.cs
- Span.cs
- FlowDocumentReader.cs
- DataGridTable.cs
- AxisAngleRotation3D.cs
- SvcMapFileSerializer.cs
- MenuEventArgs.cs
- DBAsyncResult.cs
- TextTreeTextElementNode.cs
- DependencyPropertyConverter.cs
- ManagementInstaller.cs
- ApplyHostConfigurationBehavior.cs
- DataServiceQueryProvider.cs
- CngKeyCreationParameters.cs
- XPathAxisIterator.cs
- XmlSchemaParticle.cs
- TouchFrameEventArgs.cs
- FilterableAttribute.cs
- BeginGetFileNameFromUserRequest.cs
- AggregationMinMaxHelpers.cs
- Constants.cs
- EdmProviderManifest.cs
- MediaContext.cs
- CodeDirectoryCompiler.cs
- WaitHandle.cs
- RelationshipConverter.cs
- CodeMethodInvokeExpression.cs
- QueryStringHandler.cs
- SequenceFullException.cs
- MergeFailedEvent.cs
- BindableTemplateBuilder.cs
- SmtpNegotiateAuthenticationModule.cs
- CrossSiteScriptingValidation.cs
- SystemResourceKey.cs
- WorkflowRuntimeSection.cs
- Expression.DebuggerProxy.cs
- Storyboard.cs
- SmiContext.cs
- XmlNamedNodeMap.cs
- ComplexPropertyEntry.cs
- AdornerDecorator.cs
- InvalidCastException.cs
- FlowDocument.cs
- TraceLevelStore.cs
- ViewLoader.cs
- BufferModeSettings.cs
- SQLByte.cs
- RbTree.cs
- DataGridSortingEventArgs.cs
- SrgsRulesCollection.cs
- FactoryGenerator.cs
- ProfileGroupSettingsCollection.cs
- TransactionBridgeSection.cs
- CodeVariableReferenceExpression.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- TransportChannelListener.cs
- UnsettableComboBox.cs
- AssertUtility.cs
- SQLByte.cs
- DesignerCategoryAttribute.cs
- TagPrefixInfo.cs
- WrappedOptions.cs
- Vector3dCollection.cs
- RegionIterator.cs
- SingleStorage.cs
- DesignerRegionMouseEventArgs.cs
- ActiveXHelper.cs
- FacetEnabledSchemaElement.cs
- DictionaryTraceRecord.cs
- PrintPreviewControl.cs
- MutexSecurity.cs
- ServiceProviders.cs
- DataGridViewControlCollection.cs
- RouteParametersHelper.cs
- DataRecordInternal.cs
- ToolStripItemTextRenderEventArgs.cs
- ToolStripDropTargetManager.cs
- XamlSerializer.cs
- Repeater.cs
- XmlLinkedNode.cs
- CanonicalXml.cs
- XmlSchemaAppInfo.cs
- PerfCounterSection.cs
- ActiveXSite.cs
- oledbconnectionstring.cs
- MobileUserControlDesigner.cs
- WindowHideOrCloseTracker.cs
- CustomSignedXml.cs
- SqlDelegatedTransaction.cs
- ModelPropertyCollectionImpl.cs