[jOOQ/jOOQ#7639] Add code generation support for CHECK constraints

This commit is contained in:
Lukas Eder 2019-11-19 12:26:15 +01:00
parent ac5fea8ec0
commit 57121c96e2
2 changed files with 34 additions and 0 deletions

View File

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

View File

@ -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 <R extends Record> Check<R> createCheck(Table<R> table, Name name, String condition) {
return new CheckImpl<>(table, name, DSL.condition(condition));
}
/**
* Factory method for path aliases.
*/