[#5969] Add <includeInvisibleColumns/> to code generator configuration to allow for hiding Oracle's and H2's INVISIBLE columns

This commit is contained in:
Lukas Eder 2018-08-23 14:07:07 +02:00
parent 006fd92c37
commit 7a188c868c
6 changed files with 82 additions and 7 deletions

View File

@ -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()));

View File

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

View File

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

View File

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

View File

@ -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.
* <p>
@ -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("</includeForeignKeys>");
}
if (includeInvisibleColumns!= null) {
sb.append("<includeInvisibleColumns>");
sb.append(includeInvisibleColumns);
sb.append("</includeInvisibleColumns>");
}
if (recordVersionFields!= null) {
sb.append("<recordVersionFields>");
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()));

View File

@ -515,6 +515,10 @@ Excludes match before includes, i.e. excludes have a higher priority.]]></jxb:ja
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[This flag indicates whether foreign keys should be included in output produced by this database]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
<element name="includeInvisibleColumns" type="boolean" default="true" minOccurs="0" maxOccurs="1">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[This flag indicates whether invisible columns should be included in output produced by this database]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
<element name="recordVersionFields" type="string" default="" minOccurs="0" maxOccurs="1">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[All table and view columns that are used as "version" fields for optimistic locking.
<p>