Author: gbayon
Date: Wed Oct 12 11:25:56 2005
New Revision: 314989

URL: http://svn.apache.org/viewcvs?rev=314989&view=rev
Log:
- Fixed IBATISNET-118 CacheKey.Equals(object) override can return true when the 
parameters have the same HashCode but are not equal

Added:
    
ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/NUnit/SqlMapTests/CacheKeyTest.cs
Modified:
    ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/Objects/ObjectProbe.cs
    
ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/IBatisNet.DataMapper.Test.csproj
    ibatis/trunk/cs/mapper/IBatisNet.DataMapper/CacheKey.cs
    
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/TypeHandlerFactory.cs

Modified: 
ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/Objects/ObjectProbe.cs
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/Objects/ObjectProbe.cs?rev=314989&r1=314988&r2=314989&view=diff
==============================================================================
--- ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/Objects/ObjectProbe.cs 
(original)
+++ ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/Objects/ObjectProbe.cs 
Wed Oct 12 11:25:56 2005
@@ -680,6 +680,7 @@
                                        if (IsSimpleType(value.GetType())) 
                                        {
                                                hashcode += value.GetHashCode();
+                                               hashcode += 
value.ToString().GetHashCode();
                                        } 
                                        else 
                                        {

Modified: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/IBatisNet.DataMapper.Test.csproj
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/IBatisNet.DataMapper.Test.csproj?rev=314989&r1=314988&r2=314989&view=diff
==============================================================================
--- 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/IBatisNet.DataMapper.Test.csproj
 (original)
+++ 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/IBatisNet.DataMapper.Test.csproj
 Wed Oct 12 11:25:56 2005
@@ -697,6 +697,11 @@
                     BuildAction = "Compile"
                 />
                 <File
+                    RelPath = "NUnit\SqlMapTests\CacheKeyTest.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
                     RelPath = "NUnit\SqlMapTests\CacheTest.cs"
                     SubType = "Code"
                     BuildAction = "Compile"

Added: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/NUnit/SqlMapTests/CacheKeyTest.cs
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/NUnit/SqlMapTests/CacheKeyTest.cs?rev=314989&view=auto
==============================================================================
--- 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/NUnit/SqlMapTests/CacheKeyTest.cs
 (added)
+++ 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/NUnit/SqlMapTests/CacheKeyTest.cs
 Wed Oct 12 11:25:56 2005
@@ -0,0 +1,46 @@
+using IBatisNet.DataMapper;
+using IBatisNet.DataMapper.TypeHandlers;
+using NUnit.Framework;
+
+
+namespace IBatisNet.DataMapper.Test.NUnit.SqlMapTests
+{
+       /// <summary>
+       /// Summary description for CacheKeyTest.
+       /// </summary>
+       [TestFixture]
+       public class CacheKeyTest
+       {
+               private const long A_LONG = 1L;
+               private const long ANOTHER_LONG_WITH_SAME_HASHCODE = 
-9223372034707292159;
+
+               [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.
+               }
+
+               private class TestClass
+               {
+                       private long _property = long.MinValue;
+
+                       public TestClass(long aProperty)
+                       {
+                               _property = aProperty;
+                       }
+
+                       public long AProperty
+                       {
+                               get { return _property; }
+                               set { _property = value; }
+                       }
+               }
+
+       }
+}

Modified: ibatis/trunk/cs/mapper/IBatisNet.DataMapper/CacheKey.cs
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/CacheKey.cs?rev=314989&r1=314988&r2=314989&view=diff
==============================================================================
--- ibatis/trunk/cs/mapper/IBatisNet.DataMapper/CacheKey.cs (original)
+++ ibatis/trunk/cs/mapper/IBatisNet.DataMapper/CacheKey.cs Wed Oct 12 11:25:56 
2005
@@ -40,7 +40,7 @@
        /// Summary description for FlushInterval.
        /// </summary>
        [Serializable]
-       internal class CacheKey
+       public class CacheKey
        {
                #region Fields
                private string[] _properties = null;
@@ -67,7 +67,7 @@
                /// <param name="maxResults"></param>
                /// <param name="type"></param>
                /// <param name="typeHandlerFactory"></param>
-               internal CacheKey(TypeHandlerFactory typeHandlerFactory, string 
statementName, string sql, object parameter, string[] properties, 
+               public CacheKey(TypeHandlerFactory typeHandlerFactory, string 
statementName, string sql, object parameter, string[] properties, 
                        int skipRecords, int maxResults, CacheKeyType type)
                {
                        _typeHandlerFactory = typeHandlerFactory;
@@ -81,10 +81,6 @@
                        _hashCode = GenerateHashCode();
                        _hashCodeString = Convert.ToString(_hashCode);
                }
-
-
-               // name.GetHashCode() ^  age.GetHashCode(); 
-               // hash algorithms 
 
 
                /// <summary>

Modified: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/TypeHandlerFactory.cs
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/TypeHandlerFactory.cs?rev=314989&r1=314988&r2=314989&view=diff
==============================================================================
--- 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/TypeHandlerFactory.cs 
(original)
+++ 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/TypeHandlerFactory.cs 
Wed Oct 12 11:25:56 2005
@@ -36,7 +36,7 @@
        /// <summary>
        /// Not much of a suprise, this is a factory class for TypeHandler 
objects.
        /// </summary>
-       internal class TypeHandlerFactory
+       public class TypeHandlerFactory
        {
 
                #region Fields


Reply via email to