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
- BaseCollection.cs
- ErrorTableItemStyle.cs
- MemberAssignmentAnalysis.cs
- GridViewUpdatedEventArgs.cs
- InvokePattern.cs
- XmlSchemaComplexContentExtension.cs
- ImmutableObjectAttribute.cs
- PersonalizationProviderHelper.cs
- PropertyIDSet.cs
- HttpPostClientProtocol.cs
- WebSysDefaultValueAttribute.cs
- TextEditorTyping.cs
- BooleanStorage.cs
- HighlightVisual.cs
- SmtpAuthenticationManager.cs
- StrokeCollection2.cs
- DesignerAdapterUtil.cs
- ClaimComparer.cs
- CodeDOMProvider.cs
- CallbackHandler.cs
- SerializationInfo.cs
- Process.cs
- CodeThrowExceptionStatement.cs
- ItemCollection.cs
- XslTransform.cs
- TemplateField.cs
- XNodeNavigator.cs
- ChildrenQuery.cs
- UnsignedPublishLicense.cs
- ScrollableControl.cs
- InheritanceAttribute.cs
- SqlClientWrapperSmiStream.cs
- DataGridViewCellMouseEventArgs.cs
- AsyncPostBackErrorEventArgs.cs
- ContextStaticAttribute.cs
- TemplateAction.cs
- ApplicationManager.cs
- MenuDesigner.cs
- Oid.cs
- AttributeUsageAttribute.cs
- MemoryStream.cs
- OperationAbortedException.cs
- PageRouteHandler.cs
- Vector3D.cs
- ProgressiveCrcCalculatingStream.cs
- HyperLinkColumn.cs
- URI.cs
- GridViewHeaderRowPresenter.cs
- StatusBarPanelClickEvent.cs
- GPRECT.cs
- HandoffBehavior.cs
- AutoResetEvent.cs
- DBSchemaRow.cs
- ResumeStoryboard.cs
- RayHitTestParameters.cs
- DataControlImageButton.cs
- ADMembershipProvider.cs
- Rights.cs
- LineProperties.cs
- UnsafeNativeMethods.cs
- LocalizationComments.cs
- BindingCollection.cs
- ThemeableAttribute.cs
- StorageMappingFragment.cs
- LZCodec.cs
- TextEffect.cs
- ColumnTypeConverter.cs
- TreeNodeConverter.cs
- typedescriptorpermissionattribute.cs
- MetabaseSettings.cs
- NativeActivityFaultContext.cs
- WCFServiceClientProxyGenerator.cs
- VoiceChangeEventArgs.cs
- PropertyFilterAttribute.cs
- Globals.cs
- Resources.Designer.cs
- WebReferencesBuildProvider.cs
- CompositeScriptReference.cs
- TextLineBreak.cs
- ExtensionQuery.cs
- SqlGenerator.cs
- WorkflowIdleBehavior.cs
- DataMisalignedException.cs
- UTF32Encoding.cs
- DBParameter.cs
- StringAttributeCollection.cs
- SamlConditions.cs
- GlyphRunDrawing.cs
- DiagnosticTraceSource.cs
- MdiWindowListStrip.cs
- DropDownList.cs
- Activity.cs
- ServerProtocol.cs
- BeginSelectCardRequest.cs
- MailMessageEventArgs.cs
- LinqDataSourceContextEventArgs.cs
- _SpnDictionary.cs
- WebSysDescriptionAttribute.cs
- RemoteEndpointMessageProperty.cs
- BuildProvider.cs