diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java index 2683ecb6f7..f35ea70bff 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java @@ -3789,11 +3789,26 @@ public class DefaultBinding implements Binding { return (Record) ctx.input().readObject(); } + @SuppressWarnings({ "unchecked", "rawtypes" }) static final R readMultiset(BindingGetResultSetContext ctx, DataType type) throws SQLException { - Result result = DefaultResultBinding.readMultiset(ctx, (AbstractRow) type.getRow(), type.getType(), - s -> s != null && (s.startsWith("[") || s.startsWith("{")) ? "[" + s + "]" : s, - s -> s != null && (s.startsWith("<")) ? "" + s + "" : s - ); + AbstractRow row = (AbstractRow) type.getRow(); + Result result; + + // [#12930] AbstractRowAsSubquery doesn't unnecessarily nest Row1 + if (row.size() == 1) { + result = new ResultImpl<>(ctx.configuration(), row); + result.add(newRecord(true, (Class) type.getRecordType(), row, ctx.configuration()).operate(r -> { + DefaultBindingGetResultSetContext c = new DefaultBindingGetResultSetContext<>(ctx.executeContext(), ctx.resultSet(), ctx.index()); + r.field(0).getBinding().get((BindingGetResultSetContext) c); + r.fromArray(c.value()); + return r; + })); + } + else + result = DefaultResultBinding.readMultiset(ctx, row, type.getType(), + s -> s != null && (s.startsWith("[") || s.startsWith("{")) ? "[" + s + "]" : s, + s -> s != null && (s.startsWith("<")) ? "" + s + "" : s + ); return isEmpty(result) ? null : result.get(0); }