[jOOQ/jOOQ#15673] Domains aren't generated if they don't have a CHECK constraint associated with them, in HSQLDB

This commit is contained in:
Lukas Eder 2023-10-03 11:28:34 +02:00
parent f5315bec35
commit 9fa41c4743

View File

@ -40,6 +40,7 @@ package org.jooq.meta.hsqldb;
import static org.jooq.Records.mapping;
import static org.jooq.impl.DSL.case_;
import static org.jooq.impl.DSL.coalesce;
import static org.jooq.impl.DSL.decode;
import static org.jooq.impl.DSL.falseCondition;
import static org.jooq.impl.DSL.field;
@ -57,6 +58,7 @@ import static org.jooq.impl.SQLDataType.NUMERIC;
import static org.jooq.impl.SQLDataType.VARCHAR;
import static org.jooq.meta.hsqldb.information_schema.Tables.CHECK_CONSTRAINTS;
import static org.jooq.meta.hsqldb.information_schema.Tables.COLUMNS;
import static org.jooq.meta.hsqldb.information_schema.Tables.DOMAINS;
import static org.jooq.meta.hsqldb.information_schema.Tables.DOMAIN_CONSTRAINTS;
import static org.jooq.meta.hsqldb.information_schema.Tables.ELEMENT_TYPES;
import static org.jooq.meta.hsqldb.information_schema.Tables.KEY_COLUMN_USAGE;
@ -125,6 +127,7 @@ import org.jooq.meta.XMLSchemaCollectionDefinition;
import org.jooq.meta.hsqldb.information_schema.tables.CheckConstraints;
import org.jooq.meta.hsqldb.information_schema.tables.Columns;
import org.jooq.meta.hsqldb.information_schema.tables.DomainConstraints;
import org.jooq.meta.hsqldb.information_schema.tables.Domains;
import org.jooq.meta.hsqldb.information_schema.tables.KeyColumnUsage;
import org.jooq.meta.hsqldb.information_schema.tables.Triggers;
import org.jooq.tools.JooqLogger;
@ -574,38 +577,43 @@ public class HSQLDBDatabase extends AbstractDatabase implements ResultQueryDatab
protected List<DomainDefinition> getDomains0() throws SQLException {
List<DomainDefinition> result = new ArrayList<>();
Domains d = DOMAINS.as("d");
DomainConstraints dc = DOMAIN_CONSTRAINTS.as("dc");
for (Record record : create()
.select(
dc.domains().DOMAIN_SCHEMA,
dc.domains().DOMAIN_NAME,
dc.domains().DATA_TYPE,
dc.domains().CHARACTER_MAXIMUM_LENGTH,
dc.domains().NUMERIC_PRECISION,
dc.domains().NUMERIC_SCALE,
dc.domains().DOMAIN_DEFAULT,
d.DOMAIN_SCHEMA,
d.DOMAIN_NAME,
d.DATA_TYPE,
d.CHARACTER_MAXIMUM_LENGTH,
coalesce(d.NUMERIC_PRECISION, d.DATETIME_PRECISION).as(d.NUMERIC_PRECISION),
d.NUMERIC_SCALE,
d.DOMAIN_DEFAULT,
dc.checkConstraints().CHECK_CLAUSE)
.from(dc)
.where(dc.domains().DOMAIN_SCHEMA.in(getInputSchemata()))
.orderBy(dc.domains().DOMAIN_SCHEMA, dc.domains().DOMAIN_NAME)
.from(d)
.leftJoin(dc)
.on(d.DOMAIN_CATALOG.eq(dc.DOMAIN_CATALOG))
.and(d.DOMAIN_SCHEMA.eq(dc.DOMAIN_SCHEMA))
.and(d.DOMAIN_NAME.eq(dc.DOMAIN_NAME))
.where(d.DOMAIN_SCHEMA.in(getInputSchemata()))
.orderBy(d.DOMAIN_SCHEMA, d.DOMAIN_NAME)
) {
SchemaDefinition schema = getSchema(record.get(dc.domains().DOMAIN_SCHEMA));
SchemaDefinition schema = getSchema(record.get(d.DOMAIN_SCHEMA));
DataTypeDefinition baseType = new DefaultDataTypeDefinition(
this,
schema,
record.get(dc.domains().DATA_TYPE),
record.get(dc.domains().CHARACTER_MAXIMUM_LENGTH),
record.get(dc.domains().NUMERIC_PRECISION),
record.get(dc.domains().NUMERIC_SCALE),
record.get(d.DATA_TYPE),
record.get(d.CHARACTER_MAXIMUM_LENGTH),
record.get(d.NUMERIC_PRECISION),
record.get(d.NUMERIC_SCALE),
true,
record.get(dc.domains().DOMAIN_DEFAULT)
record.get(d.DOMAIN_DEFAULT)
);
DefaultDomainDefinition domain = new DefaultDomainDefinition(
schema,
record.get(dc.domains().DOMAIN_NAME),
record.get(d.DOMAIN_NAME),
baseType
);