diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java index f6a1390e62..703a683d26 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java @@ -458,6 +458,7 @@ public class JavaGenerator extends AbstractGenerator { return true; if (database.getArrays(schema).isEmpty() + && database.getDomains(schema).isEmpty() && database.getEnums(schema).isEmpty() && database.getPackages(schema).isEmpty() && database.getRoutines(schema).isEmpty() diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java index 29fc8c6fdc..4ed6ea52cd 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java @@ -2168,10 +2168,8 @@ public abstract class AbstractDatabase implements Database { protected final List filterSchema(List definitions, SchemaDefinition schema, Map> cache) { List result = cache.get(schema); - if (result == null) { - result = filterSchema(definitions, schema); - cache.put(schema, result); - } + if (result == null) + cache.put(schema, result = filterSchema(definitions, schema)); return result; } diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/DefaultDomainDefinition.java b/jOOQ-meta/src/main/java/org/jooq/meta/DefaultDomainDefinition.java index 354975dad0..a36e09f080 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/DefaultDomainDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/DefaultDomainDefinition.java @@ -67,11 +67,13 @@ implements DomainDefinition { } public void addCheckClause(String checkClause) { - checkClauses.add(checkClause); + if (checkClause != null) + checkClauses.add(checkClause); } public void addCheckClause(String... checkClause) { - checkClauses.addAll(Arrays.asList(checkClause)); + if (checkClause != null) + checkClauses.addAll(Arrays.asList(checkClause)); } @Override diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresDatabase.java b/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresDatabase.java index 77abdc8175..49c362747b 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresDatabase.java @@ -61,10 +61,12 @@ import static org.jooq.impl.DSL.select; import static org.jooq.impl.DSL.when; import static org.jooq.impl.SQLDataType.BOOLEAN; import static org.jooq.impl.SQLDataType.DECIMAL_INTEGER; +import static org.jooq.impl.SQLDataType.INTEGER; import static org.jooq.impl.SQLDataType.VARCHAR; import static org.jooq.meta.postgres.information_schema.Tables.ATTRIBUTES; import static org.jooq.meta.postgres.information_schema.Tables.CHECK_CONSTRAINTS; import static org.jooq.meta.postgres.information_schema.Tables.COLUMNS; +import static org.jooq.meta.postgres.information_schema.Tables.DOMAINS; import static org.jooq.meta.postgres.information_schema.Tables.KEY_COLUMN_USAGE; import static org.jooq.meta.postgres.information_schema.Tables.PARAMETERS; import static org.jooq.meta.postgres.information_schema.Tables.ROUTINES; @@ -724,7 +726,7 @@ public class PostgresDatabase extends AbstractDatabase { oid(d), oid(d), d.TYPBASETYPE, - array(constraintDef) + when(oid(c).isNotNull(), array(constraintDef)) ) .from(d) .join(n) @@ -754,7 +756,11 @@ public class PostgresDatabase extends AbstractDatabase { d.TYPNOTNULL, d.TYPDEFAULT, b.TYPNAME, - b.TYPLEN, + + // See https://github.com/postgres/postgres/blob/master/src/backend/catalog/information_schema.sql + field("information_schema._pg_char_max_length({0}, {1})", INTEGER, d.TYPBASETYPE, d.TYPTYPMOD).as(DOMAINS.CHARACTER_MAXIMUM_LENGTH), + field("information_schema._pg_numeric_precision({0}, {1})", INTEGER, d.TYPBASETYPE, d.TYPTYPMOD).as(DOMAINS.NUMERIC_PRECISION), + field("information_schema._pg_numeric_scale({0}, {1})", INTEGER, d.TYPBASETYPE, d.TYPTYPMOD).as(DOMAINS.NUMERIC_SCALE), src) .from(d) .join(name("domains")) @@ -774,9 +780,9 @@ public class PostgresDatabase extends AbstractDatabase { this, schema, record.get(b.TYPNAME), - record.get(b.TYPLEN), - record.get(b.TYPLEN), - 0, // ? + record.get(DOMAINS.CHARACTER_MAXIMUM_LENGTH), + record.get(DOMAINS.NUMERIC_PRECISION), + record.get(DOMAINS.NUMERIC_SCALE), !record.get(d.TYPNOTNULL, boolean.class), record.get(d.TYPDEFAULT), name(