From d76e8e3dd372f4904fab27cdc820dad9855c61bb Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 28 Apr 2021 13:58:23 +0200 Subject: [PATCH] [jOOQ/jOOQ#9472] Fix UUID for SQLite --- jOOQ/src/main/java/org/jooq/impl/Names.java | 1 + jOOQ/src/main/java/org/jooq/impl/Uuid.java | 28 +++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/jOOQ/src/main/java/org/jooq/impl/Names.java b/jOOQ/src/main/java/org/jooq/impl/Names.java index 9dca96d037..f816fbd555 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Names.java +++ b/jOOQ/src/main/java/org/jooq/impl/Names.java @@ -244,6 +244,7 @@ final class Names { static final Name N_RADIANS = unquotedName("radians"); static final Name N_RAND = unquotedName("rand"); static final Name N_RANDOM = unquotedName("random"); + static final Name N_RANDOMBLOB = unquotedName("randomblob"); static final Name N_RANDOM_UUID = unquotedName("random_uuid"); static final Name N_RATIO_TO_REPORT = unquotedName("ratio_to_report"); static final Name N_RAWTOHEX = unquotedName("rawtohex"); diff --git a/jOOQ/src/main/java/org/jooq/impl/Uuid.java b/jOOQ/src/main/java/org/jooq/impl/Uuid.java index c93c00ad85..2afab6eba7 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Uuid.java +++ b/jOOQ/src/main/java/org/jooq/impl/Uuid.java @@ -108,6 +108,11 @@ extends + + + + + case FIREBIRD: ctx.visit(function(N_UUID_TO_CHAR, getDataType(), function(N_GEN_UUID, getDataType()))); break; @@ -143,6 +148,29 @@ extends + case SQLITE: { + // See https://stackoverflow.com/a/22725697/521799 + Field u = DSL.field(name("u"), VARCHAR); + + ctx.visit(DSL.field( + select( + DSL.substring(u, inline(1), inline(8)).concat(inline('-')) + .concat(DSL.substring(u, inline(9), inline(4)).concat(inline('-'))) + .concat(DSL.substring(u, inline(13), inline(4)).concat(inline('-'))) + .concat(DSL.substring(u, inline(17), inline(4)).concat(inline('-'))) + .concat(DSL.substring(u, inline(21))) + ) + .from(select(DSL.lower(function(N_HEX, VARCHAR, function(N_RANDOMBLOB, BINARY, inline(16)))).as(u)).asTable(unquotedName("t"))) + )); + break; + } + + + + + + + default: ctx.visit(function(N_UUID, getDataType())); break;