From 97c56d2d5398fcca86ff74d19b0dcf9ceed11b10 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 31 May 2023 12:17:59 +0200 Subject: [PATCH] [jOOQ/jOOQ#13947] Support CockroachDB 23 user defined functions - WIP - Fix array type support --- .../java/org/jooq/codegen/GenerationUtil.java | 34 +++++++++++-------- .../java/org/jooq/meta/AbstractDatabase.java | 6 ++-- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationUtil.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationUtil.java index 9ce48b0fcd..3e8a013183 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationUtil.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationUtil.java @@ -540,26 +540,15 @@ class GenerationUtil { - case TRINO: { - return new BaseType(t.replaceFirst("(?i:array\\((.*?)\\))", "$1"), u); - } case POSTGRES: case YUGABYTEDB: { + return getPGArrayBaseType(t, u); + } - // The convention is to prepend a "_" to a type to get an array type - if (u != null) { - if (u.last().startsWith("_")) - return new BaseType(u.last().substring(1), u); - else if (u.last().toUpperCase().endsWith(" ARRAY")) - return new BaseType(u.last().replaceFirst("(?i: ARRAY)", ""), u); - else if (t.toUpperCase().endsWith(" ARRAY")) - return new BaseType(t.replaceFirst("(?i: ARRAY)", ""), u); - } - - // But there are also arrays with a "vector" suffix - return new BaseType(t, u); + case TRINO: { + return new BaseType(t.replaceFirst("(?i:array\\((.*?)\\))", "$1"), u); } case H2: @@ -579,6 +568,21 @@ class GenerationUtil { } } + private static final BaseType getPGArrayBaseType(String t, Name u) { + // The convention is to prepend a "_" to a type to get an array type + if (u != null) { + if (u.last().startsWith("_")) + return new BaseType(u.last().substring(1), u); + else if (u.last().toUpperCase().endsWith(" ARRAY")) + return new BaseType(u.last().replaceFirst("(?i: ARRAY)", ""), u); + else if (t.toUpperCase().endsWith(" ARRAY")) + return new BaseType(t.replaceFirst("(?i: ARRAY)", ""), u); + } + + // But there are also arrays with a "vector" suffix + return new BaseType(t, u); + } + static ExpressionType expressionType(String expression) { if (!"null".equals(expression) && TYPE_REFERENCE_PATTERN.matcher(expression).matches()) return CONSTRUCTOR_REFERENCE; diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java index 5cd68fee0b..95aba5efd8 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java @@ -3193,17 +3193,15 @@ public abstract class AbstractDatabase implements Database { - - - case TRINO: return upper.startsWith("ARRAY("); + case H2: case POSTGRES: case YUGABYTEDB: - return "ARRAY".equals(upper) || upper.endsWith(" ARRAY") || upper.equals("ANYARRAY"); + return "ARRAY".equals(upper) || dataType.endsWith("[]") || upper.endsWith(" ARRAY") || upper.equals("ANYARRAY"); case HSQLDB: