Merge branch 'cassandra-3.0' into cassandra-3.11

Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/975e1d3e
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/975e1d3e
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/975e1d3e

Branch: refs/heads/trunk
Commit: 975e1d3eb9765e5f16a21fe47c40f6a149866045
Parents: 559d61a 3acb7d4
Author: Benjamin Lerer <b.le...@gmail.com>
Authored: Thu Aug 2 11:32:03 2018 +0200
Committer: Benjamin Lerer <b.le...@gmail.com>
Committed: Thu Aug 2 11:32:03 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/975e1d3e/CHANGES.txt
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/975e1d3e/src/java/org/apache/cassandra/db/marshal/DoubleType.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/marshal/DoubleType.java
index d2309ee,d39059b..4b997dd
--- a/src/java/org/apache/cassandra/db/marshal/DoubleType.java
+++ b/src/java/org/apache/cassandra/db/marshal/DoubleType.java
@@@ -84,9 -83,13 +84,13 @@@ public class DoubleType extends Abstrac
      }
  
      @Override
 -    public String toJSONString(ByteBuffer buffer, int protocolVersion)
 +    public String toJSONString(ByteBuffer buffer, ProtocolVersion 
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/975e1d3e/src/java/org/apache/cassandra/db/marshal/FloatType.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/marshal/FloatType.java
index 5445bbc,58f5702..ad71416
--- a/src/java/org/apache/cassandra/db/marshal/FloatType.java
+++ b/src/java/org/apache/cassandra/db/marshal/FloatType.java
@@@ -83,9 -82,13 +83,13 @@@ public class FloatType extends Abstract
      }
  
      @Override
 -    public String toJSONString(ByteBuffer buffer, int protocolVersion)
 +    public String toJSONString(ByteBuffer buffer, ProtocolVersion 
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/975e1d3e/test/unit/org/apache/cassandra/cql3/validation/entities/JsonTest.java
----------------------------------------------------------------------
diff --cc test/unit/org/apache/cassandra/cql3/validation/entities/JsonTest.java
index 16df6e1,ee96d83..ab0124e
--- a/test/unit/org/apache/cassandra/cql3/validation/entities/JsonTest.java
+++ b/test/unit/org/apache/cassandra/cql3/validation/entities/JsonTest.java
@@@ -1389,23 -1286,16 +1389,34 @@@ public class JsonTest extends CQLTeste
          assertRows(execute("SELECT JSON a FROM %s WHERE a IN (20, 100) ORDER 
BY b DESC"),
                     row("{\"a\": 100}"),
                     row("{\"a\": 20}"));
 +
 +        // Check ordering with alias 
 +        assertRows(execute("SELECT JSON a, b as c FROM %s WHERE a IN (20, 
100) ORDER BY b"),
 +                   row("{\"a\": 20, \"c\": 30}"),
 +                   row("{\"a\": 100, \"c\": 200}"));
 +
 +        assertRows(execute("SELECT JSON a, b as c FROM %s WHERE a IN (20, 
100) ORDER BY b DESC"),
 +                   row("{\"a\": 100, \"c\": 200}"),
 +                   row("{\"a\": 20, \"c\": 30}"));
 +
 +        // Check ordering with CAST 
 +        assertRows(execute("SELECT JSON a, CAST(b AS FLOAT) FROM %s WHERE a 
IN (20, 100) ORDER BY b"),
 +                   row("{\"a\": 20, \"cast(b as float)\": 30.0}"),
 +                   row("{\"a\": 100, \"cast(b as float)\": 200.0}"));
 +
 +        assertRows(execute("SELECT JSON a, CAST(b AS FLOAT) FROM %s WHERE a 
IN (20, 100) ORDER BY b DESC"),
 +                   row("{\"a\": 100, \"cast(b as float)\": 200.0}"),
 +                   row("{\"a\": 20, \"cast(b as float)\": 30.0}"));
      }
+ 
+     @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

Reply via email to