[jOOQ/jOOQ#7362] Excess parentheses generated in NOT operator

This commit is contained in:
Lukas Eder 2022-05-06 17:43:22 +02:00
parent 06c2c31907
commit 169102e69f
11 changed files with 68 additions and 1 deletions

View File

@ -72,6 +72,18 @@ abstract class AbstractCondition extends AbstractQueryPart implements Condition
return true;
}
/**
* [#7362] Subclasses may override this method to indicate that the
* condition is already parenthesised, or produces syntax that render
* parentheses around this condition unnecessary.
* <p>
* This can help produce excess parentheses, e.g. when this condition is
* wrapped in {@link QOM.Not}
*/
boolean parenthesised(Context<?> ctx) {
return false;
}
@Override
public Clause[] clauses(Context<?> ctx) {
return CLAUSES;

View File

@ -92,6 +92,11 @@ implements
private static final Clause[] CLAUSES = { Clause.CONDITION, Clause.CONDITION_AND };
@Override
final boolean parenthesised(Context<?> ctx) {
return true;
}
@Override
public final void accept(Context<?> ctx) {

View File

@ -113,6 +113,11 @@ package org.jooq.impl;

View File

@ -94,6 +94,11 @@ implements
return false;
}
@Override
final boolean parenthesised(Context<?> ctx) {
return true;
}
@Override
public final void accept(Context<?> ctx) {
switch (ctx.family()) {

View File

@ -113,6 +113,11 @@ package org.jooq.impl;

View File

@ -94,6 +94,11 @@ implements
return !(condition instanceof AbstractCondition) || ((AbstractCondition) condition).isNullable();
}
@Override
final boolean parenthesised(Context<?> ctx) {
return true;
}
@Override
public final void accept(Context<?> ctx) {
switch (ctx.family()) {
@ -104,7 +109,11 @@ implements
default:
ctx.visit(K_NOT).sql(" (").visit(condition).sql(')');
if (condition instanceof AbstractCondition && ((AbstractCondition) condition).parenthesised(ctx))
ctx.visit(K_NOT).sql(' ').visit(condition);
else
ctx.visit(K_NOT).sql(" (").visit(condition).sql(')');
break;
}
}

View File

@ -92,6 +92,11 @@ implements
private static final Clause[] CLAUSES = { Clause.CONDITION, Clause.CONDITION_OR };
@Override
final boolean parenthesised(Context<?> ctx) {
return true;
}
@Override
public final void accept(Context<?> ctx) {

View File

@ -56,6 +56,11 @@ final class SQLCondition extends AbstractCondition implements UEmptyCondition {
// QueryPart API
// ------------------------------------------------------------------------
@Override
final boolean parenthesised(Context<?> ctx) {
return true;
}
@Override
public final void accept(Context<?> ctx) {
switch (ctx.family()) {

View File

@ -92,6 +92,11 @@ implements
return false;
}
@Override
final boolean parenthesised(Context<?> ctx) {
return true;
}
@Override
public final void accept(Context<?> ctx) {
switch (ctx.family()) {

View File

@ -113,6 +113,11 @@ package org.jooq.impl;

View File

@ -84,6 +84,7 @@ final class XMLExists extends AbstractCondition implements XMLExistsPassingStep,
// -------------------------------------------------------------------------
// XXX: DSL API
// -------------------------------------------------------------------------
@Override
public final Condition passing(XML xml) {
return passing(Tools.field(xml));
@ -118,6 +119,11 @@ final class XMLExists extends AbstractCondition implements XMLExistsPassingStep,
// XXX: QueryPart API
// -------------------------------------------------------------------------
@Override
final boolean parenthesised(Context<?> ctx) {
return true;
}
@Override
public final void accept(Context<?> ctx) {
switch (ctx.family()) {