Repository: cassandra
Updated Branches:
  refs/heads/cassandra-2.2 bf0328f48 -> af1c65843
  refs/heads/trunk 8c22b4a81 -> 0c59c1f5b


hashCode in UDFunction broken

patch by Robert Stupp; reviewed by Aleksey Yeschenko for CASSANDRA-9750


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/af1c6584
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/af1c6584
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/af1c6584

Branch: refs/heads/cassandra-2.2
Commit: af1c65843efbcbd14ab8e1fefda7ec8650e71074
Parents: bf0328f
Author: Robert Stupp <sn...@snazy.de>
Authored: Thu Jul 9 23:27:31 2015 +0700
Committer: Robert Stupp <sn...@snazy.de>
Committed: Thu Jul 9 23:27:31 2015 +0700

----------------------------------------------------------------------
 .../org/apache/cassandra/cql3/functions/Functions.java | 13 +++++++++++++
 .../apache/cassandra/cql3/functions/UDAggregate.java   |  2 +-
 .../apache/cassandra/cql3/functions/UDFunction.java    |  2 +-
 3 files changed, 15 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/af1c6584/src/java/org/apache/cassandra/cql3/functions/Functions.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/functions/Functions.java 
b/src/java/org/apache/cassandra/cql3/functions/Functions.java
index 018c35c..85f2817 100644
--- a/src/java/org/apache/cassandra/cql3/functions/Functions.java
+++ b/src/java/org/apache/cassandra/cql3/functions/Functions.java
@@ -375,6 +375,19 @@ public abstract class Functions
         return true;
     }
 
+    public static int typeHashCode(AbstractType<?> t)
+    {
+        return t.asCQL3Type().toString().hashCode();
+    }
+
+    public static int typeHashCode(List<AbstractType<?>> types)
+    {
+        int h = 0;
+        for (AbstractType<?> type : types)
+            h = h * 31 + typeHashCode(type);
+        return h;
+    }
+
     private static class FunctionsMigrationListener extends MigrationListener
     {
         public void onUpdateUserType(String ksName, String typeName) {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/af1c6584/src/java/org/apache/cassandra/cql3/functions/UDAggregate.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/functions/UDAggregate.java 
b/src/java/org/apache/cassandra/cql3/functions/UDAggregate.java
index f153aed..c9fbbaa 100644
--- a/src/java/org/apache/cassandra/cql3/functions/UDAggregate.java
+++ b/src/java/org/apache/cassandra/cql3/functions/UDAggregate.java
@@ -210,6 +210,6 @@ public class UDAggregate extends AbstractFunction 
implements AggregateFunction
     @Override
     public int hashCode()
     {
-        return Objects.hashCode(name, argTypes, returnType, stateFunction, 
finalFunction, stateType, initcond);
+        return Objects.hashCode(name, Functions.typeHashCode(argTypes), 
Functions.typeHashCode(returnType), stateFunction, finalFunction, stateType, 
initcond);
     }
 }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/af1c6584/src/java/org/apache/cassandra/cql3/functions/UDFunction.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/functions/UDFunction.java 
b/src/java/org/apache/cassandra/cql3/functions/UDFunction.java
index aa6d555..ab92232 100644
--- a/src/java/org/apache/cassandra/cql3/functions/UDFunction.java
+++ b/src/java/org/apache/cassandra/cql3/functions/UDFunction.java
@@ -276,7 +276,7 @@ public abstract class UDFunction extends AbstractFunction 
implements ScalarFunct
     @Override
     public int hashCode()
     {
-        return Objects.hashCode(name, argNames, argTypes, returnType, 
language, body);
+        return Objects.hashCode(name, Functions.typeHashCode(argTypes), 
Functions.typeHashCode(returnType), returnType, language, body);
     }
 
     public void userTypeUpdated(String ksName, String typeName)

Reply via email to