From 50d01b3d5a0a26feecc13045b03f93ccae7fab81 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Wed, 1 Feb 2017 10:43:10 +0100 Subject: [PATCH] [#5824] Add Convert support for converting UUID to byte[] and vice versa --- .../src/main/java/org/jooq/tools/Convert.java | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/tools/Convert.java b/jOOQ/src/main/java/org/jooq/tools/Convert.java index ecbbba267b..ba0e1a650b 100644 --- a/jOOQ/src/main/java/org/jooq/tools/Convert.java +++ b/jOOQ/src/main/java/org/jooq/tools/Convert.java @@ -49,6 +49,7 @@ import java.math.BigInteger; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; +import java.nio.ByteBuffer; import java.sql.Date; import java.sql.Time; import java.sql.Timestamp; @@ -484,8 +485,18 @@ public final class Convert { // Regular checks else if (fromClass == byte[].class) { + // [#5824] UUID's most significant bits in byte[] are first + if (toClass == UUID.class) { + ByteBuffer b = ByteBuffer.wrap((byte[]) from); + long mostSigBits = b.getLong(); + long leastSigBits = b.getLong(); + return (U) new UUID(mostSigBits, leastSigBits); + } + // [#5569] Binary data is expected to be in JVM's default encoding - return convert(new String((byte[]) from), toClass); + else { + return convert(new String((byte[]) from), toClass); + } } else if (fromClass.isArray()) { @@ -515,7 +526,17 @@ public final class Convert { // [#5569] It should be possible, at least, to convert an empty string to an empty (var)binary. else if (toClass == byte[].class) { - return (U) from.toString().getBytes(); + + // [#5824] UUID's most significant bits in byte[] are first + if (from instanceof UUID) { + ByteBuffer b = ByteBuffer.wrap(new byte[16]); + b.putLong(((UUID) from).getMostSignificantBits()); + b.putLong(((UUID) from).getLeastSignificantBits()); + return (U)b.array(); + } + else { + return (U) from.toString().getBytes(); + } } // Various number types are converted between each other via String