You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ibatis.apache.org by "Clinton Begin (JIRA)" <ib...@incubator.apache.org> on 2005/11/30 22:32:31 UTC
[jira] Commented: (IBATISNET-118) CacheKey.Equals(object) override can return true when the parameters have the same HashCode but are not equal.
[ 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 ShouldNotBeConsideredEqualWhenParametersHaveTheSameHashCodeButAreNotEqual()
> {
> 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
Re: [jira] Commented: (IBATISNET-118) CacheKey.Equals(object) override
can return true when the parameters have the same HashCode but are not equal.
Posted by Nathan Maves <Na...@Sun.COM>.
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
>