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 2016/02/20 11:04:58 UTC
[3/6] cassandra git commit: Replacing an aggregate with a new version
doesn't reset INITCOND
Replacing an aggregate with a new version doesn't reset INITCOND
patch by Robert Stupp; reviewed by Benjamin Lerer for CASSANDRA-10840
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/61ac125a
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/61ac125a
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/61ac125a
Branch: refs/heads/trunk
Commit: 61ac125a4d493ea6707fab6e3e61d6a41526eb34
Parents: 4985fcc
Author: Robert Stupp <sn...@snazy.de>
Authored: Sat Feb 20 10:59:54 2016 +0100
Committer: Robert Stupp <sn...@snazy.de>
Committed: Sat Feb 20 10:59:54 2016 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cassandra/schema/LegacySchemaTables.java | 9 +--
.../validation/operations/AggregationTest.java | 59 +++++++++++++++++++-
3 files changed, 61 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/61ac125a/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index d3dcdbc..9d0046b 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
2.2.6
+ * Replacing an aggregate with a new version doesn't reset INITCOND (CASSANDRA-10840)
* (cqlsh) cqlsh cannot be called through symlink (CASSANDRA-11037)
* fix ohc and java-driver pom dependencies in build.xml (CASSANDRA-10793)
* Protect from keyspace dropped during repair (CASSANDRA-11065)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/61ac125a/src/java/org/apache/cassandra/schema/LegacySchemaTables.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/schema/LegacySchemaTables.java b/src/java/org/apache/cassandra/schema/LegacySchemaTables.java
index 5eae60b..0ef9852 100644
--- a/src/java/org/apache/cassandra/schema/LegacySchemaTables.java
+++ b/src/java/org/apache/cassandra/schema/LegacySchemaTables.java
@@ -1394,12 +1394,9 @@ public class LegacySchemaTables
adder.resetCollection("argument_types");
adder.add("return_type", aggregate.returnType().toString());
adder.add("state_func", aggregate.stateFunction().name().name);
- if (aggregate.stateType() != null)
- adder.add("state_type", aggregate.stateType().toString());
- if (aggregate.finalFunction() != null)
- adder.add("final_func", aggregate.finalFunction().name().name);
- if (aggregate.initialCondition() != null)
- adder.add("initcond", aggregate.initialCondition());
+ adder.add("state_type", aggregate.stateType().toString());
+ adder.add("final_func", aggregate.finalFunction() != null ? aggregate.finalFunction().name().name : null);
+ adder.add("initcond", aggregate.initialCondition() != null ? aggregate.initialCondition() : null);
for (AbstractType<?> argType : aggregate.argTypes())
adder.addListEntry("argument_types", argType.toString());
http://git-wip-us.apache.org/repos/asf/cassandra/blob/61ac125a/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 0e0313c..e7f47a2 100644
--- a/test/unit/org/apache/cassandra/cql3/validation/operations/AggregationTest.java
+++ b/test/unit/org/apache/cassandra/cql3/validation/operations/AggregationTest.java
@@ -18,6 +18,7 @@
package org.apache.cassandra.cql3.validation.operations;
import java.math.BigDecimal;
+import java.nio.ByteBuffer;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
@@ -37,7 +38,6 @@ import org.apache.cassandra.db.SystemKeyspace;
import org.apache.cassandra.exceptions.FunctionExecutionException;
import org.apache.cassandra.exceptions.InvalidRequestException;
import org.apache.cassandra.service.ClientState;
-import org.apache.cassandra.service.StorageService;
import org.apache.cassandra.transport.Event;
import org.apache.cassandra.transport.messages.ResultMessage;
@@ -387,7 +387,7 @@ public class AggregationTest extends CQLTester
assertRows(execute("SELECT " + copySign + "(c, d) FROM %s"), row(1.2), row(-1.3), row(1.4));
assertRows(execute("SELECT max(" + copySign + "(c, d)) FROM %s"), row(1.4));
assertRows(execute("SELECT " + copySign + "(c, max(c)) FROM %s"), row(1.2));
- assertRows(execute("SELECT " + copySign + "(max(c), c) FROM %s"), row(-1.4));;
+ assertRows(execute("SELECT " + copySign + "(max(c), c) FROM %s"), row(-1.4));
}
@Test
@@ -1684,4 +1684,59 @@ public class AggregationTest extends CQLTester
assertRows(execute("SELECT " + aRNON + "(b) FROM %s"), row("fin"));
}
+
+ @Test
+ public void testOrReplaceOptionals() throws Throwable
+ {
+ String fState = createFunction(KEYSPACE,
+ "list<text>, int",
+ "CREATE FUNCTION %s(s list<text>, i int) " +
+ "CALLED ON NULL INPUT " +
+ "RETURNS list<text> " +
+ "LANGUAGE java " +
+ "AS 'if (i != null) s.add(String.valueOf(i)); return s;'");
+
+ String fFinal = shortFunctionName(createFunction(KEYSPACE,
+ "list<text>",
+ "CREATE FUNCTION %s(s list<text>) " +
+ "CALLED ON NULL INPUT " +
+ "RETURNS list<text> " +
+ "LANGUAGE java " +
+ "AS 'return s;'"));
+
+ String a = createAggregate(KEYSPACE,
+ "int",
+ "CREATE AGGREGATE %s(int) " +
+ "SFUNC " + shortFunctionName(fState) + ' ' +
+ "STYPE list<text> ");
+
+ checkOptionals(a, null, null);
+
+ String ddlPrefix = "CREATE OR REPLACE AGGREGATE " + a + "(int) " +
+ "SFUNC " + shortFunctionName(fState) + ' ' +
+ "STYPE list<text> ";
+
+ // Test replacing INITCOND
+ for (String condition : new String[]{"", "INITCOND null"})
+ {
+ execute(ddlPrefix + "INITCOND [ ] ");
+ checkOptionals(a, null, ByteBuffer.allocate(4));
+
+ execute(ddlPrefix + condition);
+ checkOptionals(a, null, null);
+ }
+
+ // Test replacing FINALFUNC
+ execute(ddlPrefix + "FINALFUNC " + shortFunctionName(fFinal) + " ");
+ checkOptionals(a, shortFunctionName(fFinal), null);
+
+ execute(ddlPrefix);
+ checkOptionals(a, null, null);
+ }
+
+ private void checkOptionals(String aggregateName, String finalFunc, ByteBuffer initCond) throws Throwable
+ {
+ assertRows(execute("SELECT final_func, initcond FROM system.schema_aggregates WHERE keyspace_name=? AND aggregate_name=?", KEYSPACE, shortFunctionName(aggregateName)),
+ row(finalFunc, initCond));
+ }
}