Drop dependend indexes on column removal.
authorBoris Kirzner <borisk@mono-cvs.ximian.com>
Mon, 16 Jan 2006 16:20:35 +0000 (16:20 -0000)
committerBoris Kirzner <borisk@mono-cvs.ximian.com>
Mon, 16 Jan 2006 16:20:35 +0000 (16:20 -0000)
svn path=/trunk/mcs/; revision=55636

mcs/class/System.Data/System.Data/ChangeLog
mcs/class/System.Data/System.Data/DataTable.cs
mcs/class/System.Data/Test/System.Data/ChangeLog
mcs/class/System.Data/Test/System.Data/DataColumnCollectionTest2.cs

index 034d4af1b85ba0e9d12eba2568342a85b29be6f8..cd4cc507b37eda672f888d2f55673fced7a87f5b 100644 (file)
@@ -1,3 +1,6 @@
+2006-01-16 Boris Kirzner <borisk@mainsoft.com>
+       * DataTable.cs: Drop dependend indexes on column removal.
+
 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
 
        * CustomDataClassGenerator.cs :
index 6006dd6f6b9f44ea197ab295aa30bdf29f1bc053..3029f32226cd5d307f7f193025af7eb8e0f778cd 100644 (file)
@@ -1588,6 +1588,16 @@ namespace System.Data {
                        }\r
                }\r
 \r
+               internal void DropReferencedIndexes (DataColumn column)\r
+               {\r
+                       if (_indexes != null)\r
+                               for (int i = _indexes.Count - 1; i >= 0; i--) { \r
+                                       Index indx = (Index)_indexes [i];\r
+                                       if (indx.Key.DependsOn (column))\r
+                                               _indexes.Remove (indx);\r
+                               }\r
+               }\r
+\r
                internal void AddRowToIndexes (DataRow row) {\r
                        if (_indexes != null) {\r
                                foreach (Index indx in _indexes) {\r
@@ -1768,8 +1778,8 @@ namespace System.Data {
                /// <summary>\r
                /// Notifies the DataTable that a DataColumn is being removed.\r
                /// </summary>\r
-               [MonoTODO]\r
                protected internal virtual void OnRemoveColumn (DataColumn column) {\r
+                       DropReferencedIndexes (column);\r
                }\r
 \r
 \r
index 699cbea3ae115753d02dfc9c8afa0fb61619acd8..4c4c4d29251214540cb6f7c7738e529a436b4843 100644 (file)
@@ -1,3 +1,7 @@
+2006-01-16 Boris Kirzner <borisk@mainsoft.com>
+       * DataColumnCollectionTest2.cs: added test case for index update on 
+       column removal
+
 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
 
        * TypedDataSetGeneratorTest.cs : added test for bug #77248, but we
index 4458d473c8e035205e90b82694e26c5a65190ab5..7f13c1a705eba546647245d00c7cbb3623851c98 100644 (file)
@@ -763,6 +763,41 @@ namespace MonoTests.System.Data
                        }\r
                }\r
 \r
+               [Test]\r
+               public void Test_Indexes ()\r
+               {\r
+                       DataTable dt = new DataTable ();\r
+                       DataColumn dc = new DataColumn("A");\r
+                       dt.Columns.Add (dc);\r
+\r
+                       dc = new DataColumn("B");\r
+                       dt.Columns.Add (dc);\r
+\r
+                       dc = new DataColumn("C");\r
+                       dt.Columns.Add (dc);\r
+\r
+                       for(int i=0; i < 10; i++) {\r
+                               DataRow dr = dt.NewRow ();\r
+                               dr ["A"] = i;\r
+                               dr ["B"] = i + 1;\r
+                               dr ["C"] = i + 2;\r
+                               dt.Rows.Add (dr);\r
+                       }\r
+\r
+                       DataRow[] rows = dt.Select ("A=5");\r
+                       Assert.AreEqual (1, rows.Length);\r
+\r
+                       dt.Columns.Remove ("A");\r
+\r
+                       dc = new DataColumn ("A");\r
+                       dc.DefaultValue = 5;\r
+\r
+                       dt.Columns.Add (dc);\r
+\r
+                       rows = dt.Select ("A=5");\r
+                       Assert.AreEqual (10, rows.Length);\r
+               }\r
+\r
                private void Columns_CollectionChanged1(object sender, CollectionChangeEventArgs e)\r
                {\r
                        eventOccured = true;\r