diff --git a/jOOQ/src/main/java/org/jooq/Decfloat.java b/jOOQ/src/main/java/org/jooq/Decfloat.java index b9c9eb4ff0..ecea6c9ac6 100644 --- a/jOOQ/src/main/java/org/jooq/Decfloat.java +++ b/jOOQ/src/main/java/org/jooq/Decfloat.java @@ -188,28 +188,27 @@ public final class Decfloat extends Number implements Data { if (coefficient != null || special != null) return; - switch (data) { - case "+NaN": - case "NaN": + String lc; + switch (lc = data.toLowerCase()) { + case "+nan": + case "nan": special = Special.NAN; break; - case "+Infinity": - case "Infinity": - case "+Inf": - case "Inf": + case "+infinity": + case "infinity": + case "+inf": + case "inf": special = Special.POSITIVE_INFINITY; break; - case "-Infinity": - case "-Inf": + case "-infinity": + case "-inf": special = Special.NEGATIVE_INFINITY; break; default: { - int i = data.indexOf("E"); - if (i == -1) - i = data.indexOf("e"); + int i = lc.indexOf("e"); try { if (i == -1) { diff --git a/jOOQ/src/main/java/org/jooq/impl/Multiset.java b/jOOQ/src/main/java/org/jooq/impl/Multiset.java index 19a8121759..60a6ac6acb 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Multiset.java +++ b/jOOQ/src/main/java/org/jooq/impl/Multiset.java @@ -593,6 +593,17 @@ final class Multiset extends AbstractField> implemen @SuppressWarnings("unchecked") static final Field castForJSON(Context ctx, Field field) { + DataType t = field.getDataType(); + + // [#10880] Many dialects don't support NaN and other float values in JSON documents as numbers + if (t.isDecimal() && t.isFloat()) { + switch (ctx.family()) { + + case H2: + return field.cast(VARCHAR); + } + } +