From 1c453a1e2883876464d4215c0208659351ec4e67 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Mon, 19 Aug 2024 09:06:32 +0200 Subject: [PATCH] [jOOQ/jOOQ#10880] Firebird may also produce -NaN values --- jOOQ/src/main/java/org/jooq/Decfloat.java | 1 + jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/Decfloat.java b/jOOQ/src/main/java/org/jooq/Decfloat.java index 89e0f4493a..8065c883f8 100644 --- a/jOOQ/src/main/java/org/jooq/Decfloat.java +++ b/jOOQ/src/main/java/org/jooq/Decfloat.java @@ -219,6 +219,7 @@ public final class Decfloat extends Number implements Data { switch (lc = data.toLowerCase()) { case "+nan": case "nan": + case "-nan": special = Special.NAN; break; diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java index b89f3c189c..3ffdced8c7 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java @@ -2946,7 +2946,10 @@ public class DefaultBinding implements Binding { static final Field nan(BindingSQLContext ctx, DataType type) { switch (ctx.family()) { case FIREBIRD: - return log(inline(1), inline(1)); + if (type.isDecimal()) + return inline("NaN").cast(type); + else + return log(inline(1), inline(1)); case HSQLDB: return inline(0.0).div(field("0.0e0", (DataType) type)); default: @@ -2958,7 +2961,10 @@ public class DefaultBinding implements Binding { static final Field infinity(BindingSQLContext ctx, DataType type, boolean negative) { switch (ctx.family()) { case FIREBIRD: - return log(negative ? inline(0.5) : inline(1.5), inline(1)); + if (type.isDecimal()) + return inline(negative ? "-Infinity" : "Infinity").cast(type); + else + return log(negative ? inline(0.5) : inline(1.5), inline(1)); case HSQLDB: return inline(negative ? -1.0 : 1.0).div(field("0.0e0", (DataType) type)); default: