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
- RouteItem.cs
- ScrollEvent.cs
- UserPersonalizationStateInfo.cs
- HttpServerVarsCollection.cs
- EqualityArray.cs
- ReferenceService.cs
- CompilerResults.cs
- CustomAttributeBuilder.cs
- DbReferenceCollection.cs
- AppDomain.cs
- RotationValidation.cs
- SBCSCodePageEncoding.cs
- SqlUtils.cs
- SystemIPGlobalStatistics.cs
- Cursors.cs
- SqlTransaction.cs
- WebRequestModulesSection.cs
- HwndStylusInputProvider.cs
- PackageStore.cs
- LongValidator.cs
- ProtectedConfigurationSection.cs
- ImageSource.cs
- PersonalizationProviderCollection.cs
- PenContext.cs
- HttpStreamXmlDictionaryWriter.cs
- ToolboxSnapDragDropEventArgs.cs
- OutOfMemoryException.cs
- InvalidContentTypeException.cs
- CellIdBoolean.cs
- Validator.cs
- ChtmlTextWriter.cs
- ObjectPersistData.cs
- HostedTcpTransportManager.cs
- WebResourceAttribute.cs
- SystemTcpConnection.cs
- ActionItem.cs
- PairComparer.cs
- HtmlEncodedRawTextWriter.cs
- UrlMapping.cs
- ToggleButton.cs
- EmulateRecognizeCompletedEventArgs.cs
- RepeatButtonAutomationPeer.cs
- PerformanceCounterManager.cs
- ZoneButton.cs
- NodeFunctions.cs
- Symbol.cs
- WriteableBitmap.cs
- EntitySqlException.cs
- EnumMember.cs
- TypedOperationInfo.cs
- XsltLoader.cs
- SHA384Managed.cs
- XmlSchema.cs
- PipelineComponent.cs
- ResourcePermissionBaseEntry.cs
- Serializer.cs
- AutomationPattern.cs
- HttpCookie.cs
- Matrix3DStack.cs
- Int32CAMarshaler.cs
- Guid.cs
- ForeignKeyConstraint.cs
- ScopeCollection.cs
- CqlWriter.cs
- RecordBuilder.cs
- EventToken.cs
- VoiceObjectToken.cs
- Ref.cs
- MimeTypeMapper.cs
- XmlEventCache.cs
- OutputCacheSettingsSection.cs
- DetailsViewRowCollection.cs
- XmlSchemaGroup.cs
- TreeBuilder.cs
- ConfigurationPermission.cs
- DynamicValidatorEventArgs.cs
- Configuration.cs
- WebPartMenu.cs
- SqlUtils.cs
- CopyNodeSetAction.cs
- objectquery_tresulttype.cs
- XmlParser.cs
- MatchNoneMessageFilter.cs
- EventLogTraceListener.cs
- DPCustomTypeDescriptor.cs
- SamlDoNotCacheCondition.cs
- ResourceExpressionBuilder.cs
- TitleStyle.cs
- AutomationElement.cs
- OdbcDataReader.cs
- DataServiceBehavior.cs
- MemberProjectedSlot.cs
- GACMembershipCondition.cs
- Parser.cs
- CompilerCollection.cs
- HwndPanningFeedback.cs
- MultiSelectRootGridEntry.cs
- DataBoundControlAdapter.cs
- XsltConvert.cs
- FragmentQuery.cs