You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by bl...@apache.org on 2015/09/11 11:19:34 UTC

cassandra git commit: Make aggregates work with reversed types

Repository: cassandra
Updated Branches:
  refs/heads/cassandra-2.2 a64bcfd73 -> c12abfb69


Make aggregates work with reversed types

patch by Carl Yeksigian; reviewed by Benjamin Lerer for CASSANDRA-10296


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

Branch: refs/heads/cassandra-2.2
Commit: c12abfb697dabd249c37b578bde675c0f52d4e34
Parents: a64bcfd
Author: Carl Yeksigian <ca...@apache.org>
Authored: Fri Sep 11 11:18:23 2015 +0200
Committer: blerer <be...@datastax.com>
Committed: Fri Sep 11 11:18:23 2015 +0200

----------------------------------------------------------------------
 .../apache/cassandra/cql3/selection/Selector.java    |  4 ++++
 .../apache/cassandra/db/marshal/AbstractType.java    |  5 +++++
 .../apache/cassandra/db/marshal/ReversedType.java    |  6 ++++++
 .../cassandra/cql3/validation/entities/UFTest.java   | 15 +++++++++++++++
 .../cql3/validation/operations/AggregationTest.java  | 12 ++++++++++++
 5 files changed, 42 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/c12abfb6/src/java/org/apache/cassandra/cql3/selection/Selector.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/selection/Selector.java b/src/java/org/apache/cassandra/cql3/selection/Selector.java
index d53fba1..1bddcc8 100644
--- a/src/java/org/apache/cassandra/cql3/selection/Selector.java
+++ b/src/java/org/apache/cassandra/cql3/selection/Selector.java
@@ -27,6 +27,7 @@ import org.apache.cassandra.cql3.ColumnSpecification;
 import org.apache.cassandra.cql3.functions.Function;
 import org.apache.cassandra.cql3.selection.Selection.ResultSetBuilder;
 import org.apache.cassandra.db.marshal.AbstractType;
+import org.apache.cassandra.db.marshal.ReversedType;
 import org.apache.cassandra.exceptions.InvalidRequestException;
 
 /**
@@ -180,6 +181,9 @@ public abstract class Selector implements AssignmentTestable
         if (getType().isFrozenCollection())
             receiverType = receiverType.freeze();
 
+        if (getType().isReversed())
+            receiverType = ReversedType.getInstance(receiverType);
+
         if (receiverType.equals(getType()))
             return AssignmentTestable.TestResult.EXACT_MATCH;
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/c12abfb6/src/java/org/apache/cassandra/db/marshal/AbstractType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/AbstractType.java b/src/java/org/apache/cassandra/db/marshal/AbstractType.java
index aa25a81..ab05642 100644
--- a/src/java/org/apache/cassandra/db/marshal/AbstractType.java
+++ b/src/java/org/apache/cassandra/db/marshal/AbstractType.java
@@ -155,6 +155,11 @@ public abstract class AbstractType<T> implements Comparator<ByteBuffer>
         return isCollection() && !isMultiCell();
     }
 
+    public boolean isReversed()
+    {
+        return false;
+    }
+
     public static AbstractType<?> parseDefaultParameters(AbstractType<?> baseType, TypeParser parser) throws SyntaxException
     {
         Map<String, String> parameters = parser.getKeyValueParameters();

http://git-wip-us.apache.org/repos/asf/cassandra/blob/c12abfb6/src/java/org/apache/cassandra/db/marshal/ReversedType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/ReversedType.java b/src/java/org/apache/cassandra/db/marshal/ReversedType.java
index 2181f74..2aea3cd 100644
--- a/src/java/org/apache/cassandra/db/marshal/ReversedType.java
+++ b/src/java/org/apache/cassandra/db/marshal/ReversedType.java
@@ -129,6 +129,12 @@ public class ReversedType<T> extends AbstractType<T>
     }
 
     @Override
+    public boolean isReversed()
+    {
+        return true;
+    }
+
+    @Override
     public String toString()
     {
         return getClass().getName() + "(" + baseType + ")";

http://git-wip-us.apache.org/repos/asf/cassandra/blob/c12abfb6/test/unit/org/apache/cassandra/cql3/validation/entities/UFTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/UFTest.java b/test/unit/org/apache/cassandra/cql3/validation/entities/UFTest.java
index 2e7c2f1..673ccc3 100644
--- a/test/unit/org/apache/cassandra/cql3/validation/entities/UFTest.java
+++ b/test/unit/org/apache/cassandra/cql3/validation/entities/UFTest.java
@@ -429,6 +429,21 @@ public class UFTest extends CQLTester
     }
 
     @Test
+    public void testFunctionExecutionWithReversedTypeAsOutput() throws Throwable
+    {
+        createTable("CREATE TABLE %s (k int, v text, PRIMARY KEY(k, v)) WITH CLUSTERING ORDER BY (v DESC)");
+
+        String fRepeat = createFunction(KEYSPACE_PER_TEST, "text",
+                                        "CREATE FUNCTION %s(v text) " +
+                                        "RETURNS NULL ON NULL INPUT " +
+                                        "RETURNS text " +
+                                        "LANGUAGE java " +
+                                        "AS 'return v + v;'");
+
+        execute("INSERT INTO %s(k, v) VALUES (?, " + fRepeat + "(?))", 1, "a");
+    }
+
+    @Test
     public void testFunctionOverloading() throws Throwable
     {
         createTable("CREATE TABLE %s (k text PRIMARY KEY, v int)");

http://git-wip-us.apache.org/repos/asf/cassandra/blob/c12abfb6/test/unit/org/apache/cassandra/cql3/validation/operations/AggregationTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/validation/operations/AggregationTest.java b/test/unit/org/apache/cassandra/cql3/validation/operations/AggregationTest.java
index b44fc71..b2ecd04 100644
--- a/test/unit/org/apache/cassandra/cql3/validation/operations/AggregationTest.java
+++ b/test/unit/org/apache/cassandra/cql3/validation/operations/AggregationTest.java
@@ -276,6 +276,18 @@ public class AggregationTest extends CQLTester
     }
 
     @Test
+    public void testReversedType() throws Throwable
+    {
+        createTable("CREATE TABLE %s (a int, b int, c int, primary key (a, b)) WITH CLUSTERING ORDER BY (b DESC)");
+        execute("INSERT INTO %s (a, b, c) VALUES (1, 1, 10)");
+        execute("INSERT INTO %s (a, b, c) VALUES (1, 2, 9)");
+        execute("INSERT INTO %s (a, b, c) VALUES (1, 3, 8)");
+        execute("INSERT INTO %s (a, b, c) VALUES (1, 4, 7)");
+
+        assertRows(execute("SELECT max(c), min(c), avg(c) FROM %s WHERE a = 1 AND b > 1"), row(9, 7, 8));
+    }
+
+    @Test
     public void testNestedFunctions() throws Throwable
     {
         createTable("CREATE TABLE %s (a int primary key, b timeuuid, c double, d double)");