From e946c6f09ac0a569631875c95b8a0cfaf231c776 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 1 Jul 2021 16:13:51 +0200 Subject: [PATCH] [jOOQ/jOOQ#12093] Add to let code generator and match package procedures and functions --- .../java/org/jooq/codegen/GenerationTool.java | 1 + .../java/org/jooq/meta/AbstractDatabase.java | 13 +++++- .../AbstractElementContainerDefinition.java | 3 +- .../jooq/meta/AbstractPackageDefinition.java | 12 +++++- .../src/main/java/org/jooq/meta/Database.java | 12 ++++++ .../java/org/jooq/meta/jaxb/Database.java | 42 +++++++++++++++++++ .../resources/xsd/jooq-codegen-3.15.0.xsd | 4 ++ 7 files changed, 83 insertions(+), 4 deletions(-) diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java index aef3185a82..f36e217b7b 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java @@ -530,6 +530,7 @@ public class GenerationTool { database.setIncludes(new String[] { defaultString(d.getIncludes()) }); database.setExcludes(new String[] { defaultString(d.getExcludes()) }); database.setIncludeExcludeColumns(TRUE.equals(d.isIncludeExcludeColumns())); + database.setIncludeExcludePackageRoutines(TRUE.equals(d.isIncludeExcludePackageRoutines())); database.setIncludeForeignKeys(!FALSE.equals(d.isIncludeForeignKeys())); database.setIncludePackages(!FALSE.equals(d.isIncludePackages())); database.setIncludePackageRoutines(!FALSE.equals(d.isIncludePackageRoutines())); diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java index 760ac3f48e..ac17805ad9 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java @@ -159,7 +159,8 @@ public abstract class AbstractDatabase implements Database { private List filters; private String[] excludes; private String[] includes = { ".*" }; - private boolean includeExcludeColumns; + private boolean includeExcludeColumns = false; + private boolean includeExcludePackageRoutines = false; private boolean includeInvisibleColumns = true; private boolean includeTables = true; private boolean includeEmbeddables = true; @@ -961,6 +962,16 @@ public abstract class AbstractDatabase implements Database { return includeExcludeColumns; } + @Override + public final void setIncludeExcludePackageRoutines(boolean includeExcludePackageRoutines) { + this.includeExcludePackageRoutines = includeExcludePackageRoutines; + } + + @Override + public final boolean getIncludeExcludePackageRoutines() { + return includeExcludePackageRoutines; + } + @Override public final void setIncludeInvisibleColumns(boolean includeInvisibleColumns) { this.includeInvisibleColumns = includeInvisibleColumns; diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractElementContainerDefinition.java b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractElementContainerDefinition.java index a63a685d75..1bf5eca070 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractElementContainerDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractElementContainerDefinition.java @@ -110,9 +110,8 @@ extends AbstractDefinition { elements = db.filterExcludeInclude(e); log.info("Columns fetched", fetchedSize(e, elements)); } - else { + else elements = e; - } db.sort(elements); } diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractPackageDefinition.java b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractPackageDefinition.java index df8fc7c0ba..9649357b73 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractPackageDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractPackageDefinition.java @@ -37,6 +37,8 @@ */ package org.jooq.meta; +import static org.jooq.meta.AbstractDatabase.fetchedSize; + import java.sql.SQLException; import java.util.ArrayList; import java.util.List; @@ -74,7 +76,15 @@ public abstract class AbstractPackageDefinition extends AbstractDefinition imple if (getDatabase().getIncludePackageRoutines()) { try { - routines = getRoutines0(); + List r = getRoutines0(); + + // [#12093] Filter exclude / include also for package routines + if (getDatabase().getIncludeExcludePackageRoutines()) { + routines = getDatabase().filterExcludeInclude(r); + log.info("Columns fetched", fetchedSize(r, routines)); + } + else + routines = r; } catch (Exception e) { log.error("Error while initialising package", e); diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/Database.java b/jOOQ-meta/src/main/java/org/jooq/meta/Database.java index c036791ae0..b7bc29b73d 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/Database.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/Database.java @@ -467,6 +467,18 @@ public interface Database extends AutoCloseable { */ boolean getIncludeExcludeColumns(); + /** + * Indicate whether include / exclude regular expression shall also match + * package routines. + */ + void setIncludeExcludePackageRoutines(boolean includeExcludePackageRoutines); + + /** + * Indicate whether include / exclude regular expression shall also match + * package routines. + */ + boolean getIncludeExcludePackageRoutines(); + /** * whether foreign key relationships should be included. */ diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/Database.java b/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/Database.java index a29f27d636..52f3654cc1 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/Database.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/Database.java @@ -51,6 +51,8 @@ public class Database implements Serializable, XMLAppendable protected String excludes = ""; @XmlElement(defaultValue = "false") protected Boolean includeExcludeColumns = false; + @XmlElement(defaultValue = "false") + protected Boolean includeExcludePackageRoutines = false; @XmlElement(defaultValue = "true") protected Boolean includeTables = true; @XmlElement(defaultValue = "true") @@ -439,6 +441,30 @@ public class Database implements Serializable, XMLAppendable this.includeExcludeColumns = value; } + /** + * This flag indicates whether include / exclude patterns should also match routines within packages. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean isIncludeExcludePackageRoutines() { + return includeExcludePackageRoutines; + } + + /** + * Sets the value of the includeExcludePackageRoutines property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setIncludeExcludePackageRoutines(Boolean value) { + this.includeExcludePackageRoutines = value; + } + /** * This flag indicates whether tables should be included in output produced by this database * @@ -1885,6 +1911,11 @@ public class Database implements Serializable, XMLAppendable return this; } + public Database withIncludeExcludePackageRoutines(Boolean value) { + setIncludeExcludePackageRoutines(value); + return this; + } + public Database withIncludeTables(Boolean value) { setIncludeTables(value); return this; @@ -2463,6 +2494,7 @@ public class Database implements Serializable, XMLAppendable builder.append("includes", includes); builder.append("excludes", excludes); builder.append("includeExcludeColumns", includeExcludeColumns); + builder.append("includeExcludePackageRoutines", includeExcludePackageRoutines); builder.append("includeTables", includeTables); builder.append("includeEmbeddables", includeEmbeddables); builder.append("includeRoutines", includeRoutines); @@ -2603,6 +2635,15 @@ public class Database implements Serializable, XMLAppendable return false; } } + if (includeExcludePackageRoutines == null) { + if (other.includeExcludePackageRoutines!= null) { + return false; + } + } else { + if (!includeExcludePackageRoutines.equals(other.includeExcludePackageRoutines)) { + return false; + } + } if (includeTables == null) { if (other.includeTables!= null) { return false; @@ -3121,6 +3162,7 @@ public class Database implements Serializable, XMLAppendable result = ((prime*result)+((includes == null)? 0 :includes.hashCode())); result = ((prime*result)+((excludes == null)? 0 :excludes.hashCode())); result = ((prime*result)+((includeExcludeColumns == null)? 0 :includeExcludeColumns.hashCode())); + result = ((prime*result)+((includeExcludePackageRoutines == null)? 0 :includeExcludePackageRoutines.hashCode())); result = ((prime*result)+((includeTables == null)? 0 :includeTables.hashCode())); result = ((prime*result)+((includeEmbeddables == null)? 0 :includeEmbeddables.hashCode())); result = ((prime*result)+((includeRoutines == null)? 0 :includeRoutines.hashCode())); diff --git a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.15.0.xsd b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.15.0.xsd index 6c455786ce..a5da2f3f70 100644 --- a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.15.0.xsd +++ b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.15.0.xsd @@ -581,6 +581,10 @@ Excludes match before includes, i.e. excludes have a higher priority.]]> + + + +