Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Objects / SpanIndex.cs / 1305376 / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- OutputCacheSettingsSection.cs
- SafeWaitHandle.cs
- HttpPostedFile.cs
- PopupRoot.cs
- ConfigWriter.cs
- MouseWheelEventArgs.cs
- SmtpException.cs
- PrincipalPermission.cs
- CompoundFileStorageReference.cs
- PkcsUtils.cs
- SourceFilter.cs
- SiteMapNodeItemEventArgs.cs
- AppSecurityManager.cs
- XmlAttribute.cs
- SqlMethodTransformer.cs
- RowsCopiedEventArgs.cs
- MediaPlayer.cs
- MemberDescriptor.cs
- AttributeTableBuilder.cs
- WinInetCache.cs
- DataKeyCollection.cs
- StringReader.cs
- BezierSegment.cs
- EventDescriptor.cs
- HandleRef.cs
- ToolStripPanelCell.cs
- EmptyStringExpandableObjectConverter.cs
- Popup.cs
- MethodBuilder.cs
- CodeIdentifiers.cs
- IChannel.cs
- NativeMethods.cs
- SiteOfOriginContainer.cs
- XmlLoader.cs
- SqlWorkflowPersistenceService.cs
- ProjectedSlot.cs
- DesignerForm.cs
- DesignerVerb.cs
- WebPartTracker.cs
- ListViewVirtualItemsSelectionRangeChangedEvent.cs
- Transform.cs
- CommentEmitter.cs
- PolicyLevel.cs
- ProfileModule.cs
- InvalidateEvent.cs
- RC2CryptoServiceProvider.cs
- RegexMatch.cs
- EntityCommandCompilationException.cs
- CodeBinaryOperatorExpression.cs
- InfoCardUIAgent.cs
- LinqDataView.cs
- Model3DGroup.cs
- MobileControlPersister.cs
- RectangleGeometry.cs
- EastAsianLunisolarCalendar.cs
- CodeObjectCreateExpression.cs
- FocusTracker.cs
- BitmapMetadataEnumerator.cs
- RtfNavigator.cs
- ExpressionSelection.cs
- DataGridViewTextBoxColumn.cs
- VisualTreeUtils.cs
- DataGridViewCellStyle.cs
- SchemaImporterExtensionElement.cs
- DrawListViewColumnHeaderEventArgs.cs
- ToolStripControlHost.cs
- AutomationPattern.cs
- ReadWriteSpinLock.cs
- Grammar.cs
- DataContract.cs
- PrivateFontCollection.cs
- ConstraintCollection.cs
- Number.cs
- TiffBitmapDecoder.cs
- SystemIPInterfaceStatistics.cs
- PropertyGridEditorPart.cs
- PolicyStatement.cs
- HttpSessionStateBase.cs
- DataMemberConverter.cs
- BlobPersonalizationState.cs
- ControllableStoryboardAction.cs
- ObjectManager.cs
- DocumentSequenceHighlightLayer.cs
- PersonalizationStateQuery.cs
- FragmentQueryKB.cs
- InfoCardRSAOAEPKeyExchangeDeformatter.cs
- Rotation3DAnimation.cs
- CounterCreationData.cs
- LogReserveAndAppendState.cs
- XPathParser.cs
- ImplicitInputBrush.cs
- StylusPointPropertyId.cs
- OleDragDropHandler.cs
- RowToParametersTransformer.cs
- DbMetaDataColumnNames.cs
- DesignOnlyAttribute.cs
- ToolStripDesigner.cs
- SqlDataSourceView.cs
- MessageHeaderT.cs
- Debugger.cs