diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 6596565829..0536f57af2 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -7179,11 +7179,10 @@ final class ParserImpl implements Parser { try { if (peekSelect(ctx, true)) { SelectQueryImpl 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) { diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java index 29a508f2a1..2a9cc4576a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -374,12 +374,7 @@ final class SelectQueryImpl extends AbstractResultQuery imp @SuppressWarnings("unchecked") @Override public final Field asField() { - List> s = getSelect(); - - if (s.size() != 1) - throw new IllegalStateException("Can only use single-column ResultProviderQuery as a field"); - - return new ScalarSubquery<>(this, (DataType) s.get(0).getDataType()); + return new ScalarSubquery<>(this, (DataType) Tools.scalarType(this)); } @Override @@ -2707,6 +2702,14 @@ final class SelectQueryImpl extends AbstractResultQuery imp + + + + + + + + diff --git a/jOOQ/src/main/java/org/jooq/impl/Tools.java b/jOOQ/src/main/java/org/jooq/impl/Tools.java index 8a7961ab4d..63ff22e4ff 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tools.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tools.java @@ -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> 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 */