From d7ec940ce178238af9a3ed99ade2575aed633f8b Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Wed, 4 Apr 2018 14:10:12 -0300 Subject: [PATCH] CQL fromJson(null) throws NullPointerException --- .../apache/cassandra/cql3/functions/FunctionCall.java | 2 ++ .../cassandra/cql3/validation/entities/JsonTest.java | 10 +++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/java/org/apache/cassandra/cql3/functions/FunctionCall.java b/src/java/org/apache/cassandra/cql3/functions/FunctionCall.java index be3081a8d2d0..4ccd4b2b3c13 100644 --- a/src/java/org/apache/cassandra/cql3/functions/FunctionCall.java +++ b/src/java/org/apache/cassandra/cql3/functions/FunctionCall.java @@ -98,6 +98,8 @@ public boolean containsBindMarker() private static Term.Terminal makeTerminal(Function fun, ByteBuffer result, int version) throws InvalidRequestException { + if (result == null) + return null; if (!(fun.returnType() instanceof CollectionType)) return new Constants.Value(result); diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/JsonTest.java b/test/unit/org/apache/cassandra/cql3/validation/entities/JsonTest.java index 94b208744533..62c62261613e 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/JsonTest.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/JsonTest.java @@ -39,7 +39,8 @@ import java.util.concurrent.*; import static org.junit.Assert.fail; -public class JsonTest extends CQLTester +public class +JsonTest extends CQLTester { @BeforeClass public static void setUp() @@ -248,6 +249,13 @@ public void testFromJsonFct() throws Throwable // handle nulls execute("INSERT INTO %s (k, asciival) VALUES (?, fromJson(?))", 0, null); + assertRows(execute("SELECT k, asciival FROM %s WHERE k = ?", 0), row(0, null)); + + execute("INSERT INTO %s (k, frozenmapval) VALUES (?, fromJson(?))", 0, null); + assertRows(execute("SELECT k, frozenmapval FROM %s WHERE k = ?", 0), row(0, null)); + + execute("INSERT INTO %s (k, udtval) VALUES (?, fromJson(?))", 0, null); + assertRows(execute("SELECT k, udtval FROM %s WHERE k = ?", 0), row(0, null)); // ================ ascii ================ execute("INSERT INTO %s (k, asciival) VALUES (?, fromJson(?))", 0, "\"ascii text\"");