[jOOQ/jOOQ#5799] Fix regressions in ORACLE dialect

This commit is contained in:
Lukas Eder 2022-12-15 17:10:17 +01:00
parent 2b9b352ec1
commit cc2e45792b

View File

@ -82,13 +82,21 @@ implements
ArrayTable(Field<?> array, Name alias) {
// [#7863] TODO: Possibly resolve field aliases from UDT type
this(array, alias, null);
this(array, alias, (Name[]) null);
}
@SuppressWarnings({ "unchecked" })
ArrayTable(Field<?> array, Name alias, Name[] fieldAliases) {
super(alias, fieldAliases(fieldAliases));
this(array, alias, init(arrayType(array), alias, fieldAliases(fieldAliases)[0]));
}
private ArrayTable(Field<?> array, Name alias, FieldsImpl<Record> fields) {
super(alias, Tools.map(fields.fields, Field::getUnqualifiedName, Name[]::new));
this.array = array;
this.field = fields;
}
private static final Class<?> arrayType(Field<?> array) {
Class<?> arrayType;
if (array.getDataType().getType().isArray())
@ -112,11 +120,10 @@ implements
else
arrayType = Object.class;
this.array = array;
this.field = init(arrayType, this.alias, this.fieldAliases[0]);
return arrayType;
}
static Name[] fieldAliases(Name[] fieldAliases) {
static final Name[] fieldAliases(Name[] fieldAliases) {
return isEmpty(fieldAliases) ? new Name[] { N_COLUMN_VALUE } : fieldAliases;
}
@ -127,7 +134,7 @@ implements
try {
return new FieldsImpl<>(map(
((Record) arrayType.getDeclaredConstructor().newInstance()).fields(),
f -> DSL.field(name(alias.last(), f.getName()), f.getDataType())
f -> DSL.field(alias.append(f.getUnqualifiedName()), f.getDataType())
));
}
catch (Exception e) {
@ -215,7 +222,7 @@ implements
else
return DSL.table("{0}", array).as(alias);
return DSL.table("{0}", array);
// [#756] The standard SQL behaviour
default: