diff --git a/CHANGES.txt b/CHANGES.txt index eaf53682b8..3405820d6a 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -8,6 +8,7 @@ Merged from 4.0: * Fix Down nodes counter in nodetool describecluster (CASSANDRA-18512) * Remove unnecessary shuffling of GossipDigests in Gossiper#makeRandomGossipDigest (CASSANDRA-18546) Merged from 3.11: + * Fix CAST function for float to decimal (CASSANDRA-18647) * Suppress CVE-2022-45688 (CASSANDRA-18643) * Remove unrepaired SSTables from garbage collection when only_purge_repaired_tombstones is true (CASSANDRA-14204) * Wait for live endpoints in gossip waiting to settle (CASSANDRA-18543) diff --git a/src/java/org/apache/cassandra/cql3/functions/CastFcts.java b/src/java/org/apache/cassandra/cql3/functions/CastFcts.java index 81986c804e..20d9819c77 100644 --- a/src/java/org/apache/cassandra/cql3/functions/CastFcts.java +++ b/src/java/org/apache/cassandra/cql3/functions/CastFcts.java @@ -122,7 +122,10 @@ public final class CastFcts */ private static java.util.function.Function getDecimalConversionFunction(AbstractType inputType) { - if (inputType == FloatType.instance || inputType == DoubleType.instance) + if (inputType == FloatType.instance) + return p -> new BigDecimal(Float.toString(p.floatValue())); + + if (inputType == DoubleType.instance) return p -> BigDecimal.valueOf(p.doubleValue()); if (inputType == IntegerType.instance) diff --git a/test/unit/org/apache/cassandra/cql3/functions/CastFctsTest.java b/test/unit/org/apache/cassandra/cql3/functions/CastFctsTest.java index 6efbdc0438..be0aba933c 100644 --- a/test/unit/org/apache/cassandra/cql3/functions/CastFctsTest.java +++ b/test/unit/org/apache/cassandra/cql3/functions/CastFctsTest.java @@ -142,7 +142,7 @@ public class CastFctsTest extends CQLTester BigDecimal.valueOf(2), BigDecimal.valueOf(3), BigDecimal.valueOf(4), - BigDecimal.valueOf(5.2F), + new BigDecimal("5.2"), BigDecimal.valueOf(6.3), BigDecimal.valueOf(6.3), BigDecimal.valueOf(4),