[jOOQ/jOOQ#14657] Nesting MULTISET/ROW/MULTISET/ROW with ad-hoc converters and JSON emulation results in ClassCastException

This commit is contained in:
Lukas Eder 2023-03-03 10:51:33 +01:00
parent a5cc3b03ad
commit 57204a93cc

View File

@ -278,8 +278,8 @@ final class JSONReader<R extends Record> {
record.set(i, Base64.getDecoder().decode(s));
}
// [#12155] Recurse for nested data types
else if (multiset && field.getDataType().isMultiset())
// [#12155] Recurse for nested MULTISET
else if (multiset && field.getDataType().isMultiset()) {
record.set(i, read(
ctx,
(AbstractRow) field.getDataType().getRow(),
@ -287,6 +287,21 @@ final class JSONReader<R extends Record> {
multiset,
record.get(i)
));
}
// [#14657] Recurse for nested ROW
else if (multiset && field.getDataType().isRecord() && record.get(i) instanceof List) {
AbstractRow<? extends Record> actualRow = (AbstractRow) field.getDataType().getRow();
Class<? extends Record> recordType = field.getDataType().getRecordType();
List<Object> l = (List<Object>) record.get(i);
patchRecord(ctx, multiset, actualRow, l);
record.set(i, newRecord(true, recordType, actualRow, ctx.configuration()).operate(r -> {
r.from(l);
r.changed(false);
return r;
}));
}
}
return record;