From 89fb4edb25018ef8a912ca4dd3682ed40a406c2c Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 16 Oct 2024 12:02:14 +0200 Subject: [PATCH] [jOOQ/jOOQ#16013] ClassCastException during invocation of double-wrapped ConvertedDataType --- jOOQ/src/main/java/org/jooq/impl/AbstractDataType.java | 7 +++++++ jOOQ/src/main/java/org/jooq/impl/ConvertedDataType.java | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractDataType.java b/jOOQ/src/main/java/org/jooq/impl/AbstractDataType.java index 5e70f9bc8e..9b88e33da2 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractDataType.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractDataType.java @@ -842,6 +842,13 @@ implements return convert(object, converterContext()); } + static final T convert0(DataType type, Object object, ConverterContext cc) { + if (type instanceof AbstractDataType t) + return t.convert(object, cc); + else + return type.convert(object); + } + /* non-final */ T convert(Object object, ConverterContext cc) { // [#1441] Avoid unneeded type conversions to improve performance diff --git a/jOOQ/src/main/java/org/jooq/impl/ConvertedDataType.java b/jOOQ/src/main/java/org/jooq/impl/ConvertedDataType.java index 67fdd222f1..6e646f036d 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ConvertedDataType.java +++ b/jOOQ/src/main/java/org/jooq/impl/ConvertedDataType.java @@ -316,8 +316,9 @@ final class ConvertedDataType extends AbstractDataTypeX { return (U) object; // [#3200] Try to convert arbitrary objects to T + // [#16013] [#17428] Avoid repeated conversion in case of chained converters else - return ((ContextConverter) getConverter()).from(delegate.convert(object, cc), cc); + return ((ContextConverter) getConverter()).from((T) convert0(delegate(delegate), object, cc), cc); } @Override