From 662243d51bf1726f727cf39c6cc9ffb3bb043f03 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 7 Jan 2025 16:34:38 +0100 Subject: [PATCH] [jOOQ/jOOQ#17803] Double or Float inline values should be cast to their appropriate types where the rendered literals are interpreted as NUMERIC or DECIMAL --- .../java/org/jooq/impl/DefaultBinding.java | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java index 812ec00c77..1e864dad24 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java @@ -816,6 +816,26 @@ public class DefaultBinding implements Binding { return true; } } + + // [#17803] Some dialects require the cast for syntactic reasons (see DefaultDoubleBinding.REQUIRES_LITERAL_CAST) + // Others require it occasionally to prevent wrong type promotions, on literals only. + if (dataType.isFloat()) { + switch (ctx.family()) { + + + + case FIREBIRD: + + // [#10879] We'll need more precise cast types, first! + // case MARIADB: + // case MYSQL: + case POSTGRES: + + + case YUGABYTEDB: + return true; + } + } } // Many dialects require casts for bind values @@ -1038,6 +1058,7 @@ public class DefaultBinding implements Binding { // [#7351] UUID data types need to be cast too // [#7242] JSON(B) data types need to be cast too // [#13252] XML data types need to be cast too + // [#17803] Floating point literals need to be cast as well else if (REQUIRES_JSON_CAST.contains(ctx.dialect()) && (sqlDataType == null || (!sqlDataType.isTemporal() @@ -1046,7 +1067,8 @@ public class DefaultBinding implements Binding { - && !sqlDataType.isJSON()))) + && !sqlDataType.isJSON()) + && !sqlDataType.isFloat())) sql(ctx, converted);