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
- LambdaCompiler.Lambda.cs
- UpdateCommand.cs
- TrustLevel.cs
- Item.cs
- HtmlUtf8RawTextWriter.cs
- DataRelation.cs
- WebPartCloseVerb.cs
- WebServiceMethodData.cs
- SchemaTypeEmitter.cs
- OdbcStatementHandle.cs
- SettingsPropertyWrongTypeException.cs
- PolicyUnit.cs
- ExceptionRoutedEventArgs.cs
- DataControlFieldHeaderCell.cs
- MarginCollapsingState.cs
- CollectionExtensions.cs
- PresentationAppDomainManager.cs
- ILGenerator.cs
- iisPickupDirectory.cs
- DataIdProcessor.cs
- ShaderEffect.cs
- __ComObject.cs
- WebBrowserNavigatingEventHandler.cs
- EmptyControlCollection.cs
- UIElement3D.cs
- ControlValuePropertyAttribute.cs
- TextStore.cs
- MessageBuffer.cs
- AuthenticationModuleElement.cs
- ExpressionNormalizer.cs
- ProvidersHelper.cs
- DbConnectionPoolCounters.cs
- ObjectQueryState.cs
- FamilyTypefaceCollection.cs
- GlobalItem.cs
- KeyEventArgs.cs
- RepeaterItemEventArgs.cs
- SubclassTypeValidatorAttribute.cs
- HierarchicalDataTemplate.cs
- DateTimeUtil.cs
- EntitySqlQueryCacheKey.cs
- ManipulationPivot.cs
- CroppedBitmap.cs
- ColumnHeader.cs
- CompressEmulationStream.cs
- PropertyFilter.cs
- TreeViewItem.cs
- DataGridViewImageCell.cs
- Padding.cs
- JsonServiceDocumentSerializer.cs
- HtmlDocument.cs
- DataGridViewBindingCompleteEventArgs.cs
- TextEditorSpelling.cs
- Transform3DCollection.cs
- MetadataCache.cs
- ADMembershipUser.cs
- StylusEventArgs.cs
- SubMenuStyleCollection.cs
- SmiRequestExecutor.cs
- SmtpFailedRecipientsException.cs
- DBConnection.cs
- ResourceExpressionBuilder.cs
- PreProcessInputEventArgs.cs
- DesignerSerializationManager.cs
- Accessible.cs
- SqlMetaData.cs
- InternalPermissions.cs
- OutputChannel.cs
- UriParserTemplates.cs
- TypeConverterHelper.cs
- XmlName.cs
- ResourceExpressionEditorSheet.cs
- OutputCacheSettings.cs
- SystemIcmpV4Statistics.cs
- ToolboxCategoryItems.cs
- GradientSpreadMethodValidation.cs
- sqlmetadatafactory.cs
- unsafenativemethodstextservices.cs
- EtwTrace.cs
- IgnoreDeviceFilterElement.cs
- RegexCompiler.cs
- SplashScreen.cs
- WmlTextBoxAdapter.cs
- sqlstateclientmanager.cs
- _DisconnectOverlappedAsyncResult.cs
- QueryValue.cs
- ResizeBehavior.cs
- MulticastDelegate.cs
- HeaderUtility.cs
- HttpModuleActionCollection.cs
- SignatureDescription.cs
- Operators.cs
- ChildrenQuery.cs
- NamespaceInfo.cs
- XmlC14NWriter.cs
- TargetControlTypeCache.cs
- WebCategoryAttribute.cs
- DataGridViewCellStyleChangedEventArgs.cs
- ResolveRequestResponseAsyncResult.cs
- SystemInfo.cs