[jOOQ/jOOQ#14908] Missing parentheses when second subquery in set

operation contains deep nesting
This commit is contained in:
Lukas Eder 2023-04-05 11:52:24 +02:00
parent b356173936
commit ec36f45e8d

View File

@ -2649,18 +2649,19 @@ final class SelectQueryImpl<R extends Record> extends AbstractResultQuery<R> 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<R extends Record> extends AbstractResultQuery<R> imp
}
private final boolean unionParensRequired(Context<?> context) {
if (unionOp.isEmpty())
return false;
if (unionParensRequired(this) || context.settings().isRenderParenthesisAroundSetOperationQueries())
return true;