Generic Java UDF types broken for RETURNS NULL ON NULL INPUT patch by Robert Stupp; reviewed by Tyler Hobbs for CASSANDRA-11309
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/902877a6 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/902877a6 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/902877a6 Branch: refs/heads/trunk Commit: 902877a652267872358c02080ccf5b5f8e93d60a Parents: 04e7723 Author: Robert Stupp <[email protected]> Authored: Thu May 12 12:04:28 2016 +0100 Committer: Robert Stupp <[email protected]> Committed: Thu May 12 12:04:28 2016 +0100 ---------------------------------------------------------------------- .../apache/cassandra/cql3/functions/UDHelper.java | 15 +++++++-------- .../cql3/validation/entities/UFTest.java | 18 +++++++++++++++++- 2 files changed, 24 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/902877a6/src/java/org/apache/cassandra/cql3/functions/UDHelper.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/functions/UDHelper.java b/src/java/org/apache/cassandra/cql3/functions/UDHelper.java index 9f322e5..86cb89d 100644 --- a/src/java/org/apache/cassandra/cql3/functions/UDHelper.java +++ b/src/java/org/apache/cassandra/cql3/functions/UDHelper.java @@ -89,20 +89,19 @@ public final class UDHelper // only care about classes that can be used in a data type Class<?> clazz = typeToken.getRawType(); if (clazz == Integer.class) - clazz = int.class; + typeToken = TypeToken.of(int.class); else if (clazz == Long.class) - clazz = long.class; + typeToken = TypeToken.of(long.class); else if (clazz == Byte.class) - clazz = byte.class; + typeToken = TypeToken.of(byte.class); else if (clazz == Short.class) - clazz = short.class; + typeToken = TypeToken.of(short.class); else if (clazz == Float.class) - clazz = float.class; + typeToken = TypeToken.of(float.class); else if (clazz == Double.class) - clazz = double.class; + typeToken = TypeToken.of(double.class); else if (clazz == Boolean.class) - clazz = boolean.class; - typeToken = TypeToken.of(clazz); + typeToken = TypeToken.of(boolean.class); } paramTypes[i] = typeToken; } http://git-wip-us.apache.org/repos/asf/cassandra/blob/902877a6/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 3cd5be7..e7c46a5 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/UFTest.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/UFTest.java @@ -2504,7 +2504,23 @@ public class UFTest extends CQLTester String typeName = createType("CREATE TYPE %s (txt text, i int)"); - String f = createFunction(KEYSPACE, "text", + createFunction(KEYSPACE, "map<text,bigint>,list<text>", + "CREATE FUNCTION IF NOT EXISTS %s(state map<text,bigint>, styles list<text>)\n" + + " RETURNS NULL ON NULL INPUT\n" + + " RETURNS map<text,bigint>\n" + + " LANGUAGE java\n" + + " AS $$\n" + + " for (String style : styles) {\n" + + " if (state.containsKey(style)) {\n" + + " state.put(style, state.get(style) + 1L);\n" + + " } else {\n" + + " state.put(style, 1L);\n" + + " }\n" + + " }\n" + + " return state;\n" + + " $$"); + + createFunction(KEYSPACE, "text", "CREATE OR REPLACE FUNCTION %s(" + " listText list<text>," + " setText set<text>," +
