From ec36f45e8d0fe8b3e2acbb1bc1f90ca1e5ce1d07 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 5 Apr 2023 11:52:24 +0200 Subject: [PATCH] [jOOQ/jOOQ#14908] Missing parentheses when second subquery in set operation contains deep nesting --- jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java index 00830a8f8b..3fc0cc7752 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -2649,18 +2649,19 @@ final class SelectQueryImpl extends AbstractResultQuery imp for (Select other : union.get(i)) { boolean derivedTableRequired = derivedTableRequired(context, other); + boolean otherUnionParensRequired = unionParensRequired || unionOpNesting(); context.formatSeparator() .visit(op.toKeyword(family)); - if (unionParensRequired) + if (otherUnionParensRequired) context.sql(' '); else context.formatSeparator(); - unionParenthesis(context, '(', other.getSelect(), derivedTableRequired, unionParensRequired); + unionParenthesis(context, '(', other.getSelect(), derivedTableRequired, otherUnionParensRequired); context.visit(other); - unionParenthesis(context, ')', null, derivedTableRequired, unionParensRequired); + unionParenthesis(context, ')', null, derivedTableRequired, otherUnionParensRequired); } // [#1658] Close parentheses opened previously @@ -3400,6 +3401,9 @@ final class SelectQueryImpl extends AbstractResultQuery imp } private final boolean unionParensRequired(Context context) { + if (unionOp.isEmpty()) + return false; + if (unionParensRequired(this) || context.settings().isRenderParenthesisAroundSetOperationQueries()) return true;