List:Commits« Previous MessageNext Message »
From:rburnett Date:September 26 2006 6:14pm
Subject:Connector/NET commit: r357 - in branches/1.0: . TestSuite mysqlclient
View as plain text  
Modified:
   branches/1.0/CHANGES
   branches/1.0/TestSuite/CharacterSetTests.cs
   branches/1.0/TestSuite/DataReaderTests.cs
   branches/1.0/mysqlclient/Field.cs
   branches/1.0/mysqlclient/datareader.cs
Log:
Bug #14592 Wrong column length returned for VARCHAR UTF8 columns 

Fixed this by using the max byte count from the encoding when calculating max length for text fields.

Modified: branches/1.0/CHANGES
===================================================================
--- branches/1.0/CHANGES	2006-09-26 15:02:01 UTC (rev 356)
+++ branches/1.0/CHANGES	2006-09-26 16:14:50 UTC (rev 357)
@@ -29,6 +29,8 @@
 	Bug #21521 # Symbols not allowed in column/table names.    
 	Bug #16884 Invalid DateTime Values from DataReader     
 	Bug #7248  There is already an open DataReader associated with this Connection which must 
+	Bug #11991 ExecuteScalar 	
+	Bug #14592 Wrong column length returned for VARCHAR UTF8 columns 	
 	
 x-xx-05 - Version 1.0.7
 

Modified: branches/1.0/TestSuite/CharacterSetTests.cs
===================================================================
--- branches/1.0/TestSuite/CharacterSetTests.cs	2006-09-26 15:02:01 UTC (rev 356)
+++ branches/1.0/TestSuite/CharacterSetTests.cs	2006-09-26 16:14:50 UTC (rev 357)
@@ -123,5 +123,37 @@
 			Assert.AreEqual("€ŤŽš", name);
 			c.Close();
 		}
+
+        /// <summary>
+        /// Bug #14592 Wrong column length returned for VARCHAR UTF8 columns 
+        /// </summary>
+        [Test]
+        public void GetSchemaOnUTF8()
+        {
+            execSQL("DROP TABLE IF EXISTS test");
+            execSQL("CREATE TABLE test(name VARCHAR(40) NOT NULL, name2 VARCHAR(20)) " +
+                "CHARACTER SET utf8");
+            execSQL("INSERT INTO test VALUES('Test', 'Test')");
+
+            MySqlDataReader reader = null;
+
+            try
+            {
+                MySqlCommand cmd = new MySqlCommand("SELECT * FROM test", conn);
+                reader = cmd.ExecuteReader();
+                DataTable dt = reader.GetSchemaTable();
+                Assert.AreEqual(40, dt.Rows[0]["ColumnSize"]);
+                Assert.AreEqual(20, dt.Rows[1]["ColumnSize"]);
+            }
+            catch (Exception ex)
+            {
+                Assert.Fail(ex.Message);
+            }
+            finally
+            {
+                if (reader != null) reader.Close();
+            }
+        }
+
 	}
 }

Modified: branches/1.0/TestSuite/DataReaderTests.cs
===================================================================
--- branches/1.0/TestSuite/DataReaderTests.cs	2006-09-26 15:02:01 UTC (rev 356)
+++ branches/1.0/TestSuite/DataReaderTests.cs	2006-09-26 16:14:50 UTC (rev 357)
@@ -201,41 +201,42 @@
 			reader.Close();
 		}
 
-		[Test]
-		public void GetSchema() 
-		{
-			string sql = "CREATE TABLE test2( " +
-				"id INT UNSIGNED AUTO_INCREMENT NOT NULL, " +
-				"name VARCHAR(255) NOT NULL, " + 
-				"PRIMARY KEY( id ))";
+        [Test]
+        public void GetSchema()
+        {
+            string sql = "CREATE TABLE test2(id INT UNSIGNED AUTO_INCREMENT " +
+                "NOT NULL, name VARCHAR(255) NOT NULL, name2 VARCHAR(40), fl FLOAT, " +
+                "dt DATETIME, PRIMARY KEY(id))";
 
-			execSQL("DROP TABLE IF EXISTS test2");
-			execSQL(sql);
-			execSQL("INSERT INTO test2 VALUES(1,'Test')");
+            execSQL("DROP TABLE IF EXISTS test2");
+            execSQL(sql);
+            execSQL("INSERT INTO test2 VALUES(1,'Test', 'Test', 1.0, now())");
 
-			MySqlDataReader reader = null;
+            MySqlDataReader reader = null;
 
-			try 
-			{
-				MySqlCommand cmd = new MySqlCommand("SELECT * FROM test2", conn);
-				reader = cmd.ExecuteReader();
-				DataTable dt = reader.GetSchemaTable();
-				Assert.AreEqual( true, dt.Rows[0]["IsAutoIncrement"], "Checking auto increment" );
-				Assert.AreEqual( true, dt.Rows[0]["IsUnique"], "Checking IsUnique" );
-				Assert.AreEqual( false, dt.Rows[0]["AllowDBNull"], "Checking AllowDBNull" );
-				Assert.AreEqual( false, dt.Rows[1]["AllowDBNull"], "Checking AllowDBNull" );
-			}
-			catch (Exception ex) 
-			{
-				Assert.Fail(ex.Message);
-			}
-			finally 
-			{
-				if (reader != null) reader.Close();
-			}
+            try
+            {
+                MySqlCommand cmd = new MySqlCommand("SELECT * FROM test2", conn);
+                reader = cmd.ExecuteReader();
+                DataTable dt = reader.GetSchemaTable();
+                Assert.AreEqual(true, dt.Rows[0]["IsAutoIncrement"], "Checking auto increment");
+                Assert.AreEqual(true, dt.Rows[0]["IsUnique"], "Checking IsUnique");
+                Assert.AreEqual(false, dt.Rows[0]["AllowDBNull"], "Checking AllowDBNull");
+                Assert.AreEqual(false, dt.Rows[1]["AllowDBNull"], "Checking AllowDBNull");
+                Assert.AreEqual(255, dt.Rows[1]["ColumnSize"]);
+                Assert.AreEqual(40, dt.Rows[2]["ColumnSize"]);
+            }
+            catch (Exception ex)
+            {
+                Assert.Fail(ex.Message);
+            }
+            finally
+            {
+                if (reader != null) reader.Close();
+            }
 
-			execSQL("DROP TABLE IF EXISTS test2");
-		}
+            execSQL("DROP TABLE IF EXISTS test2");
+        }
 
 		[Test]
 		public void CloseConnectionBehavior() 

Modified: branches/1.0/mysqlclient/Field.cs
===================================================================
--- branches/1.0/mysqlclient/Field.cs	2006-09-26 15:02:01 UTC (rev 356)
+++ branches/1.0/mysqlclient/Field.cs	2006-09-26 16:14:50 UTC (rev 357)
@@ -149,6 +149,18 @@
 			get { return (colFlags & ColumnFlags.UNSIGNED) > 0; }
 		}
 
+        public bool IsTextField
+        {
+            get
+            {
+                return Type == MySqlDbType.VarString || Type == MySqlDbType.VarChar ||
+                    ((Type == MySqlDbType.TinyBlob || Type == MySqlDbType.MediumBlob ||
+                      Type == MySqlDbType.Blob || Type == MySqlDbType.LongBlob) &&
+                      !IsBinary);
+            }
+
+        }
+
 #endregion
 
 		public MySqlDbType ProviderType()

Modified: branches/1.0/mysqlclient/datareader.cs
===================================================================
--- branches/1.0/mysqlclient/datareader.cs	2006-09-26 15:02:01 UTC (rev 356)
+++ branches/1.0/mysqlclient/datareader.cs	2006-09-26 16:14:50 UTC (rev 357)
@@ -504,7 +504,8 @@
 				DataRow r = dataTableSchema.NewRow();
 				r["ColumnName"] = f.ColumnName;
 				r["ColumnOrdinal"] = ord++;
-				r["ColumnSize"] = f.ColumnLength;
+                int maxByteCount = f.Encoding.GetMaxByteCount(1) >> 1;
+                r["ColumnSize"] = f.IsTextField ? f.ColumnLength / maxByteCount : f.ColumnLength;
 				int prec = f.Precision;
 				int pscale = f.Scale;
 				if (prec != -1)

Thread
Connector/NET commit: r357 - in branches/1.0: . TestSuite mysqlclientrburnett26 Sep