diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java b/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java index 79b12569f0..5d1320d046 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java @@ -36,6 +36,7 @@ package org.jooq.util; +import static java.lang.Boolean.TRUE; import static org.jooq.tools.StringUtils.defaultIfNull; import static org.jooq.tools.StringUtils.defaultString; import static org.jooq.tools.StringUtils.isBlank; @@ -233,6 +234,7 @@ public class GenerationTool { database.setConfiguredSchemata(schemata); database.setIncludes(new String[] { defaultString(d.getIncludes()) }); database.setExcludes(new String[] { defaultString(d.getExcludes()) }); + database.setIncludeExcludeColumns(TRUE.equals(d.isIncludeExcludeColumns())); database.setRecordVersionFields(new String[] { defaultString(d.getRecordVersionFields()) }); database.setRecordTimestampFields(new String[] { defaultString(d.getRecordTimestampFields()) }); database.setConfiguredCustomTypes(d.getCustomTypes()); 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 512913f15c..411bbb4110 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java @@ -133,6 +133,9 @@ public class JavaGenerator extends AbstractGenerator { log.info(" dialect", database.getDialect()); log.info(" target dir", getTargetDirectory()); log.info(" target package", getTargetPackage()); + log.info(" includes", Arrays.asList(database.getIncludes())); + log.info(" excludes", Arrays.asList(database.getExcludes())); + log.info(" includeExcludeColumns", database.getIncludeExcludeColumns()); log.info("----------------------------------------------------------"); log.info(""); log.info("DefaultGenerator parameters"); 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 aa762c410c..897bb867a8 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java @@ -77,6 +77,7 @@ public abstract class AbstractDatabase implements Database { private DSLContext create; private String[] excludes; private String[] includes; + private boolean includeExcludeColumns; private String[] recordVersionFields; private String[] recordTimestampFields; private boolean supportsUnsignedTypes; @@ -257,6 +258,16 @@ public abstract class AbstractDatabase implements Database { return includes; } + @Override + public final void setIncludeExcludeColumns(boolean includeExcludeColumns) { + this.includeExcludeColumns = includeExcludeColumns; + } + + @Override + public final boolean getIncludeExcludeColumns() { + return includeExcludeColumns; + } + @Override public void setRecordVersionFields(String[] recordVersionFields) { this.recordVersionFields = recordVersionFields; @@ -705,6 +716,10 @@ public abstract class AbstractDatabase implements Database { } private final List filterExcludeInclude(List definitions) { + return filterExcludeInclude(definitions, excludes, includes); + } + + static final List filterExcludeInclude(List definitions, String[] excludes, String[] includes) { List result = new ArrayList(); definitionsLoop: for (T definition : definitions) { @@ -758,7 +773,7 @@ public abstract class AbstractDatabase implements Database { return false; } - private final String fetchedSize(List fetched, List included) { + static final String fetchedSize(List fetched, List included) { return fetched.size() + " (" + included.size() + " included, " + (fetched.size() - included.size()) + " excluded)"; } diff --git a/jOOQ-meta/src/main/java/org/jooq/util/AbstractElementContainerDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/AbstractElementContainerDefinition.java index 9e7c3c6db2..672dd3b15c 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/AbstractElementContainerDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/AbstractElementContainerDefinition.java @@ -36,6 +36,10 @@ package org.jooq.util; +import static org.jooq.util.AbstractDatabase.fetchedSize; +import static org.jooq.util.AbstractDatabase.filterExcludeInclude; +import static org.jooq.util.AbstractDatabase.getDefinition; + import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; @@ -77,7 +81,17 @@ extends AbstractDefinition { elements = new ArrayList(); try { - elements = getElements0(); + Database db = getDatabase(); + List e = getElements0(); + + // [#2603] Filter exclude / include also for table columns + if (this instanceof TableDefinition && db.getIncludeExcludeColumns()) { + elements = filterExcludeInclude(e, db.getExcludes(), db.getIncludes()); + log.info("Columns fetched", fetchedSize(e, elements)); + } + else { + elements = e; + } } catch (SQLException e) { log.error("Error while initialising type", e); @@ -92,7 +106,7 @@ extends AbstractDefinition { } protected final E getElement(String name, boolean ignoreCase) { - return AbstractDatabase.getDefinition(getElements(), name, ignoreCase); + return getDefinition(getElements(), name, ignoreCase); } protected final E getElement(int index) { 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 66a4836ff3..e41cb54d95 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/Database.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/Database.java @@ -217,6 +217,18 @@ public interface Database { */ String[] getIncludes(); + /** + * Indicate whether include / exclude regular expression shall also match + * database columns. + */ + void setIncludeExcludeColumns(boolean includeExcludeColumns); + + /** + * Indicate whether include / exclude regular expression shall also match + * database columns. + */ + boolean getIncludeExcludeColumns(); + /** * Table columns matching these regular expressions will be considered as * record version fields in generated code. diff --git a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.2.0.xsd b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.2.0.xsd index b31e3b4807..8447d61cd6 100644 --- a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.2.0.xsd +++ b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.2.0.xsd @@ -141,6 +141,12 @@ --> + + +