[jOOQ/jOOQ#16135] Add the invisibleColumnsAsHidden flag

This commit is contained in:
Lukas Eder 2024-01-25 14:22:57 +01:00
parent ecc9576125
commit 3eaf3b1729
13 changed files with 124 additions and 11 deletions

View File

@ -603,6 +603,7 @@ public class GenerationTool {
database.setIncludeSystemSequences(TRUE.equals(d.isIncludeSystemSequences()));
database.setIncludeSystemUDTs(TRUE.equals(d.isIncludeSystemUDTs()));
database.setIncludeInvisibleColumns(!FALSE.equals(d.isIncludeInvisibleColumns()));
database.setInvisibleColumnsAsHidden(!FALSE.equals(d.isInvisibleColumnsAsHidden()));
database.setIncludePrimaryKeys(!FALSE.equals(d.isIncludePrimaryKeys()));
database.setIncludeRoutines(!FALSE.equals(d.isIncludeRoutines()));
database.setIncludeDomains(!FALSE.equals(d.isIncludeDomains()));

View File

@ -206,7 +206,7 @@ public class XMLGenerator extends AbstractGenerator {
column.setNumericPrecision(type.getPrecision());
column.setNumericScale(type.getScale());
column.setOrdinalPosition(co.getPosition());
column.setHidden(co.isHidden());
column.setHidden(type.isHidden());
column.setReadonly(co.isReadonly());
if (type.isComputed()) {

View File

@ -197,6 +197,7 @@ public abstract class AbstractDatabase implements Database {
private boolean includeExcludeColumns = false;
private boolean includeExcludePackageRoutines = false;
private boolean includeInvisibleColumns = true;
private boolean invisibleColumnsAsHidden = true;
private boolean includeXMLSchemaCollections = true;
private boolean includeTables = true;
private boolean includeEmbeddables = true;
@ -1181,6 +1182,16 @@ public abstract class AbstractDatabase implements Database {
return includeInvisibleColumns;
}
@Override
public final void setInvisibleColumnsAsHidden(boolean invisibleColumnsAsHidden) {
this.invisibleColumnsAsHidden = invisibleColumnsAsHidden;
}
@Override
public final boolean getInvisibleColumnsAsHidden() {
return invisibleColumnsAsHidden;
}
@Override
public final boolean getIncludeTables() {
return includeTables;

View File

@ -824,6 +824,20 @@ public interface Database extends AutoCloseable {
*/
boolean getIncludeInvisibleColumns();
/**
* Whether invisible columns should be marked as {@link DataType#hidden()}.
* <p>
* This feature is available in the commercial distribution only.
*/
void setInvisibleColumnsAsHidden(boolean invisibleColumnsAsHidden);
/**
* Whether invisible columns should be marked as {@link DataType#hidden()}.
* <p>
* This feature is available in the commercial distribution only.
*/
boolean getInvisibleColumnsAsHidden();
/**
* Whether zero-scale decimal types should be treated as their most
* appropriate, corresponding integer type.

View File

@ -85,7 +85,7 @@ public class DefaultColumnDefinition
boolean readonly,
String comment
) {
this(table, name, position, type, identity, false, readonly, comment);
this(table, name, position, type, identity, type.isHidden(), readonly, comment);
}
public DefaultColumnDefinition(

View File

@ -56,6 +56,7 @@ import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import org.jooq.Field;
import org.jooq.Name;
import org.jooq.Param;
import org.jooq.Record;
@ -70,6 +71,8 @@ import org.jooq.meta.h2.H2Database.ElementType;
import org.jooq.meta.h2.H2Database.ElementTypeLookupKey;
import org.jooq.meta.hsqldb.information_schema.Tables;
import org.jetbrains.annotations.NotNull;
/**
* H2 table definition
*
@ -102,6 +105,7 @@ public class H2TableDefinition extends AbstractTableDefinition {
List<ColumnDefinition> result = new ArrayList<>();
H2Database db = (H2Database) getDatabase();
Field<Boolean> visible = COLUMNS.IS_VISIBLE.coerce(BOOLEAN);
// [#252] While recursing on ELEMENT_TYPES to detect multi dimensional
@ -131,7 +135,8 @@ public class H2TableDefinition extends AbstractTableDefinition {
Tables.COLUMNS.IS_IDENTITY.eq(inline("YES")).as(Tables.COLUMNS.IS_IDENTITY),
COLUMNS.DOMAIN_SCHEMA,
COLUMNS.DOMAIN_NAME,
Tables.COLUMNS.DTD_IDENTIFIER
Tables.COLUMNS.DTD_IDENTIFIER,
visible
)
.from(COLUMNS)
.where(COLUMNS.TABLE_SCHEMA.equal(getSchema().getName()))
@ -165,7 +170,7 @@ public class H2TableDefinition extends AbstractTableDefinition {
if (et == null)
et = new ElementType(record.get(COLUMNS.TYPE_NAME), record.get(COLUMNS.CHARACTER_MAXIMUM_LENGTH), record.get(COLUMNS.NUMERIC_PRECISION), record.get(COLUMNS.NUMERIC_SCALE), null, 0);
DataTypeDefinition type = new DefaultDataTypeDefinition(
DefaultDataTypeDefinition type = new DefaultDataTypeDefinition(
getDatabase(),
typeSchema == null ? getSchema() : typeSchema,
et.dataType() + IntStream.range(0, et.dimension()).mapToObj(i -> " ARRAY").collect(Collectors.joining()),
@ -177,6 +182,11 @@ public class H2TableDefinition extends AbstractTableDefinition {
userType
).generatedAlwaysAs(isComputed ? record.get(Tables.COLUMNS.GENERATION_EXPRESSION) : null);
result.add(new DefaultColumnDefinition(
getDatabase().getTable(getSchema(), getName()),
record.get(COLUMNS.COLUMN_NAME),

View File

@ -105,6 +105,8 @@ public class Database implements Serializable, XMLAppendable
protected Boolean includeSystemUDTs = false;
@XmlElement(defaultValue = "true")
protected Boolean includeInvisibleColumns = true;
@XmlElement(defaultValue = "true")
protected Boolean invisibleColumnsAsHidden = true;
@XmlElement(defaultValue = "")
@XmlJavaTypeAdapter(StringAdapter.class)
protected String recordVersionFields = "";
@ -1159,6 +1161,34 @@ public class Database implements Serializable, XMLAppendable
this.includeInvisibleColumns = value;
}
/**
* This flag indicates whether invisible columns should marked as {@link org.jooq.DataType#hidden()} in output produced by this database.
* <p>
* This feature is available in the commercial distribution only.
*
* @return
* possible object is
* {@link Boolean }
*
*/
public Boolean isInvisibleColumnsAsHidden() {
return invisibleColumnsAsHidden;
}
/**
* This flag indicates whether invisible columns should marked as {@link org.jooq.DataType#hidden()} in output produced by this database.
* <p>
* This feature is available in the commercial distribution only.
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setInvisibleColumnsAsHidden(Boolean value) {
this.invisibleColumnsAsHidden = value;
}
/**
* All table and view columns that are used as "version" fields for optimistic locking.
* <p>
@ -2544,6 +2574,17 @@ public class Database implements Serializable, XMLAppendable
return this;
}
/**
* This flag indicates whether invisible columns should marked as {@link org.jooq.DataType#hidden()} in output produced by this database.
* <p>
* This feature is available in the commercial distribution only.
*
*/
public Database withInvisibleColumnsAsHidden(Boolean value) {
setInvisibleColumnsAsHidden(value);
return this;
}
/**
* All table and view columns that are used as "version" fields for optimistic locking.
* <p>
@ -3152,6 +3193,7 @@ public class Database implements Serializable, XMLAppendable
builder.append("includeSystemSequences", includeSystemSequences);
builder.append("includeSystemUDTs", includeSystemUDTs);
builder.append("includeInvisibleColumns", includeInvisibleColumns);
builder.append("invisibleColumnsAsHidden", invisibleColumnsAsHidden);
builder.append("recordVersionFields", recordVersionFields);
builder.append("recordTimestampFields", recordTimestampFields);
builder.append("syntheticObjects", syntheticObjects);
@ -3528,6 +3570,15 @@ public class Database implements Serializable, XMLAppendable
return false;
}
}
if (invisibleColumnsAsHidden == null) {
if (other.invisibleColumnsAsHidden!= null) {
return false;
}
} else {
if (!invisibleColumnsAsHidden.equals(other.invisibleColumnsAsHidden)) {
return false;
}
}
if (recordVersionFields == null) {
if (other.recordVersionFields!= null) {
return false;
@ -3930,6 +3981,7 @@ public class Database implements Serializable, XMLAppendable
result = ((prime*result)+((includeSystemSequences == null)? 0 :includeSystemSequences.hashCode()));
result = ((prime*result)+((includeSystemUDTs == null)? 0 :includeSystemUDTs.hashCode()));
result = ((prime*result)+((includeInvisibleColumns == null)? 0 :includeInvisibleColumns.hashCode()));
result = ((prime*result)+((invisibleColumnsAsHidden == null)? 0 :invisibleColumnsAsHidden.hashCode()));
result = ((prime*result)+((recordVersionFields == null)? 0 :recordVersionFields.hashCode()));
result = ((prime*result)+((recordTimestampFields == null)? 0 :recordTimestampFields.hashCode()));
result = ((prime*result)+((syntheticObjects == null)? 0 :syntheticObjects.hashCode()));

View File

@ -154,7 +154,7 @@ public class MySQLTableDefinition extends AbstractTableDefinition {
}
}
DataTypeDefinition type = new DefaultDataTypeDefinition(
DefaultDataTypeDefinition type = new DefaultDataTypeDefinition(
getDatabase(),
getSchema(),
dataType,
@ -168,6 +168,11 @@ public class MySQLTableDefinition extends AbstractTableDefinition {
.generatedAlwaysAs(generated ? record.get(COLUMNS.GENERATION_EXPRESSION) : null)
.generationOption(generationOption);
result.add(new DefaultColumnDefinition(
getDatabase().getTable(getSchema(), getName()),
record.get(COLUMNS.COLUMN_NAME),

View File

@ -1246,6 +1246,13 @@ public class PostgresDatabase extends AbstractDatabase implements ResultQueryDat

View File

@ -42,6 +42,7 @@ import static org.jooq.impl.DSL.any;
import static org.jooq.impl.DSL.coalesce;
import static org.jooq.impl.DSL.concat;
import static org.jooq.impl.DSL.count;
import static org.jooq.impl.DSL.falseCondition;
import static org.jooq.impl.DSL.field;
import static org.jooq.impl.DSL.greatest;
import static org.jooq.impl.DSL.inline;
@ -146,6 +147,8 @@ public class PostgresTableDefinition extends AbstractTableDefinition {
Field<String> serialColumnDefault = inline("nextval('%_seq'::regclass)");
Field<String> generationExpression = COLUMNS.GENERATION_EXPRESSION;
Field<String> attgenerated = database.is12() ? PG_ATTRIBUTE.ATTGENERATED : inline("s");
Condition columnHidden = falseCondition();
@ -166,6 +169,7 @@ public class PostgresTableDefinition extends AbstractTableDefinition {
? isIdentity10.or(count().filterWhere(isIdentity10).over().eq(inline(0)).and(isSerial))
: isSerial;
for (Record record : create().select(
COLUMNS.COLUMN_NAME,
COLUMNS.ORDINAL_POSITION,
@ -184,7 +188,8 @@ public class PostgresTableDefinition extends AbstractTableDefinition {
when(COLUMNS.DATA_TYPE.eq(inline("ARRAY")), substring(PG_TYPE.TYPNAME, inline(2)))
.else_(COLUMNS.UDT_NAME)
).as(COLUMNS.UDT_NAME),
PG_DESCRIPTION.DESCRIPTION)
PG_DESCRIPTION.DESCRIPTION,
columnHidden)
.from(COLUMNS)
.join(PG_ATTRIBUTE)
.on(PG_ATTRIBUTE.ATTNAME.eq(COLUMNS.COLUMN_NAME))
@ -209,7 +214,7 @@ public class PostgresTableDefinition extends AbstractTableDefinition {
if (schemaName != null)
typeSchema = getDatabase().getSchema(schemaName);
DataTypeDefinition type = new DefaultDataTypeDefinition(
DefaultDataTypeDefinition type = new DefaultDataTypeDefinition(
getDatabase(),
typeSchema,
record.get(COLUMNS.DATA_TYPE),
@ -232,6 +237,11 @@ public class PostgresTableDefinition extends AbstractTableDefinition {
: null
);
ColumnDefinition column = new DefaultColumnDefinition(
getDatabase().getTable(getSchema(), getName()),
record.get(COLUMNS.COLUMN_NAME),

View File

@ -93,7 +93,7 @@ public class XMLTableDefinition extends AbstractTableDefinition {
SchemaDefinition schema = getDatabase().getSchema(column.getTableSchema());
DataTypeDefinition type = new DefaultDataTypeDefinition(
DefaultDataTypeDefinition type = new DefaultDataTypeDefinition(
getDatabase(),
schema,
column.getDataType(),
@ -110,7 +110,8 @@ public class XMLTableDefinition extends AbstractTableDefinition {
: "VIRTUAL".equalsIgnoreCase(column.getGenerationOption())
? VIRTUAL
: null
: null);
: null)
.hidden(column.isHidden());
result.add(new DefaultColumnDefinition(
this,

View File

@ -1113,7 +1113,9 @@ This feature is available in the commercial distribution only.]]></jxb:javadoc><
</element>
<element name="invisibleColumnsAsHidden" type="boolean" default="true" minOccurs="0" maxOccurs="1">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[This flag indicates whether invisible columns should marked as {@link org.jooq.DataType#hidden()} in output produced by this database]]></jxb:javadoc></jxb:property></appinfo></annotation>
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[This flag indicates whether invisible columns should marked as {@link org.jooq.DataType#hidden()} in output produced by this database.
<p>
This feature is available in the commercial distribution only.]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
<element name="recordVersionFields" type="string" default="" minOccurs="0" maxOccurs="1">

View File

@ -329,7 +329,7 @@ final class InformationSchemaExport {
result.getViews().add(iv);
}
Field<?>[] fields = t.fields();
Field<?>[] fields = t.fieldsIncludingHidden().fields();
for (int i = 0; i < fields.length; i++) {
Field<?> f = fields[i];
DataType<?> type = f.getDataType();