Code:
                         / Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataEntity / System / Data / Map / ViewGeneration / Structures / CellConstant.cs / 3 / CellConstant.cs
                        
                        
                            //---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
//  
// 
// @owner [....]
// @backupOwner [....] 
//--------------------------------------------------------------------- 
using System.Data.Common.Utils; 
using System.Collections.Generic;
using System.Text;
using System.Data.Mapping.ViewGeneration.CqlGeneration;
using System.Diagnostics; 
using System.Data.Metadata.Edm;
using System.Data.Mapping.ViewGeneration.Utils; 
 
namespace System.Data.Mapping.ViewGeneration.Structures {
 
    // This class denotes a constant that can be stored in multiconstants or
    // projected in fields
    internal class CellConstant : InternalBase {
 
        protected CellConstant() {
            // Private default constuctor so that no can construct this 
            // object externally other than via subclasses 
        }
 
        #region Fields
        // Two constants to denote nulls and undefined values
        // Order is important -- it is guaranteed by C# (see Section 10.4.5.1)
        internal static readonly IEqualityComparer EqualityComparer = new CellConstantComparer(); 
        internal static readonly CellConstant Null      = new CellConstant();
        internal static readonly CellConstant Undefined = new CellConstant(); 
        internal static readonly CellConstant NotNull   = NegatedCellConstant.CreateNotNull(); 
        //Represents scalar constants within a finite set that are not specified explicitly in the domain 
        // Currently only used as a Sentinel node to prevent expression optimization
        internal static readonly CellConstant AllOtherConstants = new CellConstant();
 
        #endregion
 
        #region Methods 
        internal bool IsNull() {
            return EqualityComparer.Equals(this, CellConstant.Null); 
        }
        internal bool IsUndefined() {
            return EqualityComparer.Equals(this, CellConstant.Undefined); 
        }
 
        internal virtual bool IsNotNull() { 
            // Provide a default implementation and let the subclasses
            // override it 
            return false; // NegatedCellConstant handles it
        }
        // effects: Returns true if this contains not null 
        internal virtual bool HasNotNull() {
            // Provide a default implementation and let the subclasses 
            // override it 
            return false; // NegatedCellConstant handles it
        } 
        // effects: Modifies builder to contain the appropriate expression
        // corresponding to this. outputMember is the member to which this constant is directed.
 		// blockAlias is the alias for the SELECT FROM WHERE block where this constant is being projected 
		// if not null. Returns the modified stringbuilder
        internal virtual StringBuilder AsCql(StringBuilder builder, MemberPath outputMember, string blockAlias) { 
 
            // Constants will never be simply entity sets -- so we can use Property on the path
            // constType is the type of this we need to cast to 
            EdmType constType = Helper.GetModelTypeUsage(outputMember.LastMember).EdmType;
            Debug.Assert(this != Undefined && this != NotNull, "Generating Cql for undefined slots or not-nulls?");
            Debug.Assert(this == Null, "Probably forgot to override this method in a subclass"); 
            // need to cast
            builder.Append("CAST(NULL AS "); 
            CqlWriter.AppendEscapedTypeName(builder, constType); 
            builder.Append(')');
            return builder; 
        }
        // effects: Returns true if right has the same contents as this
        protected virtual int GetHash() { 
            Debug.Assert(this == Null || this == Undefined || this == AllOtherConstants,
                         "CellConstants can only be Null, Undefined, or AllOtherConstants"); 
            return 0; 
        }
 
        // effects: Returns true if right has the same contents as this
        protected virtual bool IsEqualTo(CellConstant right) {
            Debug.Assert(this == Null || this == Undefined || this == AllOtherConstants,
                         "CellConstants can only be Null, Undefined, or AllOtherConstants"); 
            return this == right;
        } 
 
        public override bool Equals(object obj)
        { 
            CellConstant cellConst = obj as CellConstant;
            if (cellConst == null)
            {
                return false; 
            }
            else 
            { 
                return IsEqualTo(cellConst);
            } 
        }
        public override int GetHashCode()
        { 
            return base.GetHashCode();
        } 
 
        internal virtual string ToUserString() { 
            StringBuilder builder = new StringBuilder();
            InternalToString(builder, false);
            return builder.ToString();
        } 
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 
        internal static void ConstantsToUserString(StringBuilder builder, Set constants) { 
            bool isFirst = true;
            foreach (CellConstant constant in constants) { 
                if (isFirst == false) {
                    builder.Append(System.Data.Entity.Strings.ViewGen_CommaBlank);
                }
                isFirst = false; 
                string constrStr = constant.ToUserString();
                builder.Append(constrStr); 
            } 
        }
 
        private void InternalToString(StringBuilder builder, bool isInvariant) {
            string result;
            if (this == Null) {
                result = isInvariant ? "NULL" : System.Data.Entity.Strings.ViewGen_Null; 
            } else if (this == Undefined) {
                Debug.Assert(isInvariant, "We should not emit a message about Undefined constants to the user"); 
                result = "?"; 
            } else if (this == NotNull) {
                result = isInvariant? "NOT_NULL": System.Data.Entity.Strings.ViewGen_NotNull; 
            } else if (this == AllOtherConstants){
                result = "AllOtherConstants";
            } else {
                Debug.Fail("No other constants handled by this class"); 
                result = isInvariant? "FAILURE": System.Data.Entity.Strings.ViewGen_Failure;
            } 
            builder.Append(result); 
        }
 
        internal override void ToCompactString(StringBuilder builder) {
            InternalToString(builder, true);
        }
        #endregion 
        #region Comparer class 
        private class CellConstantComparer : IEqualityComparer { 
            public bool Equals(CellConstant left, CellConstant right) { 
                // Quick check with references
                if (object.ReferenceEquals(left, right)) {
                    // Gets the Null and Undefined case as well
                    return true; 
                }
                // One of them is non-null at least. So if the other one is 
                // null, we cannot be equal 
                if (left == null || right == null) {
                    return false; 
                }
                // Both are non-null at this point
                return left.IsEqualTo(right);
            } 
            public int GetHashCode(CellConstant key) { 
                EntityUtil.CheckArgumentNull(key, "key"); 
                return key.GetHash();
            } 
        }
        #endregion
    }
 
} 
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
//  
// 
// @owner [....]
// @backupOwner [....] 
//--------------------------------------------------------------------- 
using System.Data.Common.Utils; 
using System.Collections.Generic;
using System.Text;
using System.Data.Mapping.ViewGeneration.CqlGeneration;
using System.Diagnostics; 
using System.Data.Metadata.Edm;
using System.Data.Mapping.ViewGeneration.Utils; 
 
namespace System.Data.Mapping.ViewGeneration.Structures {
 
    // This class denotes a constant that can be stored in multiconstants or
    // projected in fields
    internal class CellConstant : InternalBase {
 
        protected CellConstant() {
            // Private default constuctor so that no can construct this 
            // object externally other than via subclasses 
        }
 
        #region Fields
        // Two constants to denote nulls and undefined values
        // Order is important -- it is guaranteed by C# (see Section 10.4.5.1)
        internal static readonly IEqualityComparer EqualityComparer = new CellConstantComparer(); 
        internal static readonly CellConstant Null      = new CellConstant();
        internal static readonly CellConstant Undefined = new CellConstant(); 
        internal static readonly CellConstant NotNull   = NegatedCellConstant.CreateNotNull(); 
        //Represents scalar constants within a finite set that are not specified explicitly in the domain 
        // Currently only used as a Sentinel node to prevent expression optimization
        internal static readonly CellConstant AllOtherConstants = new CellConstant();
 
        #endregion
 
        #region Methods 
        internal bool IsNull() {
            return EqualityComparer.Equals(this, CellConstant.Null); 
        }
        internal bool IsUndefined() {
            return EqualityComparer.Equals(this, CellConstant.Undefined); 
        }
 
        internal virtual bool IsNotNull() { 
            // Provide a default implementation and let the subclasses
            // override it 
            return false; // NegatedCellConstant handles it
        }
        // effects: Returns true if this contains not null 
        internal virtual bool HasNotNull() {
            // Provide a default implementation and let the subclasses 
            // override it 
            return false; // NegatedCellConstant handles it
        } 
        // effects: Modifies builder to contain the appropriate expression
        // corresponding to this. outputMember is the member to which this constant is directed.
 		// blockAlias is the alias for the SELECT FROM WHERE block where this constant is being projected 
		// if not null. Returns the modified stringbuilder
        internal virtual StringBuilder AsCql(StringBuilder builder, MemberPath outputMember, string blockAlias) { 
 
            // Constants will never be simply entity sets -- so we can use Property on the path
            // constType is the type of this we need to cast to 
            EdmType constType = Helper.GetModelTypeUsage(outputMember.LastMember).EdmType;
            Debug.Assert(this != Undefined && this != NotNull, "Generating Cql for undefined slots or not-nulls?");
            Debug.Assert(this == Null, "Probably forgot to override this method in a subclass"); 
            // need to cast
            builder.Append("CAST(NULL AS "); 
            CqlWriter.AppendEscapedTypeName(builder, constType); 
            builder.Append(')');
            return builder; 
        }
        // effects: Returns true if right has the same contents as this
        protected virtual int GetHash() { 
            Debug.Assert(this == Null || this == Undefined || this == AllOtherConstants,
                         "CellConstants can only be Null, Undefined, or AllOtherConstants"); 
            return 0; 
        }
 
        // effects: Returns true if right has the same contents as this
        protected virtual bool IsEqualTo(CellConstant right) {
            Debug.Assert(this == Null || this == Undefined || this == AllOtherConstants,
                         "CellConstants can only be Null, Undefined, or AllOtherConstants"); 
            return this == right;
        } 
 
        public override bool Equals(object obj)
        { 
            CellConstant cellConst = obj as CellConstant;
            if (cellConst == null)
            {
                return false; 
            }
            else 
            { 
                return IsEqualTo(cellConst);
            } 
        }
        public override int GetHashCode()
        { 
            return base.GetHashCode();
        } 
 
        internal virtual string ToUserString() { 
            StringBuilder builder = new StringBuilder();
            InternalToString(builder, false);
            return builder.ToString();
        } 
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 
        internal static void ConstantsToUserString(StringBuilder builder, Set constants) { 
            bool isFirst = true;
            foreach (CellConstant constant in constants) { 
                if (isFirst == false) {
                    builder.Append(System.Data.Entity.Strings.ViewGen_CommaBlank);
                }
                isFirst = false; 
                string constrStr = constant.ToUserString();
                builder.Append(constrStr); 
            } 
        }
 
        private void InternalToString(StringBuilder builder, bool isInvariant) {
            string result;
            if (this == Null) {
                result = isInvariant ? "NULL" : System.Data.Entity.Strings.ViewGen_Null; 
            } else if (this == Undefined) {
                Debug.Assert(isInvariant, "We should not emit a message about Undefined constants to the user"); 
                result = "?"; 
            } else if (this == NotNull) {
                result = isInvariant? "NOT_NULL": System.Data.Entity.Strings.ViewGen_NotNull; 
            } else if (this == AllOtherConstants){
                result = "AllOtherConstants";
            } else {
                Debug.Fail("No other constants handled by this class"); 
                result = isInvariant? "FAILURE": System.Data.Entity.Strings.ViewGen_Failure;
            } 
            builder.Append(result); 
        }
 
        internal override void ToCompactString(StringBuilder builder) {
            InternalToString(builder, true);
        }
        #endregion 
        #region Comparer class 
        private class CellConstantComparer : IEqualityComparer { 
            public bool Equals(CellConstant left, CellConstant right) { 
                // Quick check with references
                if (object.ReferenceEquals(left, right)) {
                    // Gets the Null and Undefined case as well
                    return true; 
                }
                // One of them is non-null at least. So if the other one is 
                // null, we cannot be equal 
                if (left == null || right == null) {
                    return false; 
                }
                // Both are non-null at this point
                return left.IsEqualTo(right);
            } 
            public int GetHashCode(CellConstant key) { 
                EntityUtil.CheckArgumentNull(key, "key"); 
                return key.GetHash();
            } 
        }
        #endregion
    }
 
} 
// 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
- Style.cs
- SqlGatherConsumedAliases.cs
- ProcessManager.cs
- StringPropertyBuilder.cs
- altserialization.cs
- IUnknownConstantAttribute.cs
- SchemaTypeEmitter.cs
- TemplateKeyConverter.cs
- GradientBrush.cs
- ParameterCollection.cs
- ToolStripDropDownClosingEventArgs.cs
- FontInfo.cs
- PersonalizationProvider.cs
- ResourceReferenceKeyNotFoundException.cs
- DataFormats.cs
- PartManifestEntry.cs
- safemediahandle.cs
- InvokeMemberBinder.cs
- SendMailErrorEventArgs.cs
- FormsAuthentication.cs
- CompoundFileStorageReference.cs
- XmlAutoDetectWriter.cs
- SymmetricKey.cs
- CodeVariableDeclarationStatement.cs
- FileSystemInfo.cs
- DetailsViewDeletedEventArgs.cs
- PenCursorManager.cs
- Floater.cs
- Vertex.cs
- SharedStatics.cs
- DataContext.cs
- ConfigurationLockCollection.cs
- DynamicMetaObjectBinder.cs
- SizeAnimationUsingKeyFrames.cs
- GiveFeedbackEventArgs.cs
- MultiViewDesigner.cs
- TextViewBase.cs
- ResetableIterator.cs
- PropertyBuilder.cs
- SessionStateSection.cs
- SafeRegistryHandle.cs
- WindowsTooltip.cs
- InitializationEventAttribute.cs
- VirtualDirectoryMappingCollection.cs
- SchemaManager.cs
- ParallelEnumerable.cs
- DesignConnection.cs
- RequestCacheValidator.cs
- SqlMultiplexer.cs
- TimeIntervalCollection.cs
- WebPartsSection.cs
- PrintPreviewGraphics.cs
- NativeActivity.cs
- LocalizabilityAttribute.cs
- AttachedPropertyBrowsableAttribute.cs
- ToolStripItem.cs
- DataRowExtensions.cs
- MessageVersionConverter.cs
- UnmanagedMemoryStream.cs
- CancelAsyncOperationRequest.cs
- MessageLogger.cs
- DbProviderFactories.cs
- ProfileProvider.cs
- DynamicAttribute.cs
- TailCallAnalyzer.cs
- LineUtil.cs
- AttributeAction.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- ContextProperty.cs
- DataBoundControl.cs
- OdbcError.cs
- ToolStripContentPanelRenderEventArgs.cs
- SegmentInfo.cs
- EnumerableCollectionView.cs
- RSAPKCS1KeyExchangeFormatter.cs
- SqlTransaction.cs
- NativeMethods.cs
- ColumnResizeUndoUnit.cs
- EditorPart.cs
- UDPClient.cs
- XmlDataSourceNodeDescriptor.cs
- DBAsyncResult.cs
- Group.cs
- StyleCollection.cs
- ResourceAttributes.cs
- SmiConnection.cs
- CompositeControl.cs
- TdsParserStateObject.cs
- XmlDataContract.cs
- SelectedDatesCollection.cs
- RuntimeConfigLKG.cs
- SelectionItemProviderWrapper.cs
- ApplicationContext.cs
- WindowsNonControl.cs
- ClosableStream.cs
- GroupBoxDesigner.cs
- SqlDataSourceCommandEventArgs.cs
- HtmlImage.cs
- COM2TypeInfoProcessor.cs
- XmlUTF8TextWriter.cs