I would but I am still working on getting the ant build process to
work on my machine. I am close :)
Nathan
On Nov 30, 2005, at 2:32 PM, Clinton Begin (JIRA) wrote:
[ http://issues.apache.org/jira/browse/IBATISNET-118?
page=comments#action_12358971 ]
Clinton Begin commented on IBATISNET-118:
-----------------------------------------
Hey guys, would you like me to fix this one?
CacheKey.Equals(object) override can return true when the
parameters have the same HashCode but are not equal.
---------------------------------------------------------------------
-----------------------------------------
Key: IBATISNET-118
URL: http://issues.apache.org/jira/browse/IBATISNET-118
Project: iBatis for .NET
Type: Bug
Components: DataMapper
Versions: DataMapper 1.2.1
Environment: Windows
Reporter: Thomas Tannahill
Assignee: Gilles Bayon
Fix For: DataMapper 1.3
CacheKey.Equals(object) override can return true when the
parameters have the same HashCode but are not equal. This can
cause false cache hits.
Only an issue for complex parameters.
Failing NUnit test:
---- UNIT TEST BEGIN ----
using IBatisNet.DataMapper;
using IBatisNet.DataMapper.TypeHandlers;
using NUnit.Framework;
namespace IBatisNet.DataAccess
{
[TestFixture]
public class CacheKeyTests
{
private const long A_LONG = 1L;
private const long ANOTHER_LONG_WITH_SAME_HASHCODE =
-9223372034707292159;
public CacheKeyTests()
{
}
[Test]
public void
ShouldNotBeConsideredEqualWhenParametersHaveTheSameHashCodeButAreNotE
qual()
{
TypeHandlerFactory factory = new TypeHandlerFactory();
// Two cache keys are equal except for the parameter.
CacheKey key = new CacheKey(factory, "STATEMENT", "SQL", new
TestClass(A_LONG), new string[] {"AProperty"}, 0, 0,
CacheKeyType.Object);
CacheKey aDifferentKey = new CacheKey(factory, "STATEMENT",
"SQL", new TestClass(ANOTHER_LONG_WITH_SAME_HASHCODE), new string
[] {"AProperty"}, 0, 0, CacheKeyType.Object);
Assert.IsFalse(aDifferentKey.Equals(key)); // should
not be equal.
}
}
public class TestClass
{
private long aProperty;
public TestClass(long aProperty)
{
this.aProperty = aProperty;
}
public long AProperty
{
get { return aProperty; }
set { aProperty = value; }
}
}
}
---- UNIT TEST END ----
The test passes if you replace this line in CacheKey.Equals():
if (_hashCode != cacheKey._hashCode) return false;
with something like this:
if (this._parameter == null && cacheKey._parameter !
= null) return false;
if (this._parameter != null && cacheKey._parameter
== null) return false;
if (!this._parameter.Equals(cacheKey._parameter))
return false;
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the
administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira