From 7a188c868cd3125db21fea3f131826e0bc7f7e4e Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 23 Aug 2018 14:07:07 +0200 Subject: [PATCH] [#5969] Add to code generator configuration to allow for hiding Oracle's and H2's INVISIBLE columns --- .../java/org/jooq/codegen/GenerationTool.java | 1 + .../java/org/jooq/meta/AbstractDatabase.java | 11 +++++ .../src/main/java/org/jooq/meta/Database.java | 20 ++++++-- .../org/jooq/meta/h2/H2TableDefinition.java | 7 ++- .../java/org/jooq/meta/jaxb/Database.java | 46 +++++++++++++++++++ .../resources/xsd/jooq-codegen-3.12.0.xsd | 4 ++ 6 files changed, 82 insertions(+), 7 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 04d0b70187..a48fbc8086 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java @@ -484,6 +484,7 @@ public class GenerationTool { database.setIncludePackageUDTs(!FALSE.equals(d.isIncludePackageUDTs())); database.setIncludePackageConstants(!FALSE.equals(d.isIncludePackageConstants())); database.setIncludeIndexes(!FALSE.equals(d.isIncludeIndexes())); + database.setIncludeInvisibleColumns(!FALSE.equals(d.isIncludeInvisibleColumns())); database.setIncludePrimaryKeys(!FALSE.equals(d.isIncludePrimaryKeys())); database.setIncludeRoutines(!FALSE.equals(d.isIncludeRoutines())); database.setIncludeSequences(!FALSE.equals(d.isIncludeSequences())); 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 b3c16b7a6d..589523a501 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java @@ -107,6 +107,7 @@ public abstract class AbstractDatabase implements Database { private String[] excludes; private String[] includes = { ".*" }; private boolean includeExcludeColumns; + private boolean includeInvisibleColumns = true; private boolean includeTables = true; private boolean includeRoutines = true; private boolean includeTriggerRoutines = false; @@ -728,6 +729,16 @@ public abstract class AbstractDatabase implements Database { return includeExcludeColumns; } + @Override + public final void setIncludeInvisibleColumns(boolean includeInvisibleColumns) { + this.includeInvisibleColumns = includeInvisibleColumns; + } + + @Override + public final boolean getIncludeInvisibleColumns() { + return includeInvisibleColumns; + } + @Override public final boolean getIncludeTables() { return includeTables; 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 eba3041abd..c8c99c9e28 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/Database.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/Database.java @@ -506,6 +506,21 @@ public interface Database extends AutoCloseable { */ void setIncludeTables(boolean includeTables); + /** + * Whether tables (and views) should be included. + */ + boolean getIncludeTables(); + + /** + * Whether invisible columns should be included. + */ + void setIncludeInvisibleColumns(boolean includeInvisibleColumns); + + /** + * Whether invisible columns should be included. + */ + boolean getIncludeInvisibleColumns(); + /** * Whether zero-scale decimal types should be treated as their most * appropriate, corresponding integer type. @@ -518,11 +533,6 @@ public interface Database extends AutoCloseable { */ boolean getForceIntegerTypesOnZeroScaleDecimals(); - /** - * Whether tables (and views) should be included. - */ - boolean getIncludeTables(); - /** * [#3488] Add an additional filter to the database that is applied in * addition to include / exclude. diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/h2/H2TableDefinition.java b/jOOQ-meta/src/main/java/org/jooq/meta/h2/H2TableDefinition.java index 1b81751aff..52e94f057d 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/h2/H2TableDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/h2/H2TableDefinition.java @@ -40,6 +40,7 @@ package org.jooq.meta.h2; import static org.jooq.impl.DSL.choose; import static org.jooq.impl.DSL.inline; import static org.jooq.impl.DSL.name; +import static org.jooq.impl.DSL.noCondition; import static org.jooq.impl.DSL.zero; import static org.jooq.meta.h2.information_schema.tables.Columns.COLUMNS; import static org.jooq.tools.StringUtils.defaultString; @@ -97,8 +98,10 @@ public class H2TableDefinition extends AbstractTableDefinition { .from(COLUMNS) .where(Columns.TABLE_SCHEMA.equal(getSchema().getName())) .and(Columns.TABLE_NAME.equal(getName())) - .orderBy(Columns.ORDINAL_POSITION) - .fetch()) { + .and(!getDatabase().getIncludeInvisibleColumns() + ? Columns.COLUMN_TYPE.notLike("%INVISIBLE%") + : noCondition()) + .orderBy(Columns.ORDINAL_POSITION)) { // [#5331] AUTO_INCREMENT (MySQL style) // [#5331] DEFAULT nextval('sequence') (PostgreSQL style) 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 e4f47743bb..9aa1ad5388 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 @@ -78,6 +78,8 @@ public class Database implements Serializable protected Boolean includeUniqueKeys = true; @XmlElement(defaultValue = "true") protected Boolean includeForeignKeys = true; + @XmlElement(defaultValue = "true") + protected Boolean includeInvisibleColumns = true; @XmlElement(defaultValue = "") @XmlJavaTypeAdapter(StringAdapter.class) protected String recordVersionFields = ""; @@ -639,6 +641,30 @@ public class Database implements Serializable this.includeForeignKeys = value; } + /** + * This flag indicates whether invisible columns should be included in output produced by this database + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean isIncludeInvisibleColumns() { + return includeInvisibleColumns; + } + + /** + * Sets the value of the includeInvisibleColumns property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setIncludeInvisibleColumns(Boolean value) { + this.includeInvisibleColumns = value; + } + /** * All table and view columns that are used as "version" fields for optimistic locking. *

@@ -1381,6 +1407,11 @@ public class Database implements Serializable return this; } + public Database withIncludeInvisibleColumns(Boolean value) { + setIncludeInvisibleColumns(value); + return this; + } + public Database withRecordVersionFields(String value) { setRecordVersionFields(value); return this; @@ -1704,6 +1735,11 @@ public class Database implements Serializable sb.append(includeForeignKeys); sb.append(""); } + if (includeInvisibleColumns!= null) { + sb.append(""); + sb.append(includeInvisibleColumns); + sb.append(""); + } if (recordVersionFields!= null) { sb.append(""); sb.append(recordVersionFields); @@ -2035,6 +2071,15 @@ public class Database implements Serializable return false; } } + if (includeInvisibleColumns == null) { + if (other.includeInvisibleColumns!= null) { + return false; + } + } else { + if (!includeInvisibleColumns.equals(other.includeInvisibleColumns)) { + return false; + } + } if (recordVersionFields == null) { if (other.recordVersionFields!= null) { return false; @@ -2294,6 +2339,7 @@ public class Database implements Serializable result = ((prime*result)+((includePrimaryKeys == null)? 0 :includePrimaryKeys.hashCode())); result = ((prime*result)+((includeUniqueKeys == null)? 0 :includeUniqueKeys.hashCode())); result = ((prime*result)+((includeForeignKeys == null)? 0 :includeForeignKeys.hashCode())); + result = ((prime*result)+((includeInvisibleColumns == null)? 0 :includeInvisibleColumns.hashCode())); result = ((prime*result)+((recordVersionFields == null)? 0 :recordVersionFields.hashCode())); result = ((prime*result)+((recordTimestampFields == null)? 0 :recordTimestampFields.hashCode())); result = ((prime*result)+((syntheticIdentities == null)? 0 :syntheticIdentities.hashCode())); diff --git a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.12.0.xsd b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.12.0.xsd index f59a6a967a..ef8ddfcef2 100644 --- a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.12.0.xsd +++ b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.12.0.xsd @@ -515,6 +515,10 @@ Excludes match before includes, i.e. excludes have a higher priority.]]> + + + +