[jOOQ/jOOQ#10565] Correctly interpret CREATE VIEW .. FOR XML
This commit is contained in:
parent
0e358f3970
commit
3613a37884
@ -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<DataType<?>> columnTypes = new ArrayList<>();
|
||||
for (Field<?> f : (query.$select() != null ? query.$select().getSelect() : asList(query.$fields())))
|
||||
columnTypes.add(f.getDataType());
|
||||
List<DataType<?>> 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()));
|
||||
}
|
||||
|
||||
@ -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<DataType<?>> dataTypes(Select<?> select) {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
List<DataType<?>> result = new ArrayList<>();
|
||||
for (Field<?> f : select.getSelect())
|
||||
result.add(f.getDataType());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static final DataType<?> scalarType(Select<?> select) {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
List<Field<?>> list = select.getSelect();
|
||||
List<DataType<?>> 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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Loading…
Reference in New Issue
Block a user