diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java index a82e9d1102..1d2a5380c8 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java @@ -144,6 +144,7 @@ public class JavaGenerator extends AbstractGenerator { public final void generate(Database db) { this.database = db; this.database.addFilter(new AvoidAmbiguousClassesFilter()); + this.database.setIncludeRelations(generateRelations()); String url = ""; try { diff --git a/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java b/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java index bd5647b1b2..1b9777b882 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java @@ -125,6 +125,7 @@ public abstract class AbstractDatabase implements Database { private List routines; private List packages; private Relations relations; + private boolean includeRelations = true; private transient Map> sequencesBySchema; private transient Map> identitiesBySchema; @@ -456,6 +457,16 @@ public abstract class AbstractDatabase implements Database { return dateAsTimestamp; } + @Override + public final void setIncludeRelations(boolean includeRelations) { + this.includeRelations = includeRelations; + } + + @Override + public final boolean includeRelations() { + return includeRelations; + } + @Override public final List getSequences(SchemaDefinition schema) { if (sequences == null) { @@ -750,11 +761,17 @@ public abstract class AbstractDatabase implements Database { @Override public final Relations getRelations() { if (relations == null) { - try { - relations = getRelations0(); - } catch (Exception e) { - log.error("Error while fetching relations", e); - relations = new DefaultRelations(); + relations = new DefaultRelations(); + + // [#3559] If the code generator doesn't need relation information, we shouldn't + // populate them here to avoid running potentially expensive queries. + if (includeRelations) { + try { + relations = getRelations0(); + } + catch (Exception e) { + log.error("Error while fetching relations", e); + } } } diff --git a/jOOQ-meta/src/main/java/org/jooq/util/Database.java b/jOOQ-meta/src/main/java/org/jooq/util/Database.java index ccdb34efda..0407544356 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/Database.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/Database.java @@ -383,6 +383,16 @@ public interface Database { */ boolean dateAsTimestamp(); + /** + * [#3559] Whether relations (i.e. constraints) should be included in this database. + */ + void setIncludeRelations(boolean includeRelations); + + /** + * [#3559] Whether relations (i.e. constraints) should be included in this database. + */ + boolean includeRelations(); + /** * Check for the existence of a table in the dictionary views. */