[jOOQ/jOOQ#11061] [jOOQ/jOOQ#11070] [jOOQ/jOOQ#11091] Fix regression
There needs to be a mechanism to identify the data type of a function based on its default type and/or arguments. So far, there's a weak correlation of the behaviour and whether we're calling Tools::anyNotNull or Tools::allNotNull. Further refactorings will probably invalidate this correlation
This commit is contained in:
parent
c9dca0b211
commit
7b659728fa
@ -42,6 +42,7 @@ import static org.jooq.impl.Keywords.K_IS_NULL;
|
||||
import static org.jooq.impl.Names.N_IFNULL;
|
||||
import static org.jooq.impl.Names.N_IIF;
|
||||
import static org.jooq.impl.Names.N_NVL;
|
||||
import static org.jooq.impl.Tools.anyNotNull;
|
||||
|
||||
import org.jooq.Context;
|
||||
import org.jooq.Field;
|
||||
@ -60,7 +61,7 @@ final class Nvl<T> extends AbstractField<T> {
|
||||
private final Field<T> arg2;
|
||||
|
||||
Nvl(Field<T> arg1, Field<T> arg2) {
|
||||
super(N_NVL, Tools.anyNotNull(arg1.getDataType(), arg1, arg2));
|
||||
super(N_NVL, anyNotNull(arg1.getDataType(), arg1, arg2));
|
||||
|
||||
this.arg1 = arg1;
|
||||
this.arg2 = arg2;
|
||||
|
||||
@ -5900,24 +5900,24 @@ final class Tools {
|
||||
}
|
||||
|
||||
private static final DataType<?> dataType(Field<?> field) {
|
||||
return dataType(OTHER, field);
|
||||
return dataType(OTHER, field, false);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static final <T> DataType<T> dataType(DataType<T> defaultType, Field<?> field) {
|
||||
private static final <T> DataType<T> dataType(DataType<T> defaultType, Field<?> field, boolean preferDefault) {
|
||||
return field == null
|
||||
? defaultType
|
||||
: field.getType() != defaultType.getType()
|
||||
: preferDefault && field.getType() != defaultType.getType()
|
||||
? defaultType.nullable(field.getDataType().nullable())
|
||||
: (DataType<T>) field.getDataType();
|
||||
}
|
||||
|
||||
static final <T> DataType<T> allNotNull(DataType<T> defaultType, Field<?> f1) {
|
||||
return dataType(defaultType, f1);
|
||||
return dataType(defaultType, f1, true);
|
||||
}
|
||||
|
||||
static final <T> DataType<T> allNotNull(DataType<T> defaultType, Field<?> f1, Field<?> f2) {
|
||||
DataType<T> result = dataType(defaultType, f1);
|
||||
DataType<T> result = dataType(defaultType, f1, true);
|
||||
|
||||
if (result.nullable())
|
||||
return result;
|
||||
@ -5928,7 +5928,7 @@ final class Tools {
|
||||
}
|
||||
|
||||
static final <T> DataType<T> allNotNull(DataType<T> defaultType, Field<?> f1, Field<?> f2, Field<?> f3) {
|
||||
DataType<T> result = dataType(defaultType, f1);
|
||||
DataType<T> result = dataType(defaultType, f1, true);
|
||||
|
||||
if (result.nullable())
|
||||
return result;
|
||||
@ -5941,7 +5941,7 @@ final class Tools {
|
||||
}
|
||||
|
||||
static final <T> DataType<T> allNotNull(DataType<T> defaultType, Field<?>... fields) {
|
||||
DataType<T> result = dataType(defaultType, isEmpty(fields) ? null : fields[0]);
|
||||
DataType<T> result = dataType(defaultType, isEmpty(fields) ? null : fields[0], true);
|
||||
|
||||
if (result.nullable())
|
||||
return result;
|
||||
@ -5954,11 +5954,11 @@ final class Tools {
|
||||
}
|
||||
|
||||
static final <T> DataType<T> anyNotNull(DataType<T> defaultType, Field<?> f1) {
|
||||
return dataType(defaultType, f1);
|
||||
return dataType(defaultType, f1, false);
|
||||
}
|
||||
|
||||
static final <T> DataType<T> anyNotNull(DataType<T> defaultType, Field<?> f1, Field<?> f2) {
|
||||
DataType<T> result = dataType(defaultType, f1);
|
||||
DataType<T> result = dataType(defaultType, f1, false);
|
||||
|
||||
if (!result.nullable())
|
||||
return result;
|
||||
@ -5969,7 +5969,7 @@ final class Tools {
|
||||
}
|
||||
|
||||
static final <T> DataType<T> anyNotNull(DataType<T> defaultType, Field<?> f1, Field<?> f2, Field<?> f3) {
|
||||
DataType<T> result = dataType(defaultType, f1);
|
||||
DataType<T> result = dataType(defaultType, f1, false);
|
||||
|
||||
if (!result.nullable())
|
||||
return result;
|
||||
@ -5982,7 +5982,7 @@ final class Tools {
|
||||
}
|
||||
|
||||
static final <T> DataType<T> anyNotNull(DataType<T> defaultType, Field<?>... fields) {
|
||||
DataType<T> result = dataType(defaultType, isEmpty(fields) ? null : fields[0]);
|
||||
DataType<T> result = dataType(defaultType, isEmpty(fields) ? null : fields[0], false);
|
||||
|
||||
if (!result.nullable())
|
||||
return result;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user