diff --git a/jOOQ/src/main/java/org/jooq/impl/ArrayDataType.java b/jOOQ/src/main/java/org/jooq/impl/ArrayDataType.java index 9ae2984598..1bffdcbd71 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ArrayDataType.java +++ b/jOOQ/src/main/java/org/jooq/impl/ArrayDataType.java @@ -52,7 +52,7 @@ final class ArrayDataType extends DefaultDataType { */ private static final long serialVersionUID = 7883229760246533448L; - private final DataType elementType; + final DataType elementType; public ArrayDataType(DataType elementType) { super(null, elementType.getArrayType(), elementType.getTypeName(), elementType.getCastTypeName()); diff --git a/jOOQ/src/main/java/org/jooq/impl/Tools.java b/jOOQ/src/main/java/org/jooq/impl/Tools.java index 3aeee7c7c3..beb7de1a07 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tools.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tools.java @@ -4306,6 +4306,9 @@ final class Tools { } static final void toSQLDDLTypeDeclaration(Context ctx, DataType type) { + DataType elementType = (type instanceof ArrayDataType) + ? ((ArrayDataType) type).elementType + : type; // In some databases, identity is a type, not a flag. if (type.identity()) { @@ -4372,7 +4375,9 @@ final class Tools { } String typeName = type.getTypeName(ctx.configuration()); - if (type.hasLength()) { + + // [#8070] Make sure VARCHAR(n) ARRAY types are generated as such in HSQLDB + if (type.hasLength() || elementType.hasLength()) { // [#6289] [#7191] Some databases don't support lengths on binary types if (type.isBinary() && NO_SUPPORT_BINARY_TYPE_LENGTH.contains(ctx.family()))