From 3613a37884e2de65020f276790eaaa6e0f9566a1 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 1 Sep 2020 15:48:40 +0200 Subject: [PATCH] [jOOQ/jOOQ#10565] Correctly interpret CREATE VIEW .. FOR XML --- .../main/java/org/jooq/impl/Interpreter.java | 7 +-- jOOQ/src/main/java/org/jooq/impl/Tools.java | 49 +++++++++++++------ 2 files changed, 39 insertions(+), 17 deletions(-) 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); } /**