2015-04-07 09:35:12 +01:00
|
|
|
|
//---------------------------------------------------------------------
|
|
|
|
|
// <copyright file="RoleBoolean.cs" company="Microsoft">
|
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
|
// </copyright>
|
|
|
|
|
//
|
|
|
|
|
// @owner [....]
|
|
|
|
|
// @backupOwner [....]
|
|
|
|
|
//---------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
namespace System.Data.Mapping.ViewGeneration.Structures
|
|
|
|
|
{
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Data.Common.CommandTrees;
|
|
|
|
|
using System.Data.Entity;
|
|
|
|
|
using System.Data.Metadata.Edm;
|
|
|
|
|
using System.Diagnostics;
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Denotes the fact that the key of the current tuple comes from a specific extent, or association role.
|
|
|
|
|
/// </summary>
|
|
|
|
|
internal sealed class RoleBoolean : TrueFalseLiteral
|
|
|
|
|
{
|
|
|
|
|
#region Constructor
|
|
|
|
|
internal RoleBoolean(EntitySetBase extent)
|
|
|
|
|
{
|
|
|
|
|
m_metadataItem = extent;
|
|
|
|
|
}
|
|
|
|
|
internal RoleBoolean(AssociationSetEnd end)
|
|
|
|
|
{
|
|
|
|
|
m_metadataItem = end;
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Fields
|
|
|
|
|
private readonly MetadataItem m_metadataItem;
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region BoolLiteral members
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Not supported in this class.
|
|
|
|
|
/// </summary>
|
|
|
|
|
internal override StringBuilder AsEsql(StringBuilder builder, string blockAlias, bool skipIsNotNull)
|
|
|
|
|
{
|
|
|
|
|
Debug.Fail("Should not be called.");
|
|
|
|
|
return null; // To keep the compiler happy
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Not supported in this class.
|
|
|
|
|
/// </summary>
|
|
|
|
|
internal override DbExpression AsCqt(DbExpression row, bool skipIsNotNull)
|
|
|
|
|
{
|
|
|
|
|
Debug.Fail("Should not be called.");
|
|
|
|
|
return null; // To keep the compiler happy
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal override StringBuilder AsUserString(StringBuilder builder, string blockAlias, bool skipIsNotNull)
|
|
|
|
|
{
|
|
|
|
|
AssociationSetEnd end = m_metadataItem as AssociationSetEnd;
|
|
|
|
|
if (end != null)
|
|
|
|
|
{
|
|
|
|
|
builder.Append(Strings.ViewGen_AssociationSet_AsUserString(blockAlias, end.Name, end.ParentAssociationSet));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
builder.Append(Strings.ViewGen_EntitySet_AsUserString(blockAlias, m_metadataItem.ToString()));
|
|
|
|
|
}
|
|
|
|
|
return builder;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal override StringBuilder AsNegatedUserString(StringBuilder builder, string blockAlias, bool skipIsNotNull)
|
|
|
|
|
{
|
|
|
|
|
AssociationSetEnd end = m_metadataItem as AssociationSetEnd;
|
|
|
|
|
if (end != null)
|
|
|
|
|
{
|
|
|
|
|
builder.Append(Strings.ViewGen_AssociationSet_AsUserString_Negated(blockAlias, end.Name, end.ParentAssociationSet));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
builder.Append(Strings.ViewGen_EntitySet_AsUserString_Negated(blockAlias, m_metadataItem.ToString()));
|
|
|
|
|
}
|
|
|
|
|
return builder;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal override void GetRequiredSlots(MemberProjectionIndex projectedSlotMap, bool[] requiredSlots)
|
|
|
|
|
{
|
|
|
|
|
throw new NotImplementedException();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected override bool IsEqualTo(BoolLiteral right)
|
|
|
|
|
{
|
|
|
|
|
RoleBoolean rightBoolean = right as RoleBoolean;
|
|
|
|
|
if (rightBoolean == null)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return m_metadataItem == rightBoolean.m_metadataItem;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override int GetHashCode()
|
|
|
|
|
{
|
|
|
|
|
return m_metadataItem.GetHashCode();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal override BoolLiteral RemapBool(Dictionary<MemberPath, MemberPath> remap)
|
|
|
|
|
{
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Other Methods
|
|
|
|
|
internal override void ToCompactString(StringBuilder builder)
|
|
|
|
|
{
|
|
|
|
|
AssociationSetEnd end = m_metadataItem as AssociationSetEnd;
|
|
|
|
|
if (end != null)
|
|
|
|
|
{
|
|
|
|
|
builder.Append("InEnd:" + end.ParentAssociationSet + "_" + end.Name);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
builder.Append("InSet:" + m_metadataItem.ToString());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
}
|
|
|
|
|
}
|