diff --git a/jOOQ/src/main/java/org/jooq/impl/FieldsImpl.java b/jOOQ/src/main/java/org/jooq/impl/FieldsImpl.java index a7673dce0c..d69c22fcaa 100644 --- a/jOOQ/src/main/java/org/jooq/impl/FieldsImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/FieldsImpl.java @@ -82,6 +82,9 @@ final class FieldsImpl extends AbstractQueryPart implements Re private static final JooqLogger log = JooqLogger.getLogger(FieldsImpl.class); Field[] fields; + + + FieldsImpl(SelectField... fields) { this.fields = Tools.map(fields, toField(), Field[]::new); } @@ -551,13 +554,22 @@ final class FieldsImpl extends AbstractQueryPart implements Re + + + + + + fields = add0(fields, f); + } + + private static final Field[] add0(Field[] fields, Field field) { + // TODO: [#10481] Can we replace our internal Field[] by an ArrayList>? Field[] result = new Field[fields.length + 1]; System.arraycopy(fields, 0, result, 0, fields.length); - result[fields.length] = f; - - fields = result; + result[fields.length] = field; + return result; } diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java index d0a2cf6f40..c0ef862777 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -4159,23 +4159,34 @@ final class SelectQueryImpl extends AbstractResultQuery imp appendResolveSomeAsterisks0(ctx, resolveSupported, result, resolveExcept, resolveUnqualifiedCombined, list, j.$table1().asterisk()); appendResolveSomeAsterisks0(ctx, resolveSupported, result, resolveExcept, resolveUnqualifiedCombined, list, j.$table2().asterisk()); } - else if (q.$except().isEmpty()) - if (resolveSupported) + else if (q.$except().isEmpty()) { + if (resolveSupported + + ) result.addAll(asList(q.qualifier().fields())); else result.add(s); - else if (resolveExcept) + } + else if (resolveExcept + + ) result.addAll(subtract(asList(q.qualifier().fields()), q.$except())); else result.add(s); } else if (s instanceof Asterisk a) { - if (a.$except().isEmpty()) - if (resolveSupported || resolveUnqualifiedCombined && list.size() > 1) + if (a.$except().isEmpty()) { + if (resolveSupported + || resolveUnqualifiedCombined && list.size() > 1 + + ) result.addAll(resolveAsterisk(new QueryPartList<>())); else result.add(s); - else if (resolveExcept) + } + else if (resolveExcept + + ) result.addAll(resolveAsterisk(new QueryPartList<>(), (QueryPartListView>) a.$except())); else result.add(s); diff --git a/jOOQ/src/main/java/org/jooq/impl/Tools.java b/jOOQ/src/main/java/org/jooq/impl/Tools.java index e6492320c3..104d49d41e 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tools.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tools.java @@ -6669,6 +6669,16 @@ final class Tools { } } + + + + + + + + + + static final boolean hasEmbeddedFields(Field[] fields) { return anyMatch(fields, f -> f.getDataType().isEmbeddable()); }