2005-06-10 Sureshkumar T <tsureshkumar@novell.com>
authorSureshkumar T <suresh@mono-cvs.ximian.com>
Fri, 10 Jun 2005 06:43:14 +0000 (06:43 -0000)
committerSureshkumar T <suresh@mono-cvs.ximian.com>
Fri, 10 Jun 2005 06:43:14 +0000 (06:43 -0000)
* DataRow.cs: CopyValuesToRow: if orginal == current, don't create
a new current record.
* DataSet.cs: GetChanges :Temporarily disable EnforceConstraints.

svn path=/trunk/mcs/; revision=45735

mcs/class/System.Data/System.Data/ChangeLog
mcs/class/System.Data/System.Data/DataRow.cs
mcs/class/System.Data/System.Data/DataSet.cs

index 87c4ebeac5f2fff19a5f7877c55b4ae510694981..4b78e1924b5f840e51bc522f312392efbac682af 100644 (file)
@@ -1,8 +1,13 @@
 2005-06-10  Sureshkumar T  <tsureshkumar@novell.com>
 
-       * MergeManager.cs: Temporarily disable EnforceConstraints while
-       doing a dataset Merge. Patch from george.barbarosie@gmail.com
-       (George Barbarosie).
+       * DataRow.cs: CopyValuesToRow: if orginal == current, don't create
+       a new current record.
+
+       * DataSet.cs: GetChanges :Temporarily disable EnforceConstraints.
+
+       * MergeManager.cs: Merge: Temporarily disable
+       EnforceConstraints. Patch from george.barbarosie@gmail.com (George
+       Barbarosie).
 
 2005-06-09  Jordi Mas i Hernandez <jordi@ximian.com>
 
index 9c014aa4c453921e7924e470d3f7527b7f7484b8..0f78df47756c328ed43c387b4394dc29ce2d1dbb 100644 (file)
@@ -1459,12 +1459,15 @@ namespace System.Data {
                                        }
 
                                        if (HasVersion(DataRowVersion.Current)) {
-                                               if (row.Current < 0) {
-                                                       row.Current = row.Table.RecordCache.NewRecord();
+                                               if (Current == Original) {
+                                                       row.Current = row.Original;
+                                               }else {
+                                                       if (row.Current < 0)
+                                                               row.Current = row.Table.RecordCache.NewRecord();
+                                                       object val = column[Current];
+                                                       row.CheckValue(val, targetColumn);
+                                                       targetColumn[row.Current] = val;
                                                }
-                                               object val = column[Current];
-                                               row.CheckValue(val, targetColumn);
-                                               targetColumn[row.Current] = val;
                                        }
                                        else {
                                                if (row.Current > 0) {
index 2e54e521451aa9a13e10746cbf878215e98230c4..f8f4b4b31c1850521a8c0af3baa53e7a6bd74577 100644 (file)
@@ -477,46 +477,45 @@ namespace System.Data {
                                return null;\r
                        \r
                        DataSet copySet = Clone ();\r
+                       bool prev = copySet.EnforceConstraints;\r
+                       copySet.EnforceConstraints = false;\r
+\r
                        Hashtable addedRows = new Hashtable ();\r
 \r
-                       IEnumerator tableEnumerator = Tables.GetEnumerator ();\r
-                       DataTable origTable;\r
-                       DataTable copyTable;\r
-                       while (tableEnumerator.MoveNext ()) {\r
-                               origTable = (DataTable)tableEnumerator.Current;\r
-                               copyTable = copySet.Tables[origTable.TableName];\r
-                               \r
-                               // Look for relations that have this table as child\r
-                               IEnumerator relations = origTable.ParentRelations.GetEnumerator ();\r
-\r
-                               IEnumerator rowEnumerator = origTable.Rows.GetEnumerator ();\r
-                               while (rowEnumerator.MoveNext ()) {\r
-                                       DataRow row = (DataRow)rowEnumerator.Current;\r
-                                       \r
-                                       if (row.IsRowChanged (rowStates))\r
-                                               AddChangedRow (addedRows, copySet, copyTable, relations, row);\r
+                       for (int i = 0; i < Tables.Count; i++) {\r
+                               DataTable origTable = Tables [i];\r
+                               DataTable copyTable = copySet.Tables[origTable.TableName];\r
+                               for (int j = 0; j < origTable.Rows.Count; j++) {\r
+                                       DataRow row = origTable.Rows [j];\r
+                                       if (!row.IsRowChanged (rowStates)\r
+                                           || addedRows.Contains (row))\r
+                                               continue;\r
+                                       AddChangedRow (addedRows, copyTable, row);\r
                                }\r
                        }\r
+                       copySet.EnforceConstraints = prev;\r
                        return copySet;\r
                }\r
                \r
-               void AddChangedRow (Hashtable addedRows, DataSet copySet, DataTable copyTable, IEnumerator relations, DataRow row)\r
+               private void AddChangedRow (Hashtable addedRows, DataTable copyTable, DataRow row)\r
                {\r
                        if (addedRows.ContainsKey (row)) return;\r
-                       \r
-                       relations.Reset ();\r
-                       while (relations.MoveNext ()) {\r
-                               DataRow parentRow = row.GetParentRow ((DataRelation) relations.Current);\r
-                               if (parentRow == null || addedRows.ContainsKey (parentRow)) continue;\r
-                               DataTable parentCopyTable = copySet.Tables [parentRow.Table.TableName];\r
-                               AddChangedRow (addedRows, copySet, parentCopyTable, parentRow.Table.ParentRelations.GetEnumerator (), parentRow);\r
+\r
+                       foreach (DataRelation relation in row.Table.ParentRelations) {\r
+                               DataRow parent = row.GetParentRow (relation);\r
+                               if (parent == null)\r
+                                       continue;\r
+                               // add the parent row\r
+                               DataTable parentCopyTable = copyTable.DataSet.Tables [parent.Table.TableName];\r
+                               AddChangedRow (addedRows, parentCopyTable, parent);\r
                        }\r
-               \r
-                       DataRow newRow = copyTable.NewRow ();\r
-                       copyTable.Rows.Add (newRow);\r
-                       row.CopyValuesToRow (newRow);                   \r
+\r
+                       // add the current row\r
+                       DataRow newRow = copyTable.NewNotInitializedRow();\r
+                       copyTable.Rows.AddInternal(newRow);\r
+                       row.CopyValuesToRow (newRow);\r
                        newRow.XmlRowID = row.XmlRowID;\r
-                       addedRows.Add (row,row);\r
+                       addedRows.Add (row, row);\r
                }\r
 \r
 #if NET_2_0\r