Repository: cassandra Updated Branches: refs/heads/cassandra-2.2 3482370df -> 2bd733264
Returns null instead of NaN or Infinity in JSON strings patch by Benjamin Lerer; reviewed by Francisco Fernandez for CASSANDRA-14377 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/2bd73326 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/2bd73326 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/2bd73326 Branch: refs/heads/cassandra-2.2 Commit: 2bd733264ea0a30f2d62f62195a9bb7860904f83 Parents: 3482370 Author: Benjamin Lerer <b.le...@gmail.com> Authored: Thu Aug 2 11:01:39 2018 +0200 Committer: Benjamin Lerer <b.le...@gmail.com> Committed: Thu Aug 2 11:01:39 2018 +0200 ---------------------------------------------------------------------- CHANGES.txt | 1 + src/java/org/apache/cassandra/db/marshal/DoubleType.java | 6 +++++- src/java/org/apache/cassandra/db/marshal/FloatType.java | 6 +++++- .../cassandra/cql3/validation/entities/JsonTest.java | 11 +++++++++++ 4 files changed, 22 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/2bd73326/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 9d6a9ea..9e810c0 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.2.13 + * Returns null instead of NaN or Infinity in JSON strings (CASSANDRA-14377) * Fix bug that prevented compaction of SSTables after full repairs (CASSANDRA-14423) * Incorrect counting of pending messages in OutboundTcpConnection (CASSANDRA-11551) * Fix compaction failure caused by reading un-flushed data (CASSANDRA-12743) http://git-wip-us.apache.org/repos/asf/cassandra/blob/2bd73326/src/java/org/apache/cassandra/db/marshal/DoubleType.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/marshal/DoubleType.java b/src/java/org/apache/cassandra/db/marshal/DoubleType.java index 661b3c9..d0f8485 100644 --- a/src/java/org/apache/cassandra/db/marshal/DoubleType.java +++ b/src/java/org/apache/cassandra/db/marshal/DoubleType.java @@ -85,7 +85,11 @@ public class DoubleType extends AbstractType<Double> @Override public String toJSONString(ByteBuffer buffer, int protocolVersion) { - return getSerializer().deserialize(buffer).toString(); + Double value = getSerializer().deserialize(buffer); + // JSON does not support NaN, Infinity and -Infinity values. Most of the parser convert them into null. + if (value.isNaN() || value.isInfinite()) + return "null"; + return value.toString(); } public CQL3Type asCQL3Type() http://git-wip-us.apache.org/repos/asf/cassandra/blob/2bd73326/src/java/org/apache/cassandra/db/marshal/FloatType.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/marshal/FloatType.java b/src/java/org/apache/cassandra/db/marshal/FloatType.java index af02cad..fc12b87 100644 --- a/src/java/org/apache/cassandra/db/marshal/FloatType.java +++ b/src/java/org/apache/cassandra/db/marshal/FloatType.java @@ -84,7 +84,11 @@ public class FloatType extends AbstractType<Float> @Override public String toJSONString(ByteBuffer buffer, int protocolVersion) { - return getSerializer().deserialize(buffer).toString(); + Float value = getSerializer().deserialize(buffer); + // JSON does not support NaN, Infinity and -Infinity values. Most of the parser convert them into null. + if (value.isNaN() || value.isInfinite()) + return "null"; + return value.toString(); } public CQL3Type asCQL3Type() http://git-wip-us.apache.org/repos/asf/cassandra/blob/2bd73326/test/unit/org/apache/cassandra/cql3/validation/entities/JsonTest.java ---------------------------------------------------------------------- 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 9d40038..b804c0e 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/JsonTest.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/JsonTest.java @@ -1285,4 +1285,15 @@ public class JsonTest extends CQLTester row("{\"a\": 100}"), row("{\"a\": 20}")); } + + @Test + public void testJsonWithNaNAndInfinity() throws Throwable + { + createTable("CREATE TABLE %s (pk int PRIMARY KEY, f1 float, f2 float, f3 float, d1 double, d2 double, d3 double)"); + execute("INSERT INTO %s (pk, f1, f2, f3, d1, d2, d3) VALUES (?, ?, ?, ?, ?, ?, ?)", + 1, Float.NaN, Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY, Double.NaN, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY); + + // JSON does not support NaN, Infinity and -Infinity values. Most of the parser convert them into null. + assertRows(execute("SELECT JSON * FROM %s"), row("{\"pk\": 1, \"d1\": null, \"d2\": null, \"d3\": null, \"f1\": null, \"f2\": null, \"f3\": null}")); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org