Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataEntity / System / Data / Objects / SpanIndex.cs / 1 / 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
- CustomAttributeSerializer.cs
- PrintEvent.cs
- UriScheme.cs
- DataGridRow.cs
- RectConverter.cs
- MetadataFile.cs
- RichTextBoxConstants.cs
- ADMembershipProvider.cs
- DataRowCollection.cs
- TimeSpanConverter.cs
- ServiceContractDetailViewControl.cs
- MultiPropertyDescriptorGridEntry.cs
- NumberSubstitution.cs
- SQLInt64Storage.cs
- DayRenderEvent.cs
- Renderer.cs
- Collection.cs
- CodeTypeDeclaration.cs
- EmptyStringExpandableObjectConverter.cs
- UntypedNullExpression.cs
- DataGridColumnHeaderAutomationPeer.cs
- MetadataUtilsSmi.cs
- XmlSigningNodeWriter.cs
- DocComment.cs
- MessageQueueEnumerator.cs
- X509Certificate2Collection.cs
- InternalsVisibleToAttribute.cs
- XhtmlBasicFormAdapter.cs
- CodeTypeOfExpression.cs
- Table.cs
- TextDecorationCollectionConverter.cs
- unsafenativemethodstextservices.cs
- mediaeventargs.cs
- EllipseGeometry.cs
- HttpResponse.cs
- DesignerMetadata.cs
- QueueProcessor.cs
- XmlSchemaSimpleContent.cs
- ClipboardProcessor.cs
- ScrollPattern.cs
- SoapIncludeAttribute.cs
- DesignerHierarchicalDataSourceView.cs
- SafeNativeMethods.cs
- TableRowCollection.cs
- NetworkCredential.cs
- Trace.cs
- RoutedEventHandlerInfo.cs
- WebBrowser.cs
- ColorAnimationUsingKeyFrames.cs
- XmlChoiceIdentifierAttribute.cs
- InfoCardRSAOAEPKeyExchangeFormatter.cs
- ChildrenQuery.cs
- MultiTouchSystemGestureLogic.cs
- DetailsViewPageEventArgs.cs
- BaseParser.cs
- AssociationSetEnd.cs
- BinaryWriter.cs
- ConnectionPoint.cs
- XmlSchemaSimpleTypeList.cs
- RegexWorker.cs
- Properties.cs
- RTLAwareMessageBox.cs
- EntryPointNotFoundException.cs
- ConfigXmlComment.cs
- HintTextMaxWidthConverter.cs
- StorageEndPropertyMapping.cs
- ManagementEventArgs.cs
- SerializationAttributes.cs
- WebPartTransformerAttribute.cs
- Rotation3DKeyFrameCollection.cs
- TextBlock.cs
- VirtualizingPanel.cs
- FilterQuery.cs
- EntitySetRetriever.cs
- TemplateBindingExpressionConverter.cs
- NullableConverter.cs
- KeyPressEvent.cs
- MsmqDecodeHelper.cs
- XmlMtomReader.cs
- ProgressiveCrcCalculatingStream.cs
- IsolatedStorageFileStream.cs
- Geometry.cs
- Internal.cs
- NewArrayExpression.cs
- RoleManagerModule.cs
- EntityDataReader.cs
- SwitchElementsCollection.cs
- TemplateControlBuildProvider.cs
- ColorContext.cs
- XsltException.cs
- Wildcard.cs
- PasswordPropertyTextAttribute.cs
- XmlSiteMapProvider.cs
- FileRecordSequenceCompletedAsyncResult.cs
- DataGridPagingPage.cs
- WebControlAdapter.cs
- RepeatBehavior.cs
- ReflectTypeDescriptionProvider.cs
- PropertyReferenceSerializer.cs
- HttpApplication.cs