[jOOQ/jOOQ#16509] Avoid more internal COALESCE calls when unnecessary via AbstractField::isNullable
This commit is contained in:
parent
c379441d47
commit
dc0fc32349
@ -125,7 +125,7 @@ implements
|
||||
case HSQLDB:
|
||||
case POSTGRES:
|
||||
case YUGABYTEDB:
|
||||
ctx.visit(when(array.isNotNull(), notExists(
|
||||
ctx.visit(ifNotNull(array, notExists(
|
||||
selectOne()
|
||||
.from(unnest(array).as(N_T, predicate.$arg1().getUnqualifiedName()))
|
||||
.where(DSL.not(predicate.$result()))
|
||||
|
||||
@ -125,7 +125,7 @@ implements
|
||||
case HSQLDB:
|
||||
case POSTGRES:
|
||||
case YUGABYTEDB:
|
||||
ctx.visit(when(array.isNotNull(), exists(
|
||||
ctx.visit(ifNotNull(array, exists(
|
||||
selectOne()
|
||||
.from(unnest(array).as(N_T, predicate.$arg1().getUnqualifiedName()))
|
||||
.where(predicate.$result())
|
||||
|
||||
@ -128,7 +128,7 @@ implements
|
||||
case POSTGRES:
|
||||
case YUGABYTEDB:
|
||||
ctx.visit(DSL.field(
|
||||
select(DSL.coalesce(arrayAgg(predicate.$arg1()), when(array.isNotNull(), DSL.cast(array(), getDataType()))))
|
||||
select(DSL.coalesce(arrayAgg(predicate.$arg1()), ifNotNull(array, DSL.cast(array(), getDataType()))))
|
||||
.from(unnest(array).as(N_T, predicate.$arg1().getUnqualifiedName()))
|
||||
.where(predicate.$result())
|
||||
));
|
||||
|
||||
@ -131,7 +131,7 @@ implements
|
||||
case POSTGRES:
|
||||
case YUGABYTEDB:
|
||||
ctx.visit(DSL.field(
|
||||
select(DSL.coalesce(arrayAgg(mapper.$result()), when(array.isNotNull(), DSL.cast(array(), getDataType()))))
|
||||
select(DSL.coalesce(arrayAgg(mapper.$result()), ifNotNull(array, DSL.cast(array(), getDataType()))))
|
||||
.from(unnest(array).as(N_T, mapper.$arg1().getUnqualifiedName()))
|
||||
));
|
||||
break;
|
||||
|
||||
@ -124,7 +124,7 @@ implements
|
||||
case HSQLDB:
|
||||
case POSTGRES:
|
||||
case YUGABYTEDB:
|
||||
ctx.visit(when(array.isNotNull(), notExists(
|
||||
ctx.visit(ifNotNull(array, notExists(
|
||||
selectOne()
|
||||
.from(unnest(array).as(N_T, predicate.$arg1().getUnqualifiedName()))
|
||||
.where(predicate.$result())
|
||||
|
||||
@ -73,6 +73,7 @@ import static org.jooq.impl.SQLDataType.JSON;
|
||||
import static org.jooq.impl.SQLDataType.VARCHAR;
|
||||
import static org.jooq.impl.Tools.combine;
|
||||
import static org.jooq.impl.Tools.emulateMultiset;
|
||||
import static org.jooq.impl.Tools.ifNotNull;
|
||||
import static org.jooq.impl.Tools.isScalarSubquery;
|
||||
|
||||
import java.util.Set;
|
||||
@ -241,7 +242,7 @@ final class JSONEntryImpl<T> extends AbstractQueryPart implements JSONEntry<T>,
|
||||
if (isType(type, Boolean.class))
|
||||
return function(N_JSON, SQLDataType.JSON, booleanCase(field));
|
||||
else if (type.isBinary())
|
||||
return when(field.isNotNull(), function(N_HEX, VARCHAR, field));
|
||||
return ifNotNull(field, function(N_HEX, VARCHAR, field));
|
||||
else if (castJSONTypes && type.isJSON())
|
||||
return function(N_JSON, SQLDataType.JSON, field);
|
||||
|
||||
|
||||
@ -132,6 +132,7 @@ import static org.jooq.impl.DSL.row;
|
||||
import static org.jooq.impl.DSL.select;
|
||||
import static org.jooq.impl.DSL.unquotedName;
|
||||
import static org.jooq.impl.DSL.val;
|
||||
import static org.jooq.impl.DSL.when;
|
||||
import static org.jooq.impl.DefaultExecuteContext.localConnection;
|
||||
import static org.jooq.impl.DefaultParseContext.SUPPORTS_HASH_COMMENT_SYNTAX;
|
||||
import static org.jooq.impl.DerivedTable.NO_SUPPORT_CORRELATED_DERIVED_TABLE;
|
||||
@ -7959,6 +7960,15 @@ final class Tools {
|
||||
}
|
||||
}
|
||||
|
||||
static final <T> Field<T> ifNotNull(Field<?> field, Field<T> ifNotNull) {
|
||||
if (field instanceof AbstractField<?> af) {
|
||||
if (!af.isNullable())
|
||||
return ifNotNull;
|
||||
}
|
||||
|
||||
return when(field.isNotNull(), ifNotNull);
|
||||
}
|
||||
|
||||
static final boolean sortable(Field<?> f) {
|
||||
return !f.getDataType().isBinary();
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user