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
- ApplicationException.cs
- TranslateTransform.cs
- PaginationProgressEventArgs.cs
- InfiniteIntConverter.cs
- WorkflowEventArgs.cs
- DataSourceGroupCollection.cs
- recordstate.cs
- TextMessageEncoder.cs
- TemplateBuilder.cs
- Roles.cs
- AddressAlreadyInUseException.cs
- SmtpSection.cs
- StackSpiller.Bindings.cs
- ListDataHelper.cs
- AttributeEmitter.cs
- _SingleItemRequestCache.cs
- SmiTypedGetterSetter.cs
- XmlStringTable.cs
- FontStretches.cs
- SystemIPGlobalStatistics.cs
- InkCanvasSelection.cs
- DataGridViewDataConnection.cs
- BrushValueSerializer.cs
- DeviceContext.cs
- FixedSOMTableRow.cs
- TemplateBindingExtension.cs
- GeometryDrawing.cs
- FileChangesMonitor.cs
- SqlTriggerAttribute.cs
- CommandPlan.cs
- UserValidatedEventArgs.cs
- CodeEntryPointMethod.cs
- Peer.cs
- StorageModelBuildProvider.cs
- DependencyPropertyConverter.cs
- TrustLevel.cs
- MatrixConverter.cs
- RowBinding.cs
- JpegBitmapEncoder.cs
- DataGridLinkButton.cs
- TimeZone.cs
- SingleObjectCollection.cs
- Geometry3D.cs
- DataGridViewLinkColumn.cs
- MultipartIdentifier.cs
- GridViewColumnCollectionChangedEventArgs.cs
- CopyOfAction.cs
- TraceXPathNavigator.cs
- localization.cs
- StreamAsIStream.cs
- CheckStoreFileValidityRequest.cs
- Attachment.cs
- ScriptBehaviorDescriptor.cs
- TrackingValidationObjectDictionary.cs
- XhtmlConformanceSection.cs
- BuiltInExpr.cs
- CodeIterationStatement.cs
- StorageEntityContainerMapping.cs
- CommandField.cs
- HtmlElement.cs
- SoapException.cs
- SecurityException.cs
- DynamicMethod.cs
- webbrowsersite.cs
- MouseEvent.cs
- TokenBasedSet.cs
- Semaphore.cs
- ChildrenQuery.cs
- ADMembershipUser.cs
- PackWebRequest.cs
- PreviewPrintController.cs
- ItemCollection.cs
- XmlBinaryReader.cs
- XmlSchemaIdentityConstraint.cs
- ClientTargetSection.cs
- DictionaryGlobals.cs
- AmbiguousMatchException.cs
- MatrixTransform.cs
- GetPolicyDetailsRequest.cs
- BamlReader.cs
- TreeIterators.cs
- DomainConstraint.cs
- DataGridViewBand.cs
- FontEditor.cs
- ExtractedStateEntry.cs
- _ContextAwareResult.cs
- Button.cs
- FileLogRecordStream.cs
- ConnectionPoolManager.cs
- ReflectEventDescriptor.cs
- PerspectiveCamera.cs
- ParameterCollection.cs
- ReversePositionQuery.cs
- StylusPointCollection.cs
- ModelTreeManager.cs
- BasicExpressionVisitor.cs
- GACIdentityPermission.cs
- MemberAccessException.cs
- PassportPrincipal.cs
- TargetControlTypeCache.cs