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
- DockAndAnchorLayout.cs
- FSWPathEditor.cs
- BmpBitmapEncoder.cs
- DynamicRenderer.cs
- StrokeNodeOperations2.cs
- ProxyWebPartConnectionCollection.cs
- AssemblyLoader.cs
- Policy.cs
- DelegateTypeInfo.cs
- CFStream.cs
- BindingContext.cs
- SendKeys.cs
- ClientFormsIdentity.cs
- ProcessModelInfo.cs
- DbMetaDataFactory.cs
- ServiceObjectContainer.cs
- BufferedResponseStream.cs
- GestureRecognizer.cs
- PropertyInformation.cs
- FragmentQueryKB.cs
- TraceLevelHelper.cs
- RSAPKCS1SignatureDeformatter.cs
- ChtmlImageAdapter.cs
- WebBrowser.cs
- TdsParameterSetter.cs
- RelationshipDetailsRow.cs
- SecurityElement.cs
- Expr.cs
- Random.cs
- Misc.cs
- XmlSerializationReader.cs
- ValidatingReaderNodeData.cs
- Listen.cs
- EntitySetBaseCollection.cs
- SizeF.cs
- XmlCharCheckingReader.cs
- DesignerView.cs
- VirtualDirectoryMappingCollection.cs
- XPathBinder.cs
- IntSumAggregationOperator.cs
- BindingMAnagerBase.cs
- CompressedStack.cs
- TextEvent.cs
- XmlUrlResolver.cs
- DocumentViewerAutomationPeer.cs
- DataGridBoolColumn.cs
- contentDescriptor.cs
- ProfileProvider.cs
- HelloMessageApril2005.cs
- DocumentXmlWriter.cs
- IndexingContentUnit.cs
- AssemblyBuilderData.cs
- ItemsControl.cs
- DateTimeConstantAttribute.cs
- InputLanguageEventArgs.cs
- SafeSecurityHandles.cs
- AdornerLayer.cs
- CdpEqualityComparer.cs
- HiddenFieldPageStatePersister.cs
- DatagridviewDisplayedBandsData.cs
- ReliabilityContractAttribute.cs
- TableLayoutSettingsTypeConverter.cs
- MembershipPasswordException.cs
- XmlSchemaAttributeGroupRef.cs
- AdornerPresentationContext.cs
- FrameworkElementFactory.cs
- XamlWriter.cs
- PKCS1MaskGenerationMethod.cs
- ManagedIStream.cs
- Ray3DHitTestResult.cs
- QueryException.cs
- ProtectedUri.cs
- CodeParameterDeclarationExpression.cs
- PagerSettings.cs
- Odbc32.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- FormsAuthenticationTicket.cs
- ArrangedElementCollection.cs
- AxisAngleRotation3D.cs
- ConnectionPointCookie.cs
- Trace.cs
- ActionMessageFilter.cs
- PanelDesigner.cs
- WebHttpDispatchOperationSelectorData.cs
- XmlQueryOutput.cs
- HttpClientCertificate.cs
- HijriCalendar.cs
- ValueChangedEventManager.cs
- SqlProcedureAttribute.cs
- FrameAutomationPeer.cs
- DebugView.cs
- ToolstripProfessionalRenderer.cs
- SubMenuStyle.cs
- Brush.cs
- MessagePartDescriptionCollection.cs
- CodeChecksumPragma.cs
- ProviderSettingsCollection.cs
- MultiAsyncResult.cs
- TokenizerHelper.cs
- IndependentlyAnimatedPropertyMetadata.cs