From ecd65dbe73dbf92287640d0a48d3c4d26ef75c84 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 5 Feb 2025 12:41:56 +0100 Subject: [PATCH] [jOOQ/jOOQ#17947] Nesting row 3 times in a SELECT .. ORDER BY .. LIMIT query leads to wrong results with dialects that emulate LIMIT or LIMIT .. WITH TIES with NestedCollectionEmulation.XML --- jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java | 5 ++++- jOOQ/src/main/java/org/jooq/impl/XMLHandler.java | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java index 41093a2d92..c49b4a368b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -2217,7 +2217,10 @@ final class SelectQueryImpl extends AbstractResultQuery imp .visit(K_FROM).sqlIndentStart(" (") .subquery(true); - toSQLReference0(ctx, new AliasOverride(originalFields, aliasedFields), null); + // [#13560] [#17947] Communicate the enforcement of MULTISET content to the CursorImpl. + if (ctx.executeContext() != null) + ctx.executeContext().data(DATA_MULTISET_CONTENT, true); + ctx.data(DATA_MULTISET_CONTENT, true, c -> toSQLReference0(c, new AliasOverride(originalFields, aliasedFields), null)); ctx.subquery(false) .sqlIndentEnd(") ") diff --git a/jOOQ/src/main/java/org/jooq/impl/XMLHandler.java b/jOOQ/src/main/java/org/jooq/impl/XMLHandler.java index 3877ed989d..0bc49c7273 100644 --- a/jOOQ/src/main/java/org/jooq/impl/XMLHandler.java +++ b/jOOQ/src/main/java/org/jooq/impl/XMLHandler.java @@ -306,6 +306,7 @@ final class XMLHandler extends DefaultHandler { if ("record".equalsIgnoreCase(qName) && f.getDataType().isRecord()) { peek.values.add(newRecord(true, s.recordType, s.row, ctx.configuration()).operate(s::into)); s = states.pop(); + s.inRecord--; break x; } else if ("result".equalsIgnoreCase(qName) && f.getDataType().isMultiset()) {