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 mysqlclient | rburnett | 3 Oct |