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
- COM2IPerPropertyBrowsingHandler.cs
- VScrollBar.cs
- BinaryWriter.cs
- DbUpdateCommandTree.cs
- PrintSystemException.cs
- ControlTemplate.cs
- _NegotiateClient.cs
- DrawingDrawingContext.cs
- ValidationErrorCollection.cs
- AssemblyAttributes.cs
- PointLight.cs
- ToolboxItemSnapLineBehavior.cs
- DateTimeEditor.cs
- ProviderSettings.cs
- XmlSchemaAttribute.cs
- SoapSchemaImporter.cs
- CodeDirectiveCollection.cs
- RewritingProcessor.cs
- PathFigureCollectionValueSerializer.cs
- MetadataArtifactLoaderCompositeFile.cs
- BitSet.cs
- DefaultValidator.cs
- XmlSchemaAnnotated.cs
- DataGridColumnEventArgs.cs
- NameValueFileSectionHandler.cs
- _UriSyntax.cs
- ParentUndoUnit.cs
- ItemCheckEvent.cs
- WindowsFormsHelpers.cs
- DataGridSortCommandEventArgs.cs
- DBAsyncResult.cs
- SharedDp.cs
- PersonalizationProvider.cs
- ImportCatalogPart.cs
- EventToken.cs
- ButtonBaseAdapter.cs
- CellCreator.cs
- XMLDiffLoader.cs
- IndexingContentUnit.cs
- DataControlFieldCell.cs
- QilParameter.cs
- WebEventTraceProvider.cs
- IChannel.cs
- CopyCodeAction.cs
- Win32Exception.cs
- PermissionAttributes.cs
- StructureChangedEventArgs.cs
- SrgsToken.cs
- SynchronizedDispatch.cs
- RandomDelayQueuedSendsAsyncResult.cs
- Underline.cs
- SecurityTokenValidationException.cs
- AccessDataSourceView.cs
- HierarchicalDataBoundControl.cs
- SecurityRuntime.cs
- EventHandlersDesigner.cs
- GridViewColumn.cs
- DebuggerAttributes.cs
- DataGridCheckBoxColumn.cs
- TimeManager.cs
- ClassicBorderDecorator.cs
- ExcCanonicalXml.cs
- MarkupObject.cs
- ActivityLocationReferenceEnvironment.cs
- OrderingExpression.cs
- ShaderRenderModeValidation.cs
- RenamedEventArgs.cs
- BitmapCodecInfoInternal.cs
- SearchExpression.cs
- GeneralTransform3DTo2D.cs
- ValuePattern.cs
- QilXmlReader.cs
- PublisherIdentityPermission.cs
- DataGridViewSelectedColumnCollection.cs
- UnsafeNativeMethodsTablet.cs
- HandlerFactoryWrapper.cs
- XpsFixedDocumentSequenceReaderWriter.cs
- HttpValueCollection.cs
- ResizeBehavior.cs
- QueryCreatedEventArgs.cs
- TableChangeProcessor.cs
- HttpFileCollection.cs
- FormViewUpdateEventArgs.cs
- SpinLock.cs
- WCFServiceClientProxyGenerator.cs
- LocalizableResourceBuilder.cs
- Random.cs
- SrgsRule.cs
- EventProviderBase.cs
- DataSvcMapFile.cs
- FixedSchema.cs
- SHA384.cs
- CommandDevice.cs
- Itemizer.cs
- BinHexEncoder.cs
- EntityDataSourceContainerNameItem.cs
- CultureInfoConverter.cs
- EdgeModeValidation.cs
- CodeCompileUnit.cs
- SQLMoney.cs