diff --git a/jOOQ/src/main/java/org/jooq/impl/MetaDataFieldProvider.java b/jOOQ/src/main/java/org/jooq/impl/MetaDataFieldProvider.java index eafe0ed11a..5888cfd88c 100644 --- a/jOOQ/src/main/java/org/jooq/impl/MetaDataFieldProvider.java +++ b/jOOQ/src/main/java/org/jooq/impl/MetaDataFieldProvider.java @@ -48,6 +48,7 @@ import org.jooq.Name; import org.jooq.Record; import org.jooq.exception.SQLDialectNotSupportedException; import org.jooq.tools.JooqLogger; +import org.jooq.tools.StringUtils; /** * A FieldProvider providing fields for a JDBC @@ -104,7 +105,14 @@ final class MetaDataFieldProvider implements Serializable { try { String columnSchema = meta.getSchemaName(i); String columnTable = meta.getTableName(i); - name = name(columnSchema, columnTable, columnName); + + // [#6691] Prevent excessive String[] allocations if names are unqualified / partially qualified + if (!StringUtils.isEmpty(columnSchema)) + name = name(columnSchema, columnTable, columnName); + else if (!StringUtils.isEmpty(columnTable)) + name = name(columnTable, columnName); + else + name = name(columnName); } // [#4939] Some JDBC drivers such as Teradata and Cassandra don't implement diff --git a/jOOQ/src/main/java/org/jooq/impl/Tools.java b/jOOQ/src/main/java/org/jooq/impl/Tools.java index 752183bc4f..09a07141c2 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tools.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tools.java @@ -1022,7 +1022,7 @@ final class Tools { Field[] result = new Field[fieldNames.length]; - if (tableName == null) + if (StringUtils.isEmpty(tableName)) for (int i = 0; i < fieldNames.length; i++) result[i] = DSL.field(name(fieldNames[i])); else