From d26730f3f6fea75bc52599ee21a1bc4b40b4b061 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Mon, 9 Oct 2017 16:20:46 +0200 Subject: [PATCH] [#6663] Support new element in DSLContext.informationSchema() --- .../java/org/jooq/impl/DefaultDSLContext.java | 9 +--- .../jooq/impl/InformationSchemaExport.java | 54 ++++++++++++++++++- 2 files changed, 55 insertions(+), 8 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java index 0d2d3744b9..33f878ebe1 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java @@ -379,17 +379,12 @@ public class DefaultDSLContext extends AbstractScope implements DSLContext, Seri @Override public InformationSchema informationSchema(Catalog catalog) { - return InformationSchemaExport.exportSchemas(configuration(), catalog.getSchemas()); + return InformationSchemaExport.exportCatalogs(configuration(), Arrays.asList(catalog)); } @Override public InformationSchema informationSchema(Catalog... catalogs) { - List schemas = new ArrayList(); - - for (Catalog catalog : catalogs) - schemas.addAll(catalog.getSchemas()); - - return InformationSchemaExport.exportSchemas(configuration(), schemas); + return InformationSchemaExport.exportCatalogs(configuration(), Arrays.asList(catalogs)); } @Override diff --git a/jOOQ/src/main/java/org/jooq/impl/InformationSchemaExport.java b/jOOQ/src/main/java/org/jooq/impl/InformationSchemaExport.java index c51aeee562..aaa345ab85 100644 --- a/jOOQ/src/main/java/org/jooq/impl/InformationSchemaExport.java +++ b/jOOQ/src/main/java/org/jooq/impl/InformationSchemaExport.java @@ -43,6 +43,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import org.jooq.Catalog; import org.jooq.Configuration; import org.jooq.Field; import org.jooq.ForeignKey; @@ -71,12 +72,19 @@ final class InformationSchemaExport { static final InformationSchema exportTables(Configuration configuration, List> tables) { InformationSchema result = new InformationSchema(); + Set includedCatalogs = new LinkedHashSet(); Set includedSchemas = new LinkedHashSet(); Set> includedTables = new LinkedHashSet>(tables); for (Table t : tables) includedSchemas.add(t.getSchema()); + for (Schema s : includedSchemas) + includedCatalogs.add(s.getCatalog()); + + for (Catalog c : includedCatalogs) + exportCatalog0(result, c); + for (Schema s : includedSchemas) exportSchema0(result, s); @@ -89,10 +97,18 @@ final class InformationSchemaExport { static final InformationSchema exportSchemas(Configuration configuration, List schemas) { InformationSchema result = new InformationSchema(); + Set includedCatalogs = new LinkedHashSet(); Set> includedTables = new LinkedHashSet>(); - for (Schema s : schemas) + + for (Schema s : schemas) { + includedCatalogs.add(s.getCatalog()); + for (Table t : s.getTables()) includedTables.add(t); + } + + for (Catalog c : includedCatalogs) + exportCatalog0(result, c); for (Schema s : schemas) { exportSchema0(result, s); @@ -107,6 +123,33 @@ final class InformationSchemaExport { return result; } + static final InformationSchema exportCatalogs(Configuration configuration, List catalogs) { + InformationSchema result = new InformationSchema(); + + Set> includedTables = new LinkedHashSet>(); + + for (Catalog c : catalogs) + for (Schema s : c.getSchemas()) + for (Table t : s.getTables()) + includedTables.add(t); + + for (Catalog c : catalogs) { + exportCatalog0(result, c); + + for (Schema s : c.getSchemas()) { + exportSchema0(result, s); + + for (Table t : s.getTables()) + exportTable0(configuration, result, t, includedTables); + + for (Sequence q : s.getSequences()) + exportSequences0(configuration, result, q); + } + } + + return result; + } + private static final void exportSequences0(Configuration configuration, InformationSchema result, Sequence q) { org.jooq.util.xml.jaxb.Sequence iq = new org.jooq.util.xml.jaxb.Sequence(); @@ -131,6 +174,15 @@ final class InformationSchemaExport { result.getSequences().add(iq); } + private static final void exportCatalog0(InformationSchema result, Catalog c) { + org.jooq.util.xml.jaxb.Catalog ic = new org.jooq.util.xml.jaxb.Catalog(); + + if (!StringUtils.isBlank(c.getName())) { + ic.setCatalogName(c.getName()); + result.getCatalogs().add(ic); + } + } + private static final void exportSchema0(InformationSchema result, Schema s) { org.jooq.util.xml.jaxb.Schema is = new org.jooq.util.xml.jaxb.Schema();