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:
Lukas Eder 2020-12-08 16:57:05 +01:00
parent c9dca0b211
commit 7b659728fa
2 changed files with 13 additions and 12 deletions

View File

@ -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;

View File

@ -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;