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)");