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 4c6d2c641d..1cfbea3006 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java @@ -514,6 +514,7 @@ public class GenerationTool { database.setIncludePackageConstants(!FALSE.equals(d.isIncludePackageConstants())); database.setIncludeIndexes(!FALSE.equals(d.isIncludeIndexes())); database.setIncludeCheckConstraints(!FALSE.equals(d.isIncludeCheckConstraints())); + database.setIncludeSystemIndexes(TRUE.equals(d.isIncludeSystemIndexes())); database.setIncludeSystemCheckConstraints(TRUE.equals(d.isIncludeSystemCheckConstraints())); database.setIncludeInvisibleColumns(!FALSE.equals(d.isIncludeInvisibleColumns())); database.setIncludePrimaryKeys(!FALSE.equals(d.isIncludePrimaryKeys())); 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 55c52600cc..80be11e954 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java @@ -136,6 +136,7 @@ public abstract class AbstractDatabase implements Database { private boolean includeSequences = true; private boolean includeIndexes = true; private boolean includeCheckConstraints = true; + private boolean includeSystemIndexes = false; private boolean includeSystemCheckConstraints = false; private boolean includePrimaryKeys = true; private boolean includeUniqueKeys = true; @@ -1000,6 +1001,16 @@ public abstract class AbstractDatabase implements Database { return includeCheckConstraints; } + @Override + public final void setIncludeSystemIndexes(boolean includeSystemIndexes) { + this.includeSystemIndexes = includeSystemIndexes; + } + + @Override + public final boolean getIncludeSystemIndexes() { + return includeSystemIndexes; + } + @Override public final void setIncludeSystemCheckConstraints(boolean includeSystemCheckConstraints) { this.includeSystemCheckConstraints = includeSystemCheckConstraints; 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 f5340a7870..3528ad51bb 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/Database.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/Database.java @@ -438,6 +438,16 @@ public interface Database extends AutoCloseable { */ boolean getIncludeCheckConstraints(); + /** + * whether system generated indexes should be included. + */ + void setIncludeSystemIndexes(boolean systemIndexes); + + /** + * whether system generated indexes should be included. + */ + boolean getIncludeSystemIndexes(); + /** * whether system generated check constraints should be included. */ diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/h2/H2Database.java b/jOOQ-meta/src/main/java/org/jooq/meta/h2/H2Database.java index b24d8fb9b5..4658ce6bfa 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/h2/H2Database.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/h2/H2Database.java @@ -37,10 +37,13 @@ */ package org.jooq.meta.h2; +import static org.jooq.impl.DSL.condition; import static org.jooq.impl.DSL.falseCondition; import static org.jooq.impl.DSL.field; 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.not; import static org.jooq.impl.DSL.nullif; import static org.jooq.impl.DSL.one; import static org.jooq.impl.DSL.select; @@ -146,6 +149,9 @@ public class H2Database extends AbstractDatabase { Indexes.ASC_OR_DESC) .from(INDEXES) .where(Indexes.TABLE_SCHEMA.in(getInputSchemata())) + .and(getIncludeSystemIndexes() + ? noCondition() + : not(condition(Indexes.IS_GENERATED))) .orderBy( Indexes.TABLE_SCHEMA, Indexes.TABLE_NAME, diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/hsqldb/HSQLDBDatabase.java b/jOOQ-meta/src/main/java/org/jooq/meta/hsqldb/HSQLDBDatabase.java index c0622162c7..a267c06b81 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/hsqldb/HSQLDBDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/hsqldb/HSQLDBDatabase.java @@ -123,6 +123,9 @@ public class HSQLDBDatabase extends AbstractDatabase { SYSTEM_INDEXINFO.ASC_OR_DESC) .from(SYSTEM_INDEXINFO) .where(SYSTEM_INDEXINFO.TABLE_SCHEM.in(getInputSchemata())) + .and(getIncludeSystemIndexes() + ? noCondition() + : SYSTEM_INDEXINFO.INDEX_NAME.notLike("SYS!_IDX!_%", '!')) .orderBy( SYSTEM_INDEXINFO.TABLE_SCHEM, SYSTEM_INDEXINFO.TABLE_NAME, 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 163a430c38..deaff70d75 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 @@ -82,6 +82,8 @@ public class Database implements Serializable, XMLAppendable @XmlElement(defaultValue = "true") protected Boolean includeCheckConstraints = true; @XmlElement(defaultValue = "false") + protected Boolean includeSystemIndexes = false; + @XmlElement(defaultValue = "false") protected Boolean includeSystemCheckConstraints = false; @XmlElement(defaultValue = "true") protected Boolean includeInvisibleColumns = true; @@ -779,6 +781,30 @@ public class Database implements Serializable, XMLAppendable this.includeCheckConstraints = value; } + /** + * This flag indicates whether system generated indexes should be included in output produced by this database + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean isIncludeSystemIndexes() { + return includeSystemIndexes; + } + + /** + * Sets the value of the includeSystemIndexes property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setIncludeSystemIndexes(Boolean value) { + this.includeSystemIndexes = value; + } + /** * This flag indicates whether system generated check constraints should be included in output produced by this database * @@ -1733,6 +1759,11 @@ public class Database implements Serializable, XMLAppendable return this; } + public Database withIncludeSystemIndexes(Boolean value) { + setIncludeSystemIndexes(value); + return this; + } + public Database withIncludeSystemCheckConstraints(Boolean value) { setIncludeSystemCheckConstraints(value); return this; @@ -2163,6 +2194,7 @@ public class Database implements Serializable, XMLAppendable builder.append("includeUniqueKeys", includeUniqueKeys); builder.append("includeForeignKeys", includeForeignKeys); builder.append("includeCheckConstraints", includeCheckConstraints); + builder.append("includeSystemIndexes", includeSystemIndexes); builder.append("includeSystemCheckConstraints", includeSystemCheckConstraints); builder.append("includeInvisibleColumns", includeInvisibleColumns); builder.append("recordVersionFields", recordVersionFields); @@ -2413,6 +2445,15 @@ public class Database implements Serializable, XMLAppendable return false; } } + if (includeSystemIndexes == null) { + if (other.includeSystemIndexes!= null) { + return false; + } + } else { + if (!includeSystemIndexes.equals(other.includeSystemIndexes)) { + return false; + } + } if (includeSystemCheckConstraints == null) { if (other.includeSystemCheckConstraints!= null) { return false; @@ -2721,6 +2762,7 @@ public class Database implements Serializable, XMLAppendable result = ((prime*result)+((includeUniqueKeys == null)? 0 :includeUniqueKeys.hashCode())); result = ((prime*result)+((includeForeignKeys == null)? 0 :includeForeignKeys.hashCode())); result = ((prime*result)+((includeCheckConstraints == null)? 0 :includeCheckConstraints.hashCode())); + result = ((prime*result)+((includeSystemIndexes == null)? 0 :includeSystemIndexes.hashCode())); result = ((prime*result)+((includeSystemCheckConstraints == null)? 0 :includeSystemCheckConstraints.hashCode())); result = ((prime*result)+((includeInvisibleColumns == null)? 0 :includeInvisibleColumns.hashCode())); result = ((prime*result)+((recordVersionFields == null)? 0 :recordVersionFields.hashCode())); diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/mysql/MySQLDatabase.java b/jOOQ-meta/src/main/java/org/jooq/meta/mysql/MySQLDatabase.java index 97fbd71779..148c2f679f 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/mysql/MySQLDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/mysql/MySQLDatabase.java @@ -40,6 +40,9 @@ package org.jooq.meta.mysql; import static org.jooq.impl.DSL.falseCondition; import static org.jooq.impl.DSL.inline; +import static org.jooq.impl.DSL.noCondition; +import static org.jooq.impl.DSL.row; +import static org.jooq.impl.DSL.select; import static org.jooq.meta.mysql.information_schema.Tables.CHECK_CONSTRAINTS; import static org.jooq.meta.mysql.information_schema.Tables.COLUMNS; import static org.jooq.meta.mysql.information_schema.Tables.KEY_COLUMN_USAGE; @@ -130,6 +133,13 @@ public class MySQLDatabase extends AbstractDatabase { getInputSchemata().size() == 1 ? Statistics.TABLE_SCHEMA.in(getInputSchemata()) : falseCondition())) + .and(getIncludeSystemIndexes() + ? noCondition() + : row(Statistics.INDEX_SCHEMA, Statistics.INDEX_NAME).notIn( + select(TableConstraints.CONSTRAINT_SCHEMA, TableConstraints.CONSTRAINT_NAME) + .from(TABLE_CONSTRAINTS) + ) + ) .orderBy( Statistics.TABLE_SCHEMA, Statistics.TABLE_NAME, diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresDatabase.java b/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresDatabase.java index 7cf1e66c48..0a82debad5 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresDatabase.java @@ -191,6 +191,12 @@ public class PostgresDatabase extends AbstractDatabase { .join(trel).on(oid(trel).eq(i.INDRELID)) .join(tnsp).on(oid(tnsp).eq(trel.RELNAMESPACE)) .where(tnsp.NSPNAME.in(getInputSchemata())) + .and(getIncludeSystemIndexes() + ? noCondition() + : row(tnsp.NSPNAME, irel.RELNAME).notIn( + select(TABLE_CONSTRAINTS.CONSTRAINT_SCHEMA, TABLE_CONSTRAINTS.CONSTRAINT_NAME) + .from(TABLE_CONSTRAINTS) + )) .orderBy(1, 2, 3)) { final SchemaDefinition tableSchema = getSchema(record.get(tnsp.NSPNAME)); diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/sqlite/SQLiteDatabase.java b/jOOQ-meta/src/main/java/org/jooq/meta/sqlite/SQLiteDatabase.java index 72f5c09dab..f42636ce78 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/sqlite/SQLiteDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/sqlite/SQLiteDatabase.java @@ -39,8 +39,10 @@ package org.jooq.meta.sqlite; import static org.jooq.impl.DSL.field; import static org.jooq.impl.DSL.inline; +import static org.jooq.impl.DSL.noCondition; import static org.jooq.impl.DSL.one; import static org.jooq.impl.DSL.table; +import static org.jooq.impl.SQLDataType.VARCHAR; import static org.jooq.meta.sqlite.sqlite_master.SQLiteMaster.SQLITE_MASTER; import java.sql.SQLException; @@ -122,6 +124,9 @@ public class SQLiteDatabase extends AbstractDatabase { table("pragma_index_list({0})", SQLiteMaster.NAME).as("il"), table("pragma_index_info(il.name)").as("ii")) .where(SQLiteMaster.TYPE.eq(inline("table"))) + .and(getIncludeSystemIndexes() + ? noCondition() + : field("il.origin", VARCHAR).notIn(inline("pk"), inline("u"))) .orderBy(1, 2, 4) .fetchGroups( new Field[] { diff --git a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.13.0.xsd b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.13.0.xsd index 289ea352ad..5ca8e966c0 100644 --- a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.13.0.xsd +++ b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.13.0.xsd @@ -559,6 +559,10 @@ Excludes match before includes, i.e. excludes have a higher priority.]]> + + + +