[jOOQ/jOOQ#7070] Add code generation support for PostgreSQL types referencing domains

This commit is contained in:
Lukas Eder 2020-08-07 15:05:28 +02:00
parent f832758b7f
commit 79d60d0700
4 changed files with 18 additions and 11 deletions

View File

@ -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()

View File

@ -2168,10 +2168,8 @@ public abstract class AbstractDatabase implements Database {
protected final <T extends Definition> List<T> filterSchema(List<T> definitions, SchemaDefinition schema, Map<SchemaDefinition, List<T>> cache) {
List<T> 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;
}

View File

@ -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

View File

@ -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(