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
- OleDbRowUpdatedEvent.cs
 - Subtree.cs
 - DriveNotFoundException.cs
 - SymLanguageType.cs
 - NameValueFileSectionHandler.cs
 - GAC.cs
 - WeakEventTable.cs
 - TrackingProfile.cs
 - TagPrefixInfo.cs
 - __Error.cs
 - WpfWebRequestHelper.cs
 - SqlClientWrapperSmiStreamChars.cs
 - coordinator.cs
 - ModifiableIteratorCollection.cs
 - DataGridViewDataErrorEventArgs.cs
 - CurrentChangedEventManager.cs
 - WebBrowserNavigatingEventHandler.cs
 - MatrixConverter.cs
 - Grid.cs
 - HMACSHA256.cs
 - AssemblyAttributesGoHere.cs
 - PermissionListSet.cs
 - SecurityRuntime.cs
 - BidPrivateBase.cs
 - NaturalLanguageHyphenator.cs
 - StylusPointProperty.cs
 - ImpersonateTokenRef.cs
 - NameSpaceExtractor.cs
 - DbCommandTree.cs
 - StyleReferenceConverter.cs
 - ValueSerializer.cs
 - CharEnumerator.cs
 - UpdateCommand.cs
 - XpsS0ValidatingLoader.cs
 - DetailsViewUpdatedEventArgs.cs
 - EndPoint.cs
 - AttachedPropertyMethodSelector.cs
 - ComplexBindingPropertiesAttribute.cs
 - StrokeNodeOperations.cs
 - ExpressionBinding.cs
 - SimpleFileLog.cs
 - BindingBase.cs
 - DynamicRenderer.cs
 - SessionPageStatePersister.cs
 - AssertValidation.cs
 - DictationGrammar.cs
 - ApplicationManager.cs
 - OrderedDictionary.cs
 - PropertyGrid.cs
 - ZeroOpNode.cs
 - HandleCollector.cs
 - LayoutTable.cs
 - CopyAttributesAction.cs
 - RtfToken.cs
 - BinaryCommonClasses.cs
 - XmlAnyElementAttribute.cs
 - ActivityValidationServices.cs
 - OleDbTransaction.cs
 - SoundPlayerAction.cs
 - FormatVersion.cs
 - WindowsStatusBar.cs
 - DataGridViewSelectedRowCollection.cs
 - updateconfighost.cs
 - EntityTypeBase.cs
 - BinaryKeyIdentifierClause.cs
 - FilterQueryOptionExpression.cs
 - RSAPKCS1KeyExchangeFormatter.cs
 - TemplatePartAttribute.cs
 - SecurityTokenValidationException.cs
 - TokenCreationException.cs
 - Mutex.cs
 - DataObjectSettingDataEventArgs.cs
 - ReadingWritingEntityEventArgs.cs
 - CompModSwitches.cs
 - InputReportEventArgs.cs
 - OutputScopeManager.cs
 - UniqueID.cs
 - ProtectedConfigurationProviderCollection.cs
 - XPathDescendantIterator.cs
 - WinInetCache.cs
 - SqlDelegatedTransaction.cs
 - ToolBarDesigner.cs
 - BindingSource.cs
 - PasswordTextContainer.cs
 - Boolean.cs
 - Domain.cs
 - ContractBase.cs
 - UInt64Storage.cs
 - EntityDataSourceReferenceGroup.cs
 - ThicknessAnimationBase.cs
 - TemplateContentLoader.cs
 - QueuePropertyVariants.cs
 - TlsSspiNegotiation.cs
 - UpdateTranslator.cs
 - InternalMappingException.cs
 - PingOptions.cs
 - ProcessRequestAsyncResult.cs
 - HeaderPanel.cs
 - TraceSection.cs
 - SoapWriter.cs