List:Commits« Previous MessageNext Message »
From:rburnett Date:October 3 2006 5:40pm
Subject:Connector/NET commit: r392 - in trunk: . TestSuite mysqlclient
View as plain text  
Modified:
   trunk/CHANGES
   trunk/TestSuite/ParameterTests.cs
   trunk/mysqlclient/parameter_collection.cs
Log:
now using hashes to speed up parameter retrieval by index

Modified: trunk/CHANGES
===================================================================
--- trunk/CHANGES	2006-10-03 17:38:00 UTC (rev 391)
+++ trunk/CHANGES	2006-10-03 17:40:25 UTC (rev 392)
@@ -1,3 +1,13 @@
+Version 5.0.2 (unreleased)
+
+    Bugs fixed
+    ----------
+	
+    Other changes
+    -------------
+    Increased speed of MySqlParameterCollection.IndexOf(string) orders of magnitude
+    (parameter name lookups are now strict on use of parameter marker)
+
 Version 5.0.1 (Beta)
 
     Bugs fixed

Modified: trunk/TestSuite/ParameterTests.cs
===================================================================
--- trunk/TestSuite/ParameterTests.cs	2006-10-03 17:38:00 UTC (rev 391)
+++ trunk/TestSuite/ParameterTests.cs	2006-10-03 17:40:25 UTC (rev 392)
@@ -346,7 +346,7 @@
 
 			MySqlDataAdapter da = new MySqlDataAdapter("SELECT * FROM test", conn);
 			MySqlCommand c = new MySqlCommand("INSERT INTO test (foo) values (?foo)", conn);
-			c.Parameters.Add("foo", MySqlDbType.Int32, 0, "foo");
+			c.Parameters.Add("?foo", MySqlDbType.Int32, 0, "foo");
 
 			da.InsertCommand = c;
 			DataTable dt = new DataTable();

Modified: trunk/mysqlclient/parameter_collection.cs
===================================================================
--- trunk/mysqlclient/parameter_collection.cs	2006-10-03 17:38:00 UTC (rev 391)
+++ trunk/mysqlclient/parameter_collection.cs	2006-10-03 17:40:25 UTC (rev 392)
@@ -38,8 +38,20 @@
 	{
 		private ArrayList items = new ArrayList();
 		private char paramMarker = '?';
-        //private bool changed;
+    private Hashtable ciHash;
+    private Hashtable hash;
 
+    public MySqlParameterCollection()
+    {
+      hash = new Hashtable();
+#if NET20
+      ciHash = new Hashtable(StringComparer.CurrentCultureIgnoreCase);
+#else
+      ciHash = new Hashtable(new CaseInsensitiveHashCodeProvider(),
+        new CaseInsensitiveComparer());
+#endif
+    }
+
 		internal char ParameterMarker 
 		{
 			get { return paramMarker; }
@@ -108,8 +120,10 @@
 				}
 			}
 
-			items.Add(value);
-			return value;
+			int index = items.Add(value);
+      hash.Add(value.ParameterName, index);
+      ciHash.Add(value.ParameterName, index); 
+      return value;
 		}
 
         private MySqlParameter AddReturnParameter(MySqlParameter value)
@@ -242,6 +256,8 @@
         public override void Clear()
         {
             items.Clear();
+            hash.Clear();
+            ciHash.Clear();
         }
 
         /// <summary>
@@ -295,18 +311,12 @@
         /// <returns>The zero-based location of the <see cref="MySqlParameter"/> in the collection.</returns>
         public override int IndexOf(string parameterName)
         {
-            if (parameterName[0] == paramMarker)
-                parameterName = parameterName.Substring(1, parameterName.Length - 1);
-            parameterName = parameterName.ToLower();
-            for (int x = 0; x < items.Count; x++)
-            {
-                MySqlParameter p = (MySqlParameter)items[x];
-                string listName = p.ParameterName;
-                if (listName[0] == paramMarker)
-                    listName = listName.Substring(1, listName.Length - 1);
-                if (listName.ToLower() == parameterName) return x;
-            }
+          object o = hash[parameterName];
+          if (o == null)
+            o = ciHash[parameterName];
+          if (o == null)
             return -1;
+          return (int)o;
         }
 
         /// <summary>

Thread
Connector/NET commit: r392 - in trunk: . TestSuite mysqlclientrburnett3 Oct