diff --git a/jOOQ/src/main/java/org/jooq/impl/JSONReader.java b/jOOQ/src/main/java/org/jooq/impl/JSONReader.java index a923868f7a..a2f3202004 100644 --- a/jOOQ/src/main/java/org/jooq/impl/JSONReader.java +++ b/jOOQ/src/main/java/org/jooq/impl/JSONReader.java @@ -278,8 +278,8 @@ final class JSONReader { 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 { multiset, record.get(i) )); + } + + // [#14657] Recurse for nested ROW + else if (multiset && field.getDataType().isRecord() && record.get(i) instanceof List) { + AbstractRow actualRow = (AbstractRow) field.getDataType().getRow(); + Class recordType = field.getDataType().getRecordType(); + List l = (List) 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;