From 7bfcb347988d44b8a0794df185f784b3f1bd62b6 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Mon, 5 Jun 2017 15:39:42 +0200 Subject: [PATCH] [#6320] Implemented InformationSchema export for Indexes --- .../jooq/impl/InformationSchemaExport.java | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/jOOQ/src/main/java/org/jooq/impl/InformationSchemaExport.java b/jOOQ/src/main/java/org/jooq/impl/InformationSchemaExport.java index 9571569cad..c51aeee562 100644 --- a/jOOQ/src/main/java/org/jooq/impl/InformationSchemaExport.java +++ b/jOOQ/src/main/java/org/jooq/impl/InformationSchemaExport.java @@ -34,6 +34,7 @@ */ package org.jooq.impl; + import static org.jooq.util.xml.jaxb.TableConstraintType.FOREIGN_KEY; import static org.jooq.util.xml.jaxb.TableConstraintType.PRIMARY_KEY; import static org.jooq.util.xml.jaxb.TableConstraintType.UNIQUE; @@ -45,13 +46,17 @@ import java.util.Set; import org.jooq.Configuration; import org.jooq.Field; import org.jooq.ForeignKey; +import org.jooq.Index; import org.jooq.Key; import org.jooq.Schema; import org.jooq.Sequence; +import org.jooq.SortField; +import org.jooq.SortOrder; import org.jooq.Table; import org.jooq.UniqueKey; import org.jooq.tools.StringUtils; import org.jooq.util.xml.jaxb.Column; +import org.jooq.util.xml.jaxb.IndexColumnUsage; import org.jooq.util.xml.jaxb.InformationSchema; import org.jooq.util.xml.jaxb.KeyColumnUsage; import org.jooq.util.xml.jaxb.ReferentialConstraint; @@ -187,6 +192,55 @@ final class InformationSchemaExport { for (ForeignKey fk : t.getReferences()) if (includedTables.contains(fk.getKey().getTable())) exportKey0(result, t, fk, FOREIGN_KEY); + + for (Index index : t.getIndexes()) + exportIndex0(result, t, index); + } + + private static final void exportIndex0(InformationSchema result, Table t, Index index) { + org.jooq.util.xml.jaxb.Index i = new org.jooq.util.xml.jaxb.Index(); + + String catalogName = t.getCatalog().getName(); + String schemaName = t.getSchema().getName(); + + if (!StringUtils.isBlank(catalogName)) { + i.setIndexCatalog(catalogName); + i.setTableCatalog(catalogName); + } + + if (!StringUtils.isBlank(schemaName)) { + i.setIndexSchema(schemaName); + i.setTableSchema(schemaName); + } + + i.setIndexName(index.getName()); + i.setTableName(t.getName()); + i.setIsUnique(index.getUnique()); + result.getIndexes().add(i); + + int position = 1; + for (SortField sortField : index.getFields()) { + IndexColumnUsage ic = new IndexColumnUsage(); + + if (!StringUtils.isBlank(catalogName)) { + ic.setIndexCatalog(catalogName); + ic.setTableCatalog(catalogName); + } + + if (!StringUtils.isBlank(schemaName)) { + ic.setIndexSchema(schemaName); + ic.setTableSchema(schemaName); + } + + ic.setIndexName(index.getName()); + ic.setTableName(t.getName()); + + ic.setOrdinalPosition(position++); + ic.setColumnName(sortField.getName()); + ic.setIsDescending(sortField.getOrder() == SortOrder.DESC); + + result.getIndexColumnUsages().add(ic); + } } private static final void exportKey0(InformationSchema result, Table t, Key key, TableConstraintType constraintType) {