[jOOQ/jOOQ#10565] Support parsing FOR XML as scalar subqueries
This commit is contained in:
parent
5aeadd3017
commit
520892d5fa
@ -7179,11 +7179,10 @@ final class ParserImpl implements Parser {
|
||||
try {
|
||||
if (peekSelect(ctx, true)) {
|
||||
SelectQueryImpl<Record> select = parseSelect(ctx);
|
||||
if (select.getSelect().size() != 1)
|
||||
if (Tools.degree(select) != 1)
|
||||
throw ctx.exception("Select list must contain exactly one column");
|
||||
|
||||
field = field((Select) select);
|
||||
return field;
|
||||
return field((Select) select);
|
||||
}
|
||||
}
|
||||
catch (ParserException e) {
|
||||
|
||||
@ -374,12 +374,7 @@ final class SelectQueryImpl<R extends Record> extends AbstractResultQuery<R> imp
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public final <T> Field<T> asField() {
|
||||
List<Field<?>> s = getSelect();
|
||||
|
||||
if (s.size() != 1)
|
||||
throw new IllegalStateException("Can only use single-column ResultProviderQuery as a field");
|
||||
|
||||
return new ScalarSubquery<>(this, (DataType<T>) s.get(0).getDataType());
|
||||
return new ScalarSubquery<>(this, (DataType<T>) Tools.scalarType(this));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -2707,6 +2702,14 @@ final class SelectQueryImpl<R extends Record> extends AbstractResultQuery<R> imp
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -150,7 +150,10 @@ import static org.jooq.impl.Keywords.K_THROW;
|
||||
import static org.jooq.impl.Keywords.K_WHEN;
|
||||
import static org.jooq.impl.SQLDataType.BLOB;
|
||||
import static org.jooq.impl.SQLDataType.CLOB;
|
||||
import static org.jooq.impl.SQLDataType.JSON;
|
||||
import static org.jooq.impl.SQLDataType.JSONB;
|
||||
import static org.jooq.impl.SQLDataType.VARCHAR;
|
||||
import static org.jooq.impl.SQLDataType.XML;
|
||||
import static org.jooq.impl.Tools.DataCacheKey.DATA_REFLECTION_CACHE_GET_ANNOTATED_GETTER;
|
||||
import static org.jooq.impl.Tools.DataCacheKey.DATA_REFLECTION_CACHE_GET_ANNOTATED_MEMBERS;
|
||||
import static org.jooq.impl.Tools.DataCacheKey.DATA_REFLECTION_CACHE_GET_ANNOTATED_SETTERS;
|
||||
@ -3124,6 +3127,38 @@ final class Tools {
|
||||
return null;
|
||||
}
|
||||
|
||||
static final int degree(Select<?> select) {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return select.getSelect().size();
|
||||
}
|
||||
|
||||
static final DataType<?> scalarType(Select<?> select) {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
List<Field<?>> list = select.getSelect();
|
||||
|
||||
if (list.size() != 1)
|
||||
throw new IllegalStateException("Only single-column selects have a scalar type");
|
||||
|
||||
return list.get(0).getDataType();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add primary key conditions to a query
|
||||
*/
|
||||
|
||||
Loading…
Reference in New Issue
Block a user