You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sn...@apache.org on 2015/07/09 18:30:59 UTC

[2/3] cassandra git commit: hashCode in UDFunction broken

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/trunk
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)