[jOOQ/jOOQ#17791] Code generator should generate type comments on
generated enums and UDTs
This commit is contained in:
parent
9c825bbd77
commit
eb1ef8d93b
@ -50,7 +50,11 @@ public class DefaultAttributeDefinition extends AbstractTypedElementDefinition<U
|
||||
private final int position;
|
||||
|
||||
public DefaultAttributeDefinition(UDTDefinition udt, String name, int position, DataTypeDefinition type) {
|
||||
super(udt, name, position, type, null);
|
||||
this(udt, name, position, type, null);
|
||||
}
|
||||
|
||||
public DefaultAttributeDefinition(UDTDefinition udt, String name, int position, DataTypeDefinition type, String comment) {
|
||||
super(udt, name, position, type, comment);
|
||||
|
||||
this.position = position;
|
||||
}
|
||||
|
||||
@ -862,7 +862,7 @@ public class PostgresDatabase extends AbstractDatabase implements ResultQueryDat
|
||||
return null;
|
||||
}
|
||||
|
||||
static record Identifier(String schema, String name) {}
|
||||
static record Identifier(String schema, String name, String comment) {}
|
||||
|
||||
@Override
|
||||
protected List<EnumDefinition> getEnums0() throws SQLException {
|
||||
@ -877,14 +877,20 @@ public class PostgresDatabase extends AbstractDatabase implements ResultQueryDat
|
||||
for (Identifier type : create()
|
||||
.select(
|
||||
PG_TYPE.pgNamespace().NSPNAME,
|
||||
PG_TYPE.TYPNAME)
|
||||
PG_TYPE.TYPNAME,
|
||||
PG_DESCRIPTION.DESCRIPTION)
|
||||
.from(PG_TYPE)
|
||||
.leftJoin(PG_DESCRIPTION)
|
||||
.on(PG_TYPE.OID.eq(PG_DESCRIPTION.OBJOID))
|
||||
.and(PG_DESCRIPTION.CLASSOID.eq(field("'pg_type'::regclass", BIGINT)))
|
||||
.and(PG_DESCRIPTION.OBJSUBID.eq(0))
|
||||
.where(PG_TYPE.pgNamespace().NSPNAME.in(getInputSchemata()))
|
||||
.and(PG_TYPE.OID.in(select(PG_ENUM.ENUMTYPID).from(PG_ENUM)))
|
||||
.orderBy(
|
||||
PG_TYPE.pgNamespace().NSPNAME,
|
||||
PG_TYPE.TYPNAME)
|
||||
.fetch(mapping(Identifier::new))) {
|
||||
.fetch(mapping(Identifier::new))
|
||||
) {
|
||||
DefaultEnumDefinition definition = null;
|
||||
|
||||
for (String label : enumLabels(type.schema, type.name)) {
|
||||
@ -892,7 +898,7 @@ public class PostgresDatabase extends AbstractDatabase implements ResultQueryDat
|
||||
String typeName = String.valueOf(type.name);
|
||||
|
||||
if (definition == null || !definition.getName().equals(typeName)) {
|
||||
definition = new DefaultEnumDefinition(schema, typeName, null);
|
||||
definition = new DefaultEnumDefinition(schema, typeName, type.comment);
|
||||
result.add(definition);
|
||||
}
|
||||
|
||||
@ -1080,18 +1086,21 @@ public class PostgresDatabase extends AbstractDatabase implements ResultQueryDat
|
||||
if (exists(ATTRIBUTES)) {
|
||||
for (Identifier udt : create()
|
||||
.select(
|
||||
ATTRIBUTES.UDT_SCHEMA,
|
||||
ATTRIBUTES.UDT_NAME)
|
||||
.from(ATTRIBUTES)
|
||||
.where(ATTRIBUTES.UDT_SCHEMA.in(getInputSchemata()))
|
||||
|
||||
// [#14621] Work around https://github.com/yugabyte/yugabyte-db/issues/16081
|
||||
.groupBy(
|
||||
ATTRIBUTES.UDT_SCHEMA,
|
||||
ATTRIBUTES.UDT_NAME)
|
||||
PG_CLASS.pgNamespace().NSPNAME,
|
||||
PG_CLASS.RELNAME,
|
||||
PG_DESCRIPTION.DESCRIPTION)
|
||||
.from(PG_CLASS)
|
||||
.leftJoin(PG_TYPE)
|
||||
.on(PG_CLASS.RELTYPE.eq(PG_TYPE.OID))
|
||||
.leftJoin(PG_DESCRIPTION)
|
||||
.on(PG_TYPE.OID.eq(PG_DESCRIPTION.OBJOID))
|
||||
.and(PG_DESCRIPTION.CLASSOID.eq(field("'pg_type'::regclass", BIGINT)))
|
||||
.and(PG_DESCRIPTION.OBJSUBID.eq(0))
|
||||
.where(PG_CLASS.RELKIND.eq(inline("c")))
|
||||
.and(PG_CLASS.pgNamespace().NSPNAME.in(getInputSchemata()))
|
||||
.orderBy(
|
||||
ATTRIBUTES.UDT_SCHEMA,
|
||||
ATTRIBUTES.UDT_NAME)
|
||||
PG_CLASS.pgNamespace().NSPNAME,
|
||||
PG_CLASS.RELNAME)
|
||||
.fetch(mapping(Identifier::new))) {
|
||||
|
||||
SchemaDefinition schema = getSchema(udt.schema);
|
||||
|
||||
@ -38,12 +38,17 @@
|
||||
package org.jooq.meta.postgres;
|
||||
|
||||
import static org.jooq.impl.DSL.coalesce;
|
||||
import static org.jooq.impl.DSL.field;
|
||||
import static org.jooq.impl.DSL.inline;
|
||||
import static org.jooq.impl.DSL.name;
|
||||
import static org.jooq.impl.DSL.when;
|
||||
import static org.jooq.impl.SQLDataType.BIGINT;
|
||||
import static org.jooq.meta.postgres.information_schema.Tables.ATTRIBUTES;
|
||||
import static org.jooq.meta.postgres.information_schema.Tables.DOMAINS;
|
||||
import static org.jooq.meta.postgres.pg_catalog.Tables.PG_ATTRIBUTE;
|
||||
import static org.jooq.meta.postgres.pg_catalog.Tables.PG_CLASS;
|
||||
import static org.jooq.meta.postgres.pg_catalog.Tables.PG_DESCRIPTION;
|
||||
import static org.jooq.meta.postgres.pg_catalog.Tables.PG_TYPE;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
@ -91,7 +96,8 @@ public class PostgresUDTDefinition extends AbstractUDTDefinition {
|
||||
a.IS_NULLABLE,
|
||||
a.ATTRIBUTE_DEFAULT,
|
||||
a.ATTRIBUTE_UDT_SCHEMA,
|
||||
db.arrayUdtName(a.DATA_TYPE, a.ATTRIBUTE_UDT_NAME).as(a.ATTRIBUTE_UDT_NAME))
|
||||
db.arrayUdtName(a.DATA_TYPE, a.ATTRIBUTE_UDT_NAME).as(a.ATTRIBUTE_UDT_NAME),
|
||||
PG_DESCRIPTION.DESCRIPTION)
|
||||
.from(a)
|
||||
.join(pg_a)
|
||||
.on(a.ATTRIBUTE_NAME.eq(pg_a.ATTNAME))
|
||||
@ -101,10 +107,14 @@ public class PostgresUDTDefinition extends AbstractUDTDefinition {
|
||||
.on(a.ATTRIBUTE_UDT_CATALOG.eq(d.DOMAIN_CATALOG))
|
||||
.and(a.ATTRIBUTE_UDT_SCHEMA.eq(d.DOMAIN_SCHEMA))
|
||||
.and(a.ATTRIBUTE_UDT_NAME.eq(d.DOMAIN_NAME))
|
||||
.leftJoin(PG_DESCRIPTION)
|
||||
.on(pg_a.ATTRELID.eq(PG_DESCRIPTION.OBJOID))
|
||||
.and(PG_DESCRIPTION.CLASSOID.eq(field("'pg_class'::regclass", BIGINT)))
|
||||
.and(PG_DESCRIPTION.OBJSUBID.eq(pg_a.ATTNUM.coerce(PG_DESCRIPTION.OBJSUBID)))
|
||||
.where(a.UDT_SCHEMA.equal(getSchema().getName()))
|
||||
.and(a.UDT_NAME.equal(getName()))
|
||||
.orderBy(a.ORDINAL_POSITION)) {
|
||||
|
||||
.orderBy(a.ORDINAL_POSITION)
|
||||
) {
|
||||
SchemaDefinition typeSchema = null;
|
||||
|
||||
String schemaName = record.get(a.ATTRIBUTE_UDT_SCHEMA);
|
||||
@ -130,7 +140,9 @@ public class PostgresUDTDefinition extends AbstractUDTDefinition {
|
||||
this,
|
||||
record.get(a.ATTRIBUTE_NAME),
|
||||
record.get(a.ORDINAL_POSITION),
|
||||
type);
|
||||
type,
|
||||
record.get(PG_DESCRIPTION.DESCRIPTION)
|
||||
);
|
||||
|
||||
result.add(column);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user