diff --git a/jOOQ/src/main/java/org/jooq/impl/Interpreter.java b/jOOQ/src/main/java/org/jooq/impl/Interpreter.java index 0a6e35edd0..3f78cebd79 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Interpreter.java +++ b/jOOQ/src/main/java/org/jooq/impl/Interpreter.java @@ -50,6 +50,7 @@ import static org.jooq.impl.DSL.name; import static org.jooq.impl.DSL.schema; import static org.jooq.impl.SQLDataType.BIGINT; import static org.jooq.impl.Tools.EMPTY_FIELD; +import static org.jooq.impl.Tools.dataTypes; import static org.jooq.impl.Tools.intersect; import static org.jooq.impl.Tools.normaliseNameCase; import static org.jooq.impl.Tools.reverseIterable; @@ -810,9 +811,9 @@ final class Interpreter { return; } - List> columnTypes = new ArrayList<>(); - for (Field f : (query.$select() != null ? query.$select().getSelect() : asList(query.$fields()))) - columnTypes.add(f.getDataType()); + List> columnTypes = query.$select() != null + ? dataTypes(query.$select()) + : asList(dataTypes(query.$fields())); newTable(table, schema, asList(query.$fields()), columnTypes, query.$select(), null, TableOptions.view(query.$select())); } diff --git a/jOOQ/src/main/java/org/jooq/impl/Tools.java b/jOOQ/src/main/java/org/jooq/impl/Tools.java index d25db0578b..0401a3f268 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tools.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tools.java @@ -1212,6 +1212,18 @@ final class Tools { return result; } + static final DataType[] dataTypes(Field[] fields) { + if (fields == null) + return null; + + DataType[] result = new DataType[fields.length]; + + for (int i = 0; i < fields.length; i++) + result[i] = fields[i].getDataType(); + + return result; + } + // ------------------------------------------------------------------------ // XXX: General utility methods // ------------------------------------------------------------------------ @@ -3138,25 +3150,34 @@ final class Tools { return select.getSelect().size(); } + static final List> dataTypes(Select select) { + + + + + + + + + + + + + + List> result = new ArrayList<>(); + for (Field f : select.getSelect()) + result.add(f.getDataType()); + + return result; + } + static final DataType scalarType(Select select) { - - - - - - - - - - - - - List> list = select.getSelect(); + List> list = dataTypes(select); if (list.size() != 1) throw new IllegalStateException("Only single-column selects have a scalar type"); - return list.get(0).getDataType(); + return list.get(0); } /**