From 8c0f7eb076c3e20c0eea53ca362a86f60a7f7567 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Mon, 3 May 2021 17:21:04 +0200 Subject: [PATCH] [jOOQ/jOOQ#11831] Support parsing array(select) --- .../main/java/org/jooq/impl/ParserImpl.java | 31 ++++++++++++------- .../java/org/jooq/impl/SelectQueryImpl.java | 2 ++ 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index f6e6c3abd0..2c77492a58 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -8476,19 +8476,28 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { private final Field parseArrayValueConstructorIf() { if (parseKeywordIf("ARRAY")) { - parse('['); + if (parseIf('[')) { + List> fields; - List> fields; - if (parseIf(']')) { - fields = emptyList(); - } - else { - fields = parseList(',', ParseContext::parseField); - parse(']'); - } + if (parseIf(']')) { + fields = emptyList(); + } + else { + fields = parseList(',', ParseContext::parseField); + parse(']'); + } - // Prevent "wrong" javac method bind - return DSL.array((Collection) fields); + // Prevent "wrong" javac method bind + return DSL.array((Collection) fields); + } + else if (parseIf('(')) { + SelectQueryImpl select = parseWithOrSelect(1); + parse(')'); + + return DSL.array(select); + } + else + throw expected("[", "("); } return null; diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java index f448cd23b4..b4e9615a21 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -283,6 +283,8 @@ import org.jooq.tools.Convert; import org.jooq.tools.JooqLogger; import org.jooq.tools.StringUtils; +import org.jetbrains.annotations.Nullable; + /** * A sub-select is a SELECT statement that can be combined with * other SELECT statement in UNIONs and similar