[jOOQ/jOOQ#14665] Non-boolean field emulation should be NOT NULL aware

This commit is contained in:
Lukas Eder 2023-02-21 10:33:39 +01:00
parent a31028f9ee
commit cb4e8ff49b
12 changed files with 45 additions and 33 deletions

View File

@ -64,15 +64,6 @@ abstract class AbstractCondition extends AbstractField<Boolean> implements Condi
super(DSL.name("condition"), SQLDataType.BOOLEAN);
}
/**
* [#10179] Subclasses may override this method to indicate that the
* condition may produce <code>TRUE</code>, <code>FALSE</code>, or
* <code>NULL</code>.
*/
boolean isNullable() {
return true;
}
@Override
public Clause[] clauses(Context<?> ctx) {
return CLAUSES;

View File

@ -121,6 +121,15 @@ implements
// XXX: API (not implemented)
// ------------------------------------------------------------------------
/**
* [#10179] [#14665] Subclasses may override this method to indicate that
* the condition may produce <code>TRUE</code>, <code>FALSE</code>, or
* <code>NULL</code>.
*/
boolean isNullable() {
return true;
}
@Override
public abstract void accept(Context<?> ctx);

View File

@ -85,15 +85,15 @@ implements
// XXX: QueryPart API
// -------------------------------------------------------------------------
private static final Clause[] CLAUSES_EXISTS = { Clause.CONDITION, Clause.CONDITION_EXISTS };
@Override
final boolean isNullable() {
return false;
}
private static final Clause[] CLAUSES_EXISTS = { Clause.CONDITION, Clause.CONDITION_EXISTS };
@Override
final boolean parenthesised(Context<?> ctx) {
return true;

View File

@ -88,6 +88,11 @@ implements
// XXX: QueryPart API
// -------------------------------------------------------------------------
@Override
final boolean isNullable() {
return false;
}
static final Set<SQLDialect> EMULATE_DISTINCT_PREDICATE = SQLDialect.supportedUntil(CUBRID, DERBY);
@ -97,11 +102,6 @@ implements
@Override
final boolean isNullable() {
return false;
}
@Override
public final void accept(Context<?> ctx) {

View File

@ -88,13 +88,13 @@ implements
// XXX: QueryPart API
// -------------------------------------------------------------------------
@Override
final boolean isNullable() {
return false;
}
@Override
public final void accept(Context<?> ctx) {

View File

@ -85,15 +85,15 @@ implements
// XXX: QueryPart API
// -------------------------------------------------------------------------
private static final Clause[] CLAUSES = { Clause.CONDITION, Clause.CONDITION_IS_NOT_NULL };
@Override
final boolean isNullable() {
return false;
}
private static final Clause[] CLAUSES = { Clause.CONDITION, Clause.CONDITION_IS_NOT_NULL };
@Override
public final void accept(Context<?> ctx) {

View File

@ -85,15 +85,15 @@ implements
// XXX: QueryPart API
// -------------------------------------------------------------------------
private static final Clause[] CLAUSES = { Clause.CONDITION, Clause.CONDITION_IS_NULL };
@Override
final boolean isNullable() {
return false;
}
private static final Clause[] CLAUSES = { Clause.CONDITION, Clause.CONDITION_IS_NULL };
@Override
public final void accept(Context<?> ctx) {

View File

@ -134,6 +134,11 @@ implements
// XXX: QueryPart API
// -------------------------------------------------------------------------
@Override
final boolean isNullable() {
return false;
}
@Override

View File

@ -309,6 +309,8 @@ final class JSONEntryImpl<T> extends AbstractQueryPart implements JSONEntry<T>,
@SuppressWarnings("unchecked")
private static Field<String> booleanCase(Field<?> field) {
return case_((Field<Boolean>) field).when(inline(true), inline("true")).when(inline(false), inline("false"));

View File

@ -134,6 +134,11 @@ implements
// XXX: QueryPart API
// -------------------------------------------------------------------------
@Override
final boolean isNullable() {
return false;
}
@Override

View File

@ -183,6 +183,11 @@ implements

View File

@ -71,11 +71,6 @@ implements
static final NullCondition INSTANCE = new NullCondition();
static final Set<SQLDialect> NO_SUPPORT_UNTYPED_NULL = SQLDialect.supportedBy(DERBY, HSQLDB);
@Override
final boolean isNullable() {
return true;
}
@Override
final boolean parenthesised(Context<?> ctx) {
return !NO_SUPPORT_UNTYPED_NULL.contains(ctx.dialect())