// Franklin Wise <gracenote@earthlink.net>
// Daniel Morgan
// Tim Coleman (tim@timcoleman.com)
-//
+//
//
// (C) Ximian, Inc. 2002
// Copyright (C) Tim Coleman, 2002
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
-//
+//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
-//
+//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
[Serializable]
internal delegate void DelegateConstraintNameChange (object sender, string newName);
- [DefaultProperty ("ConstraintName")]
+ [DefaultProperty ("ConstraintName")]
#if !NET_2_0
[Serializable]
#endif
[TypeConverterAttribute (typeof (ConstraintConverter))]
- public abstract class Constraint
- {
- internal event DelegateConstraintNameChange BeforeConstraintNameChange;
+ public abstract class Constraint {
+ static readonly object beforeConstraintNameChange = new object ();
+
+ EventHandlerList events = new EventHandlerList ();
+
+ internal event DelegateConstraintNameChange BeforeConstraintNameChange {
+ add { events.AddHandler (beforeConstraintNameChange, value); }
+ remove { events.RemoveHandler (beforeConstraintNameChange, value); }
+ }
- //if constraintName is not set then a name is
+ //if constraintName is not set then a name is
//created when it is added to
//the ConstraintCollection
//it can not be set to null, empty or duplicate
DataSet dataSet;
- protected Constraint ()
+ protected Constraint ()
{
dataSet = null;
- _properties = new PropertyCollection();
+ _properties = new PropertyCollection ();
}
[CLSCompliant (false)]
#endif
[DefaultValue ("")]
public virtual string ConstraintName {
- get{ return _constraintName == null ? "" : _constraintName; }
- set{
+ get { return _constraintName == null ? "" : _constraintName; }
+ set {
//This should only throw an exception when it
//is a member of a ConstraintCollection which
//means we should let the ConstraintCollection
//handle exceptions when this value changes
- _onConstraintNameChange(value);
+ _onConstraintNameChange (value);
_constraintName = value;
}
}
#endif
public PropertyCollection ExtendedProperties {
get { return _properties; }
-#if NET_2_0
- internal set { _properties = value; }
-#endif
}
#if !NET_2_0
}
internal ConstraintCollection ConstraintCollection {
- get{ return _constraintCollection; }
- set{ _constraintCollection = value; }
+ get { return _constraintCollection; }
+ set { _constraintCollection = value; }
}
-
+
private void _onConstraintNameChange (string newName)
{
- if (null != BeforeConstraintNameChange)
- {
- BeforeConstraintNameChange (this, newName);
- }
+ DelegateConstraintNameChange eh = events [beforeConstraintNameChange] as DelegateConstraintNameChange;
+ if (eh != null)
+ eh (this, newName);
}
//call once before adding a constraint to a collection
//will throw an exception to prevent the add if a rule is broken
internal abstract void AddToConstraintCollectionSetup (ConstraintCollection collection);
-
+
internal abstract bool IsConstraintViolated ();
-
- internal static void ThrowConstraintException(){
+
+ internal static void ThrowConstraintException ()
+ {
throw new ConstraintException("Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.");
}
{
}
- internal void AssertConstraint()
+ internal void AssertConstraint ()
{
// The order is important.. IsConstraintViolated fills the RowErrors if it detects
// a violation
- if (!IsConstraintViolated())
+ if (!IsConstraintViolated ())
return;
if (Table._duringDataLoad || (Table.DataSet != null && !Table.DataSet.EnforceConstraints))
return;
- ThrowConstraintException();
+ ThrowConstraintException ();
}
- internal abstract void AssertConstraint(DataRow row);
+ internal abstract void AssertConstraint (DataRow row);
internal virtual void RollbackAssert (DataRow row)
{
this.dataSet = dataSet;
}
- internal Index Index
+ internal void SetExtendedProperties (PropertyCollection properties)
{
- get {
- return _index;
- }
+ _properties = properties;
+ }
+
+ internal Index Index {
+ get { return _index; }
set {
if (_index != null) {
_index.RemoveRef();
_index = value;
- if (_index != null) {
+ if (_index != null)
_index.AddRef();
- }
}
}
- internal abstract bool IsColumnContained(DataColumn column);
- internal abstract bool CanRemoveFromCollection(ConstraintCollection col, bool shouldThrow);
+ internal abstract bool IsColumnContained (DataColumn column);
+ internal abstract bool CanRemoveFromCollection (ConstraintCollection col, bool shouldThrow);
/// <summary>
- /// Gets the ConstraintName, if there is one, as a string.
+ /// Gets the ConstraintName, if there is one, as a string.
/// </summary>
- public override string ToString ()
+ public override string ToString ()
{
return _constraintName == null ? "" : _constraintName;
}
-
}
}