File: System\Data\Mapping\ViewGeneration\Structures\ConstantProjectedSlot.cs
Project: ndp\fx\src\DataEntity\System.Data.Entity.csproj (System.Data.Entity)
//---------------------------------------------------------------------
// <copyright file="ConstantProjectedSlot.cs" company="Microsoft">
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
//
// @owner Microsoft
// @backupOwner Microsoft
//---------------------------------------------------------------------
 
using System.Data.Mapping.ViewGeneration.CqlGeneration;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Data.Common.CommandTrees;
using System.Data.Common.CommandTrees.ExpressionBuilder;
 
namespace System.Data.Mapping.ViewGeneration.Structures
{
    /// <summary>
    /// A constant that can be projected in a cell query.
    /// </summary>
    internal sealed class ConstantProjectedSlot : ProjectedSlot
    {
        #region Constructors
        /// <summary>
        /// Creates a slot with constant value being <paramref name="value"/>.
        /// </summary>
        internal ConstantProjectedSlot(Constant value, MemberPath memberPath)
        {
            Debug.Assert(value != null);
            Debug.Assert(value.IsNotNull() == false, "Cannot store NotNull in a slot - NotNull is only for conditions");
            m_constant = value;
            m_memberPath = memberPath;
        }
        #endregion
 
        #region Fields
        /// <summary>
        /// The actual value.
        /// </summary>
        private readonly Constant m_constant;
        private readonly MemberPath m_memberPath;
        #endregion
 
        #region Properties
        /// <summary>
        /// Returns the value stored in this constant.
        /// </summary>
        internal Constant CellConstant
        {
            get { return m_constant; }
        }
 
        #endregion
 
        #region Methods
        internal override ProjectedSlot DeepQualify(CqlBlock block)
        {
            return this; // Nothing to create
        }
 
        internal override StringBuilder AsEsql(StringBuilder builder, MemberPath outputMember, string blockAlias, int indentLevel)
        {
            return m_constant.AsEsql(builder, outputMember, blockAlias);
        }
 
        internal override DbExpression AsCqt(DbExpression row, MemberPath outputMember)
        {
            return m_constant.AsCqt(row, outputMember);
        }
 
        protected override bool IsEqualTo(ProjectedSlot right)
        {
            ConstantProjectedSlot rightSlot = right as ConstantProjectedSlot;
            if (rightSlot == null)
            {
                return false;
            }
            return Constant.EqualityComparer.Equals(m_constant, rightSlot.m_constant);
        }
 
        protected override int GetHash()
        {
            return Constant.EqualityComparer.GetHashCode(m_constant);
        }
 
        internal override void ToCompactString(StringBuilder builder)
        {
            m_constant.ToCompactString(builder);
        }
        #endregion
    }
}