diff --git a/jOOQ-test/src/org/jooq/test/OracleTest.java b/jOOQ-test/src/org/jooq/test/OracleTest.java index 497d0caac6..1c75b289c2 100644 --- a/jOOQ-test/src/org/jooq/test/OracleTest.java +++ b/jOOQ-test/src/org/jooq/test/OracleTest.java @@ -1433,6 +1433,40 @@ xxxxxx xxxxx xxxxxxxxxx xxxxxxx xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx xxxx xxx xxxx xxx xxxxxxxxx xxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx xxxxxx xxxxxxx xxxxxxx xx xxxxxxx xxxxxxxxxxxxxxxxxxxxxxx x + + xxxxxx xxxxx xxxxxx x + xxxxxx xxxxxx xxxxxxx + xxxxxx xxxxxx xxx + x + + xxxxxx xxxxx xxxxxxx x + xxxxxx xxxxxx xxxxxxx + xxxxxx xxxxxx xxxxx + xxxxxx xxxxxx xxxxxxxx + x + + xxxxxx xxxxx xxxxxx x + xxxxxx xxxxxx xxxxxxxxxx + xxxxxx xxxxxx xxxxxxxxx + xxxxxx xxxxxxx xxxxxxxx + x + + xxxxx + xxxxxx xxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxx xxxxxxxxx x + xxxxxxxxxxxxx xxxxxx x xxxxxxxx + xxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxx + + xxxxxx xxxxxx x xxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxx xxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxx + x x xx [/pro] */ \ No newline at end of file diff --git a/jOOQ-test/src/org/jooq/test/PostgresTest.java b/jOOQ-test/src/org/jooq/test/PostgresTest.java index ee29e483e2..c0d8da7f9a 100644 --- a/jOOQ-test/src/org/jooq/test/PostgresTest.java +++ b/jOOQ-test/src/org/jooq/test/PostgresTest.java @@ -42,6 +42,7 @@ package org.jooq.test; import static java.util.Arrays.asList; +import static junit.framework.Assert.assertEquals; import static org.jooq.impl.DSL.inline; import static org.jooq.impl.DSL.name; import static org.jooq.impl.DSL.select; @@ -75,7 +76,6 @@ import static org.jooq.util.postgres.PostgresDSL.arrayPrepend; import static org.jooq.util.postgres.PostgresDSL.arrayToString; import static org.jooq.util.postgres.PostgresDSL.only; import static org.jooq.util.postgres.PostgresDSL.stringToArray; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import java.math.BigDecimal; @@ -1148,4 +1148,39 @@ public class PostgresTest extends jOOQAbstractTest< create().execute(drop, b2); } } + + + static class Street { + public String street; + public String no; + } + + static class Address { + public Street street; + public String city; + public String country; + } + + static class Author { + public String firstName; + public String lastName; + public Address address; + } + + @Test + public void testPostgresUDTRecordMapping() throws Exception { + TAuthorRecord record = create() + .selectFrom(T_AUTHOR) + .where(T_AUTHOR.ID.eq(1)) + .fetchOne(); + + Author author = record.into(Author.class); + assertEquals("George", author.firstName); + assertEquals("Orwell", author.lastName); + assertEquals("Hampstead", author.address.city); + assertEquals("England", author.address.country); + assertEquals("Parliament Hill", author.address.street.street); + assertEquals("77", author.address.street.no); + System.out.println(author); + } } diff --git a/jOOQ/src/main/java/org/jooq/tools/Convert.java b/jOOQ/src/main/java/org/jooq/tools/Convert.java index 12728cc587..f8ee4e4a7d 100644 --- a/jOOQ/src/main/java/org/jooq/tools/Convert.java +++ b/jOOQ/src/main/java/org/jooq/tools/Convert.java @@ -69,6 +69,7 @@ import java.util.regex.Pattern; import org.jooq.Converter; import org.jooq.EnumType; import org.jooq.Field; +import org.jooq.Record; import org.jooq.SQLDialect; import org.jooq.exception.DataTypeException; import org.jooq.types.UByte; @@ -742,6 +743,15 @@ public final class Convert { return null; } } + + // [#3023] Record types can be converted using the supplied Configuration's + // RecordMapperProvider + else if (Record.class.isAssignableFrom(fromClass)) { + Record record = (Record) from; + return record.into(toClass); + } + + // TODO [#2520] When RecordUnmappers are supported, they should also be considered here } throw fail(from, toClass);