Modified:
branches/1.0/CHANGES
branches/1.0/TestSuite/CommandBuilderTests.cs
branches/1.0/mysqlclient/CommandBuilder.cs
branches/1.0/mysqlclient/Types/MySqlUInt32.cs
Log:
Bug #23862 Problem with CommandBuilder 'GetInsertCommand' method
Fixed by making sure the column is not auto increment before including it in the insert
clause generated by MySqlCommandBuilder
Modified: branches/1.0/CHANGES
===================================================================
--- branches/1.0/CHANGES 2006-12-12 05:02:20 UTC (rev 494)
+++ branches/1.0/CHANGES 2006-12-13 16:41:57 UTC (rev 495)
@@ -9,6 +9,7 @@
Bug #18186 Problem with implementation of PreparedStatement
Bug #24565 Inferring DbType fails when reusing commands and the first time the value
is nul
Bug #24661 mysql-connector-net-5.0.2-beta Driver.IsTooOld() Error....
+ Bug #23862 Problem with CommandBuilder 'GetInsertCommand' method
Other changes
-------------
Modified: branches/1.0/TestSuite/CommandBuilderTests.cs
===================================================================
--- branches/1.0/TestSuite/CommandBuilderTests.cs 2006-12-12 05:02:20 UTC (rev 494)
+++ branches/1.0/TestSuite/CommandBuilderTests.cs 2006-12-13 16:41:57 UTC (rev 495)
@@ -30,6 +30,7 @@
[TestFixtureSetUp]
public void FixtureSetup()
{
+ csAdditions += ";logging=true;";
Open();
}
@@ -185,7 +186,8 @@
conn.ChangeDatabase("mysql");
- MySqlDataAdapter da = new MySqlDataAdapter("SELECT id, name FROM test.test", conn);
+ MySqlDataAdapter da = new MySqlDataAdapter(
+ String.Format("SELECT id, name FROM {0}.test", database), conn);
MySqlCommandBuilder cb = new MySqlCommandBuilder(da);
cb.ToString(); // keep the compiler happy
DataSet ds = new DataSet();
@@ -255,5 +257,42 @@
Assert.Fail(ex.Message);
}
}
+
+ /// <summary>
+ /// Bug #23862 Problem with CommandBuilder 'GetInsertCommand' method
+ /// </summary>
+ [Test]
+ public void AutoIncrementColumnsOnInsert()
+ {
+ execSQL("DROP TABLE IF EXISTS test");
+ execSQL("CREATE TABLE test (id INT UNSIGNED NOT NULL AUTO_INCREMENT, " +
+ "name VARCHAR(100), PRIMARY KEY(id))");
+ MySqlDataAdapter da = new MySqlDataAdapter("SELECT * FROM test", conn);
+ MySqlCommandBuilder cb = new MySqlCommandBuilder(da);
+
+ DataTable dt = new DataTable();
+ da.Fill(dt);
+ dt.Columns[0].AutoIncrement = true;
+ //Assert.IsTrue(dt.Columns[0].AutoIncrement);
+ dt.Columns[0].AutoIncrementSeed = -1;
+ dt.Columns[0].AutoIncrementStep = -1;
+ DataRow row = dt.NewRow();
+ row["name"] = "Test";
+
+ try
+ {
+ dt.Rows.Add(row);
+ da.Update(dt);
+ }
+ catch (Exception ex)
+ {
+ Assert.Fail(ex.Message);
+ }
+ dt.Clear();
+ da.Fill(dt);
+ Assert.AreEqual(1, dt.Rows.Count);
+ Assert.AreEqual(1, dt.Rows[0]["id"]);
+ Assert.AreEqual("Test", dt.Rows[0]["name"]);
+ }
}
}
Modified: branches/1.0/mysqlclient/CommandBuilder.cs
===================================================================
--- branches/1.0/mysqlclient/CommandBuilder.cs 2006-12-12 05:02:20 UTC (rev 494)
+++ branches/1.0/mysqlclient/CommandBuilder.cs 2006-12-13 16:41:57 UTC (rev 495)
@@ -466,10 +466,12 @@
{
// If the parameter has one of these properties, then we don't include it in the
insert:
- /* if ((bool) schemaRow ["IsHidden"])
- return false;
- if ((bool) schemaRow ["IsExpression"])
- return false;*/
+ if ((bool)schemaRow["IsAutoIncrement"])
+ return false;
+/* if ((bool) schemaRow ["IsHidden"])
+ return false;
+ if ((bool) schemaRow ["IsExpression"])
+ return false;*/
if ((bool)schemaRow["IsRowVersion"])
return false;
if ((bool)schemaRow["IsReadOnly"])
Modified: branches/1.0/mysqlclient/Types/MySqlUInt32.cs
===================================================================
--- branches/1.0/mysqlclient/Types/MySqlUInt32.cs 2006-12-12 05:02:20 UTC (rev 494)
+++ branches/1.0/mysqlclient/Types/MySqlUInt32.cs 2006-12-13 16:41:57 UTC (rev 495)
@@ -24,63 +24,64 @@
namespace MySql.Data.Types
{
- /// <summary>
- /// Summary description for MySqlInt32.
- /// </summary>
- internal class MySqlUInt32 : MySqlValue
- {
- private uint mValue;
+ /// <summary>
+ /// Summary description for MySqlInt32.
+ /// </summary>
+ internal class MySqlUInt32 : MySqlValue
+ {
+ private uint mValue;
- public MySqlUInt32(MySqlDbType type) : base()
- {
- mySqlDbType = type;
- }
+ public MySqlUInt32(MySqlDbType type)
+ : base()
+ {
+ mySqlDbType = type;
+ }
- internal override void Serialize(PacketWriter writer, bool binary, object value, int
length)
- {
- uint v = Convert.ToUInt32( value );
- if (binary)
- writer.Write( BitConverter.GetBytes( v ) );
- else
- writer.WriteStringNoNull( v.ToString() );
- }
+ internal override void Serialize(PacketWriter writer, bool binary, object value,
int length)
+ {
+ uint v = Convert.ToUInt32(value);
+ if (binary)
+ writer.Write(BitConverter.GetBytes(v));
+ else
+ writer.WriteStringNoNull(v.ToString());
+ }
- public uint Value
- {
- get { return mValue; }
- set { mValue = value; objectValue = value; }
- }
+ public uint Value
+ {
+ get { return mValue; }
+ set { mValue = value; objectValue = value; }
+ }
- internal override Type SystemType
- {
- get { return typeof(UInt32); }
- }
+ internal override Type SystemType
+ {
+ get { return typeof(UInt32); }
+ }
- internal override string GetMySqlTypeName()
- {
- return "INT";
- }
+ internal override string GetMySqlTypeName()
+ {
+ return "INT";
+ }
- internal override MySqlValue ReadValue( PacketReader reader, long length )
- {
- if (length == -1)
- {
- if (mySqlDbType == MySqlDbType.Int24)
- Value = (uint)reader.ReadInteger( 3 );
- else
- Value = (uint)reader.ReadLong( 4 );
- }
- else
- {
- string value = reader.ReadString( length );
- Value = UInt32.Parse( value );
- }
- return this;
- }
+ internal override MySqlValue ReadValue(PacketReader reader, long length)
+ {
+ if (length == -1)
+ {
+ if (mySqlDbType == MySqlDbType.Int24)
+ Value = (uint)reader.ReadInteger(3);
+ else
+ Value = (uint)reader.ReadLong(4);
+ }
+ else
+ {
+ string value = reader.ReadString(length);
+ Value = UInt32.Parse(value);
+ }
+ return this;
+ }
- internal override void Skip(PacketReader reader)
- {
- reader.Skip(4);
- }
- }
+ internal override void Skip(PacketReader reader)
+ {
+ reader.Skip(4);
+ }
+ }
}
| Thread |
|---|
| • Connector/NET commit: r495 - in branches/1.0: . TestSuite mysqlclient mysqlclient/Types | rburnett | 13 Dec |