[jOOQ/jOOQ#13411] Expand asterisks in the presence of hidden fields

This commit is contained in:
Lukas Eder 2024-01-23 14:46:47 +01:00
parent f57f1e494d
commit 57e529b916
3 changed files with 42 additions and 9 deletions

View File

@ -82,6 +82,9 @@ final class FieldsImpl<R extends Record> 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<R extends Record> 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<?>>?
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;
}

View File

@ -4159,23 +4159,34 @@ final class SelectQueryImpl<R extends Record> extends AbstractResultQuery<R> 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<Field<?>>) a.$except()));
else
result.add(s);

View File

@ -6669,6 +6669,16 @@ final class Tools {
}
}
static final boolean hasEmbeddedFields(Field<?>[] fields) {
return anyMatch(fields, f -> f.getDataType().isEmbeddable());
}