From 6bdaee9d4285c3f14ad4336138f8d73a968fcafa Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 16 Jan 2020 14:09:47 +0100 Subject: [PATCH] [jOOQ/jOOQ#5181] [jOOQ/jOOQ#6314] Add Meta.getIndexes() --- jOOQ/src/main/java/org/jooq/Meta.java | 9 +++++++ .../main/java/org/jooq/impl/AbstractMeta.java | 24 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/jOOQ/src/main/java/org/jooq/Meta.java b/jOOQ/src/main/java/org/jooq/Meta.java index 1032af30a2..767a99d140 100644 --- a/jOOQ/src/main/java/org/jooq/Meta.java +++ b/jOOQ/src/main/java/org/jooq/Meta.java @@ -205,6 +205,15 @@ public interface Meta extends Scope { @Support List> getPrimaryKeys() throws DataAccessException; + /** + * Get all indexes from the underlying meta data sources. + * + * @throws DataAccessException If something went wrong fetching the meta + * objects + */ + @Support + List getIndexes() throws DataAccessException; + /** * Generate a creation script for the entire meta data. * diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractMeta.java b/jOOQ/src/main/java/org/jooq/impl/AbstractMeta.java index 42ae7b1bee..be90edc1f7 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractMeta.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractMeta.java @@ -51,6 +51,7 @@ import java.util.Map; import org.jooq.Catalog; import org.jooq.Configuration; import org.jooq.DDLExportConfiguration; +import org.jooq.Index; import org.jooq.Meta; import org.jooq.Name; import org.jooq.Named; @@ -78,6 +79,7 @@ abstract class AbstractMeta extends AbstractScope implements Meta, Serializable private Map>> cachedUnqualifiedTables; private Map>> cachedUnqualifiedSequences; private List> cachedPrimaryKeys; + private List cachedIndexes; protected AbstractMeta(Configuration configuration) { super(configuration); @@ -249,9 +251,31 @@ abstract class AbstractMeta extends AbstractScope implements Meta, Serializable protected List> getPrimaryKeys0() { List> result = new ArrayList<>(); + for (Table table : getTables()) if (table.getPrimaryKey() != null) result.add(table.getPrimaryKey()); + + return result; + } + + @Override + public final List getIndexes() { + initIndexes(); + return Collections.unmodifiableList(cachedIndexes); + } + + private final void initIndexes() { + if (cachedIndexes == null) + cachedIndexes = new ArrayList<>(getIndexes0()); + } + + protected List getIndexes0() { + List result = new ArrayList<>(); + + for (Table table : getTables()) + result.addAll(table.getIndexes()); + return result; }