From a496614bb9aab891e1ade8e54a37e5ec53cfee88 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Tue, 20 Mar 2018 12:41:54 +0100 Subject: [PATCH] [#3579] [#6431] [#7222] Fix nested set operations for SQLite --- .../main/java/org/jooq/impl/SelectQueryImpl.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java index fe967c66a2..2781b3d6f3 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -1581,7 +1581,8 @@ final class SelectQueryImpl extends AbstractResultQuery imp - private static final EnumSet UNION_PARENTHESIS = EnumSet.of(DERBY, MARIADB, MYSQL, SQLITE); + private static final EnumSet NO_SUPPORT_UNION_PARENTHESES = EnumSet.of(SQLITE); + private static final EnumSet UNION_PARENTHESIS = EnumSet.of(DERBY, MARIADB, MYSQL); private final boolean unionOpNesting() { if (unionOp.size() > 1) @@ -1602,8 +1603,17 @@ final class SelectQueryImpl extends AbstractResultQuery imp private final void unionParenthesis(Context ctx, char parenthesis, Field[] fields) { boolean derivedTable = - (TRUE.equals(ctx.data(DATA_NESTED_SET_OPERATIONS)) && UNION_PARENTHESIS.contains(ctx.family())) + // [#3579] [#6431] [#7222] Some databases don't support nested set operations at all + // because they do not allow wrapping set op subqueries in parentheses + NO_SUPPORT_UNION_PARENTHESES.contains(ctx.family()) + + // [#3579] [#6431] [#7222] Nested set operations aren't supported, but parenthesised + // set op subqueries are. + || (TRUE.equals(ctx.data(DATA_NESTED_SET_OPERATIONS)) && UNION_PARENTHESIS.contains(ctx.family())) + + // [#2995] Ambiguity may need to be resolved when parentheses could mean both: + // Set op subqueries or insert column lists || ctx.data(DATA_INSERT_SELECT_WITHOUT_INSERT_COLUMN_LIST) != null // [#7222] Workaround for https://issues.apache.org/jira/browse/DERBY-6984