From 57121c96e268a09f49d9dab69409f44795da91c7 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 19 Nov 2019 12:26:15 +0100 Subject: [PATCH] [jOOQ/jOOQ#7639] Add code generation support for CHECK constraints --- .../java/org/jooq/codegen/JavaGenerator.java | 26 +++++++++++++++++++ .../src/main/java/org/jooq/impl/Internal.java | 8 ++++++ 2 files changed, 34 insertions(+) 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 6cc223074d..8826432ed8 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java @@ -80,6 +80,7 @@ import javax.xml.bind.DatatypeConverter; import org.jooq.AggregateFunction; import org.jooq.Catalog; +import org.jooq.Check; import org.jooq.Configuration; import org.jooq.Constants; import org.jooq.DataType; @@ -127,6 +128,7 @@ import org.jooq.meta.AbstractTypedElementDefinition; import org.jooq.meta.ArrayDefinition; import org.jooq.meta.AttributeDefinition; import org.jooq.meta.CatalogDefinition; +import org.jooq.meta.CheckConstraintDefinition; import org.jooq.meta.ColumnDefinition; import org.jooq.meta.DataTypeDefinition; import org.jooq.meta.Database; @@ -4230,6 +4232,30 @@ public class JavaGenerator extends AbstractGenerator { } } + List cc = table.getCheckConstraints(); + + if (!cc.isEmpty()) { + if (scala) { + out.println(); + out.tab(1).println("override def getChecks : %s[ %s[%s] ] = {", List.class, Check.class, recordType); + out.tab(2).println("return %s.asList[ %s[%s] ](", Arrays.class, Check.class, recordType); + } + else { + out.tab(1).overrideInherit(); + out.tab(1).println("public %s<%s<%s>> getChecks() {", List.class, Check.class, recordType); + out.tab(2).println("return %s.<%s<%s>>asList(", Arrays.class, Check.class, recordType); + } + + String separator = " "; + for (CheckConstraintDefinition c : cc) { + out.tab(3).println("%s%s.createCheck(this, %s.name(\"%s\"), \"%s\")", separator, Internal.class, DSL.class, c.getName(), c.getCheckClause().replace("\"", "\\\"")); + separator = ", "; + } + + out.tab(2).println(");"); + out.tab(1).println("}"); + } + // [#1596] Updatable tables can provide fields for optimistic locking if properly configured. // [#7904] Records being updatable isn't a strict requirement. Version and timestamp values // can still be generated diff --git a/jOOQ/src/main/java/org/jooq/impl/Internal.java b/jOOQ/src/main/java/org/jooq/impl/Internal.java index 03561c24f2..ca351695fd 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Internal.java +++ b/jOOQ/src/main/java/org/jooq/impl/Internal.java @@ -38,6 +38,7 @@ package org.jooq.impl; import org.jooq.Binding; +import org.jooq.Check; import org.jooq.Converter; import org.jooq.DataType; import org.jooq.ForeignKey; @@ -135,6 +136,13 @@ public final class Internal { return result; } + /** + * Factory method for check constraints. + */ + public static final Check createCheck(Table table, Name name, String condition) { + return new CheckImpl<>(table, name, DSL.condition(condition)); + } + /** * Factory method for path aliases. */