2015-04-07 09:35:12 +01:00
|
|
|
//---------------------------------------------------------------------
|
|
|
|
// <copyright file="KeyConstraint.cs" company="Microsoft">
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
// </copyright>
|
|
|
|
//
|
|
|
|
// @owner [....]
|
|
|
|
// @backupOwner [....]
|
|
|
|
//---------------------------------------------------------------------
|
|
|
|
|
|
|
|
using System.Data.Common.Utils;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Text;
|
|
|
|
using System.Diagnostics;
|
|
|
|
|
|
|
|
namespace System.Data.Mapping.ViewGeneration.Validation
|
|
|
|
{
|
|
|
|
// Class representing a key constraint for particular cellrelation
|
|
|
|
internal class KeyConstraint<TCellRelation, TSlot> : InternalBase
|
|
|
|
where TCellRelation : CellRelation
|
|
|
|
{
|
|
|
|
|
|
|
|
#region Constructor
|
|
|
|
// Constructs a key constraint for the given relation and keyslots
|
|
|
|
// with comparer being the comparison operator for comparing various
|
|
|
|
// keyslots in Implies, etc
|
|
|
|
internal KeyConstraint(TCellRelation relation, IEnumerable<TSlot> keySlots, IEqualityComparer<TSlot> comparer)
|
|
|
|
{
|
|
|
|
m_relation = relation;
|
|
|
|
m_keySlots = new Set<TSlot>(keySlots, comparer).MakeReadOnly();
|
|
|
|
Debug.Assert(m_keySlots.Count > 0, "Key constraint being created without any keyslots?");
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region Fields
|
|
|
|
private TCellRelation m_relation;
|
|
|
|
private Set<TSlot> m_keySlots;
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region Properties
|
|
|
|
protected TCellRelation CellRelation
|
|
|
|
{
|
|
|
|
get { return m_relation; }
|
|
|
|
}
|
|
|
|
|
|
|
|
protected Set<TSlot> KeySlots
|
|
|
|
{
|
|
|
|
get { return m_keySlots; }
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region Methods
|
|
|
|
internal override void ToCompactString(StringBuilder builder)
|
|
|
|
{
|
|
|
|
StringUtil.FormatStringBuilder(builder, "Key (V{0}) - ", m_relation.CellNumber);
|
|
|
|
StringUtil.ToSeparatedStringSorted(builder, KeySlots, ", ");
|
|
|
|
// The slots contain the name of the relation: So we skip
|
|
|
|
// printing the CellRelation
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
}
|