[jOOQ/jOOQ#15097] Compilation error in Oracle generated code for package type in PL/SQL RECORD constructor

This commit is contained in:
Lukas Eder 2023-05-24 11:24:00 +02:00
parent 11e38fc938
commit 3cd2dd559a

View File

@ -2255,6 +2255,8 @@ public class JavaGenerator extends AbstractGenerator {
final boolean isUDT = t.getType(r).isUDT();
final boolean isArray = t.getType(r).isArray();
final boolean isUDTArray = t.getType(r).isUDTArray();
final ArrayDefinition array = database.getArray(t.getType(r).getSchema(), t.getType(r).getQualifiedUserType());
final String indexTypeFull = array == null || array.getIndexType() == null ? null : getJavaType(array.getIndexType(resolver(out)), out);
final boolean isArrayOfUDTs = isArrayOfUDTs(t, r);
final String udtType = (isUDT || isArray)
@ -2333,15 +2335,21 @@ public class JavaGenerator extends AbstractGenerator {
else {
if (pojoArgument) {
if (isUDTArray) {
out.println("%s(value.%s() == null ? null : new %s(value.%s().stream().map(%s::new).collect(%s.toList())));",
getStrategy().getJavaSetterName(column, Mode.RECORD),
getStrategy().getJavaGetterName(column, Mode.POJO),
udtType,
generatePojosAsJavaRecordClasses()
? getStrategy().getJavaMemberName(column, Mode.POJO)
: getStrategy().getJavaGetterName(column, Mode.POJO),
udtArrayElementType,
Collectors.class);
if (indexTypeFull == null) {
out.println("%s(value.%s() == null ? null : new %s(value.%s().stream().map(%s::new).collect(%s.toList())));",
getStrategy().getJavaSetterName(column, Mode.RECORD),
getStrategy().getJavaGetterName(column, Mode.POJO),
udtType,
generatePojosAsJavaRecordClasses()
? getStrategy().getJavaMemberName(column, Mode.POJO)
: getStrategy().getJavaGetterName(column, Mode.POJO),
udtArrayElementType,
Collectors.class);
}
else {
out.println("if (true)");
out.println("throw new %s(\"Cannot use POJO constructor for POJO that references Oracle associative array yet. See https://github.com/jOOQ/jOOQ/issues/15108 for details.\");", UnsupportedOperationException.class);
}
}
else if (isArrayOfUDTs) {
final String columnTypeFull = getJavaType(t.getType(resolver(out, Mode.POJO)), out, Mode.POJO);
@ -6329,33 +6337,29 @@ public class JavaGenerator extends AbstractGenerator {
out.println("});");
}
else
out.println("this(alias, aliased, (%s<?>[]) null);", Field.class);
out.println("this(alias, aliased, (%s<?>[]) null, null);", Field.class);
out.println("}");
out.println();
out.println("private %s(%s alias, %s<%s> aliased, %s<?>[] parameters) {", className, Name.class, Table.class, recordType, Field.class);
if ((generateSourcesOnViews() || table.isSynthetic()) && table.isView() && table.getSource() != null)
out.println("super(alias, null, aliased, parameters, %s.comment(\"%s\"), %s.%s(%s));", DSL.class, escapeString(comment(table)), TableOptions.class, tableType, textBlock(table.getSource()));
else if (table.isSynthetic() && table.isTableValuedFunction() && table.getSource() != null)
out.println("super(alias, null, aliased, parameters, %s.comment(\"%s\"), %s.%s(%s));", DSL.class, escapeString(comment(table)), TableOptions.class, tableType, textBlock(table.getSource()));
else
out.println("super(alias, null, aliased, parameters, %s.comment(\"%s\"), %s.%s());", DSL.class, escapeString(comment(table)), TableOptions.class, tableType);
out.println("}");
if (generateWhereMethodOverrides() && !table.isTableValuedFunction()) {
if (table.isTableValuedFunction()) {
out.println();
out.println("private %s(%s alias, %s<%s> aliased, %s where) {", className, Name.class, Table.class, recordType, Condition.class);
if ((generateSourcesOnViews() || table.isSynthetic()) && table.isView() && table.getSource() != null)
out.println("super(alias, null, aliased, null, %s.comment(\"%s\"), %s.%s(%s), where);", DSL.class, escapeString(comment(table)), TableOptions.class, tableType, textBlock(table.getSource()));
else
out.println("super(alias, null, aliased, null, %s.comment(\"%s\"), %s.%s(), where);", DSL.class, escapeString(comment(table)), TableOptions.class, tableType);
out.println("private %s(%s alias, %s<%s> aliased, %s<?>[] parameters) {", className, Name.class, Table.class, recordType, Field.class);
out.println("this(alias, aliased, parameters, null);");
out.println("}");
}
out.println();
out.println("private %s(%s alias, %s<%s> aliased, %s<?>[] parameters, %s where) {", className, Name.class, Table.class, recordType, Field.class, Condition.class);
if ((generateSourcesOnViews() || table.isSynthetic()) && table.isView() && table.getSource() != null)
out.println("super(alias, null, aliased, parameters, %s.comment(\"%s\"), %s.%s(%s), where);", DSL.class, escapeString(comment(table)), TableOptions.class, tableType, textBlock(table.getSource()));
else if (table.isSynthetic() && table.isTableValuedFunction() && table.getSource() != null)
out.println("super(alias, null, aliased, parameters, %s.comment(\"%s\"), %s.%s(%s), where);", DSL.class, escapeString(comment(table)), TableOptions.class, tableType, textBlock(table.getSource()));
else
out.println("super(alias, null, aliased, parameters, %s.comment(\"%s\"), %s.%s(), where);", DSL.class, escapeString(comment(table)), TableOptions.class, tableType);
out.println("}");
}
if (scala) {
@ -7227,7 +7231,7 @@ public class JavaGenerator extends AbstractGenerator {
idt.accept(() -> {
out.println("%s%s where(%s condition) {", visibilityPublic(), className, Condition.class);
out.println("return new %s(getQualifiedName(), aliased() ? this : null, condition);", className);
out.println("return new %s(getQualifiedName(), aliased() ? this : null, null, condition);", className);
out.println("}");
});
idt.accept(() -> {