From 9fa41c474339eb510d2fc0e4a3d50bd6d3ec897c Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 3 Oct 2023 11:28:34 +0200 Subject: [PATCH] [jOOQ/jOOQ#15673] Domains aren't generated if they don't have a CHECK constraint associated with them, in HSQLDB --- .../org/jooq/meta/hsqldb/HSQLDBDatabase.java | 42 +++++++++++-------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/hsqldb/HSQLDBDatabase.java b/jOOQ-meta/src/main/java/org/jooq/meta/hsqldb/HSQLDBDatabase.java index 0a212f92fe..e735371a97 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/hsqldb/HSQLDBDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/hsqldb/HSQLDBDatabase.java @@ -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 getDomains0() throws SQLException { List 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 );