diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java index aec73e880b..cf96d21c0f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java @@ -3782,6 +3782,8 @@ public class DefaultBinding implements Binding { static final R readMultiset(BindingGetResultSetContext ctx, DataType type) throws SQLException { return DefaultResultBinding.readMultiset(ctx, (AbstractRow) type.getRow(), type.getType(), + + // [#12930] Tricky to patch a byte[]. We're patching it in JSONReader, instead b -> b, s -> s.startsWith("[") || s.startsWith("{") ? "[" + s + "]" : s, s -> s.startsWith("<") ? "" + s + "" : s diff --git a/jOOQ/src/main/java/org/jooq/impl/JSONReader.java b/jOOQ/src/main/java/org/jooq/impl/JSONReader.java index a6518d517e..bcbb7a0a5e 100644 --- a/jOOQ/src/main/java/org/jooq/impl/JSONReader.java +++ b/jOOQ/src/main/java/org/jooq/impl/JSONReader.java @@ -51,13 +51,12 @@ import static org.jooq.tools.StringUtils.defaultIfBlank; import java.io.Reader; import java.io.StringReader; import java.util.ArrayList; +import java.util.Arrays; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import jakarta.xml.bind.DatatypeConverter; - import org.jooq.DSLContext; import org.jooq.Field; import org.jooq.Fields; @@ -66,6 +65,8 @@ import org.jooq.Result; import org.jooq.tools.json.ContainerFactory; import org.jooq.tools.json.JSONParser; +import jakarta.xml.bind.DatatypeConverter; + /** * A very simple JSON reader based on Simple JSON. * @@ -154,6 +155,14 @@ final class JSONReader { result = new ResultImpl<>(ctx.configuration(), actualRow); if (records != null) { + + // [#12930] Nested ROW emulations can produce scalar values + // when they're of degree 1. This is patched + if (!records.isEmpty() + && !(records.get(0) instanceof Map) + && !(records.get(0) instanceof List)) + records = asList(records); + for (Object o3 : records) { if (o3 instanceof Map) { Map record = (Map) o3;