if (dataTable == null)
throw new ArgumentException (String.Format ("Missing table {0}",
srcTable));
+
+ /** Copied from another Update function **/
+ if (tableMapping != null) {
+ foreach (DataColumn col in dataTable.Columns) {
+ if (tableMapping.ColumnMappings.IndexOf (col.ColumnName) >= 0)
+ continue;
+ DataColumnMapping columnMapping = DataColumnMappingCollection.GetColumnMappingBySchemaAction (tableMapping.ColumnMappings, col.ColumnName, MissingMappingAction);
+ if (columnMapping == null)
+ columnMapping = new DataColumnMapping (col.ColumnName, col.ColumnName);
+ tableMapping.ColumnMappings.Add (columnMapping);
+ }
+ } else {
+ ArrayList cmc = new ArrayList ();
+ foreach (DataColumn col in dataTable.Columns)
+ cmc.Add (new DataColumnMapping (col.ColumnName, col.ColumnName));
+ tableMapping =
+ new DataTableMapping (
+ dataTable.TableName,
+ dataTable.TableName,
+ cmc.ToArray (typeof (DataColumnMapping)) as DataColumnMapping []);
+ }
+ /**end insert from another update**/
return Update (dataTable, tableMapping);
}
using System.Data.Common;
using System.Data.SqlClient;
+/*--For Bug 853 Test Begin--*/
+using Mono.Data.Sqlite;
+/*--For Bug 853 Test End--*/
+
using NUnit.Framework;
namespace MonoTests.System.Data.Common
Assert.IsNotNull (ex.Message, "#4");
}
}
+
+ [Test]
+ public void XimarinBugzillaBug853Test()
+ {
+ const string connectionString = "URI = file:./SqliteTest.db; Version = 3";//will be in System.Data directory
+ SqliteConnection dbConnection = new SqliteConnection(connectionString);
+ dbConnection.Open();
+ SqliteCommand ClearTableEntry=new SqliteCommand("DELETE FROM Primus;",dbConnection);
+ ClearTableEntry.ExecuteNonQuery();
+
+ SqliteDataAdapter sqliteDataAdapter = new SqliteDataAdapter("SELECT * FROM primus", dbConnection);
+ SqliteCommandBuilder builder = new SqliteCommandBuilder(sqliteDataAdapter);
+ sqliteDataAdapter.InsertCommand = builder.GetInsertCommand();
+ sqliteDataAdapter.DeleteCommand = builder.GetDeleteCommand();
+
+ DataSet dataSet = new DataSet();
+
+ sqliteDataAdapter.Fill(dataSet, "Primus");//reset
+
+ DataRow rowToBeAdded = dataSet.Tables["Primus"].NewRow();
+ rowToBeAdded["id"] = 123;
+ rowToBeAdded["name"] = "Name";//not null primary key
+ rowToBeAdded["value"] = 777;
+
+ dataSet.Tables["Primus"].Rows.Add(rowToBeAdded);
+sqliteDataAdapter.Update (dataSet, "Primus");
+
+ //This would fail with NULL constraint violation in bug
+ //report. Because before the patch, it would create
+ //a new record with all fields being null-- if the
+ //exception rises, test fails
+ sqliteDataAdapter.Update (dataSet, "Primus");
+
+ dbConnection.Close();
+ dbConnection = null;
+ }
+
#endif
class MyAdapter : DbDataAdapter