[jOOQ/jOOQ#8353] Correct handling of NULL embeddable records

This commit is contained in:
Lukas Eder 2020-08-19 10:44:17 +02:00
parent 14c2fac8f0
commit 41e0adc7f8
2 changed files with 7 additions and 6 deletions

View File

@ -330,16 +330,17 @@ abstract class AbstractRecord extends AbstractStore implements Record {
@Override
public final <T> void set(Field<T> field, T value) {
if (isEmbeddable(field) && value instanceof EmbeddableRecord) {
if (isEmbeddable(field)) {
Field<?>[] f = embeddedFields(field);
Object[] v = ((EmbeddableRecord) value).intoArray();
Object[] v = value instanceof EmbeddableRecord
? ((EmbeddableRecord) value).intoArray()
: new Object[f.length];
for (int i = 0; i < f.length; i++)
set(indexOrFail(fields, f[i]), f[i], v[i]);
}
else {
else
set(indexOrFail(fields, field), field, value);
}
}
final void set(int index, Field<?> field, Object value) {

View File

@ -5337,7 +5337,7 @@ final class Tools {
static final boolean isEmbeddable(Field<?> field) {
return field instanceof EmbeddableTableField
|| field instanceof Val && ((Val<?>) field).value instanceof EmbeddableRecord;
|| field instanceof Val && EmbeddableRecord.class.isAssignableFrom(field.getType());
}
@SuppressWarnings("unchecked")
@ -5391,7 +5391,7 @@ final class Tools {
return (List<E>) Arrays.asList(((EmbeddableTableField<?, ?>) e).fields);
}
};
else if (field instanceof Val && ((Val<?>) field).getValue() instanceof EmbeddableRecord)
else if (field instanceof Val && EmbeddableRecord.class.isAssignableFrom(field.getType()))
return new FlatteningIterator<E>(it) {
@Override
List<E> flatten(E e) {