//---------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System.Data.Mapping.ViewGeneration.CqlGeneration;
using System.Text;
using System.Collections.Generic;
using System.Data.Common.CommandTrees;
using System.Data.Common.CommandTrees.ExpressionBuilder;
namespace System.Data.Mapping.ViewGeneration.Structures
{
///
/// This class is just a wrapper over case statements so that we don't pollute the class itself.
///
internal sealed class CaseStatementProjectedSlot : ProjectedSlot
{
#region Constructor
///
/// Creates a slot for .
///
internal CaseStatementProjectedSlot(CaseStatement statement, IEnumerable withRelationships)
{
m_caseStatement = statement;
m_withRelationships = withRelationships;
}
#endregion
#region Fields
///
/// The actual case statement.
///
private readonly CaseStatement m_caseStatement;
private readonly IEnumerable m_withRelationships;
#endregion
#region Methods
///
/// Creates new that is qualified with .CqlAlias.
/// If current slot is composite (such as , then this method recursively qualifies all parts
/// and returns a new deeply qualified slot (as opposed to ).
///
internal override ProjectedSlot DeepQualify(CqlBlock block)
{
CaseStatement newStatement = m_caseStatement.DeepQualify(block);
return new CaseStatementProjectedSlot(newStatement, null);
}
internal override StringBuilder AsEsql(StringBuilder builder, MemberPath outputMember, string blockAlias, int indentLevel)
{
m_caseStatement.AsEsql(builder, m_withRelationships, blockAlias, indentLevel);
return builder;
}
internal override DbExpression AsCqt(DbExpression row, MemberPath outputMember)
{
return m_caseStatement.AsCqt(row, m_withRelationships);
}
internal override void ToCompactString(StringBuilder builder)
{
m_caseStatement.ToCompactString(builder);
}
#endregion
}
}