List:Commits« Previous MessageNext Message »
From:rburnett Date:December 13 2006 5:41pm
Subject:Connector/NET commit: r495 - in branches/1.0: . TestSuite mysqlclient mysqlclient/Types
View as plain text  
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/Typesrburnett13 Dec