From 09cdf5703c6aa7fd59c22a4b02b51d8cfc3ee161 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Mon, 14 Mar 2016 18:06:42 +0100 Subject: [PATCH] [#4964] Type handling issue when using a custom type with a Postgres UDT field --- .../main/java/org/jooq/impl/DefaultBinding.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java index f6e3829b9c..9661687ce7 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java @@ -2006,8 +2006,14 @@ public class DefaultBinding implements Binding { // interfaces. Instead, a string representation of a UDT has to be parsed // ------------------------------------------------------------------------- - @SuppressWarnings("unchecked") private static final T pgFromString(Class type, String string) { + return pgFromString(Converters.identity(type), string); + } + + @SuppressWarnings("unchecked") + private static final T pgFromString(Converter converter, String string) { + Class type = converter.toType(); + if (string == null) { return null; } @@ -2091,6 +2097,10 @@ public class DefaultBinding implements Binding { else if (Record.class.isAssignableFrom(type)) { return (T) pgNewRecord(type, null, string); } + else { + Converter c = (Converter) converter; + return c.from(pgFromString(c.fromType(), string)); + } throw new UnsupportedOperationException("Class " + type + " is not supported"); } @@ -2237,7 +2247,7 @@ public class DefaultBinding implements Binding { } static final void pgSetValue(Record record, Field field, String value) { - record.set(field, pgFromString(field.getType(), value)); + record.set(field, pgFromString(field.getConverter(), value)); } private static final void pgRenderEnumCast(RenderContext render, Class type) {