/********************************************************
* ADO.NET 2.0 Data Provider for SQLite Version 3.X
* Written by Robert Simpson (robert@blackcastlesoft.com)
*
* Released to the public domain, use at your own risk!
********************************************************/
namespace SQLite.Designer.Design
{
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Data;
using System.Data.Common;
using System.Globalization;
[TypeConverter(typeof(ExpandableObjectConverter))]
[DefaultProperty("Enabled")]
internal class Unique : IHaveConnection
{
private bool _isUnique;
private ConflictEnum _conflict = ConflictEnum.Abort;
private Column _column;
internal Unique(Column col)
: this(col, null)
{
}
internal Unique(Column col, DataRow row)
{
_column = col;
if (row != null)
{
_isUnique = (row.IsNull("UNIQUE") == false) ? (bool)row["UNIQUE"] : false;
}
}
#region IHaveConnection Members
[Browsable(false)]
public ViewTableBase DesignTable
{
get { return _column.DesignTable; }
}
public DbConnection GetConnection()
{
return ((IHaveConnection)_column).GetConnection();
}
#endregion
[DefaultValue(false)]
[DisplayName("Enabled")]
[RefreshProperties(RefreshProperties.All)]
[Description("When enabled, all values entered into this column must be unique.")]
public bool Enabled
{
get { return _isUnique; }
set
{
if (value != _isUnique)
{
_isUnique = value;
_column.Table._owner.MakeDirty();
}
}
}
[DefaultValue(ConflictEnum.Abort)]
[DisplayName("On Conflict")]
[RefreshProperties(RefreshProperties.All)]
[Description("Specifies what action to take when the unique constraint on the column is violated.")]
public ConflictEnum Conflict
{
get { return _conflict; }
set
{
if (_conflict != value)
{
_conflict = value;
if (_conflict != ConflictEnum.Abort && _isUnique == false)
_isUnique = true;
_column.Table._owner.MakeDirty();
}
}
}
public override string ToString()
{
if (_isUnique == false)
return Convert.ToString(false, CultureInfo.InvariantCulture);
else
return String.Format(CultureInfo.InvariantCulture, "{0} ({1})", Convert.ToString(true, CultureInfo.InvariantCulture), Convert.ToString(Conflict, CultureInfo.InvariantCulture));
//return Convert.ToString(true);
}
}
public enum ConflictEnum
{
Abort = 2,
Rollback = 0,
Fail = 3,
Ignore = 4,
Replace = 5,
}
}