From 49c9f50d12d7a5d7151c572c094d9c4b7fb1b93d Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 25 Nov 2022 12:58:25 +0100 Subject: [PATCH] [jOOQ/jOOQ#7841] DSL.asterisk() does not work well with plain SQL --- .../src/main/java/org/jooq/impl/SelectQueryImpl.java | 12 +++++++++++- 1 file changed, 11 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 47e45cd56d..7b9cba84c1 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -3730,7 +3730,8 @@ final class SelectQueryImpl extends AbstractResultQuery imp // [#7921] TODO Find a better, more efficient way to resolve asterisks SelectFieldList list = getSelectResolveImplicitAsterisks(); - for (SelectFieldOrAsterisk s : list) + int size = 0; + for (SelectFieldOrAsterisk s : list) { if (s instanceof Field f) result.add(getResolveProjection(ctx, f)); else if (s instanceof QualifiedAsteriskImpl q) { @@ -3762,6 +3763,15 @@ final class SelectQueryImpl extends AbstractResultQuery imp else throw new AssertionError("Type not supported: " + s); + // [#7841] Each iteration must contribute new fields to the result. + // Otherwise, we couldn't resolve an asterisk, and must fall + // back to determining fields from the ResultSetMetaData + if (size == result.size()) + return new SelectFieldList<>(); + else + size = result.size(); + } + return result; }