From da8abbdbb98d885e76038e5f288488fffe7b0f56 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 30 Oct 2019 16:09:53 +0100 Subject: [PATCH] [jOOQ/jOOQ#9471] JDBCDatabase does not order objects alphabetically --- .../org/jooq/meta/AbstractMetaDatabase.java | 36 +++++++++++++++---- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractMetaDatabase.java b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractMetaDatabase.java index 21d26f0e00..49ebd79fdd 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractMetaDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractMetaDatabase.java @@ -40,12 +40,15 @@ package org.jooq.meta; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.List; import org.jooq.Catalog; import org.jooq.DSLContext; import org.jooq.Field; import org.jooq.Meta; +import org.jooq.MetaProvider; import org.jooq.Schema; import org.jooq.Sequence; import org.jooq.Table; @@ -64,7 +67,15 @@ public abstract class AbstractMetaDatabase extends AbstractDatabase { @Override protected DSLContext create0() { - return DSL.using(getConnection()); + DSLContext ctx = DSL.using(getConnection()); + ctx.configuration().set(new MetaProvider() { + @Override + public Meta provide() { + return AbstractMetaDatabase.this.getMeta0(); + } + }); + + return ctx; } abstract protected Meta getMeta0(); @@ -109,6 +120,7 @@ public abstract class AbstractMetaDatabase extends AbstractDatabase { for (Catalog catalog : getCatalogsFromMeta()) result.add(new CatalogDefinition(this, catalog.getName(), "")); + Collections.sort(result, COMP); return result; } @@ -116,7 +128,7 @@ public abstract class AbstractMetaDatabase extends AbstractDatabase { if (catalogs == null) { catalogs = new ArrayList<>(); - for (Catalog catalog : create().meta().getCatalogs()) + for (Catalog catalog : getMeta0().getCatalogs()) catalogs.add(catalog); } @@ -129,15 +141,16 @@ public abstract class AbstractMetaDatabase extends AbstractDatabase { for (Schema schema : getSchemasFromMeta()) { if (schema.getCatalog() != null) { - if (getCatalog(schema.getCatalog().getName()) != null) { - result.add(new SchemaDefinition(this, schema.getName(), "", getCatalog(schema.getCatalog().getName()))); - } + CatalogDefinition catalog = getCatalog(schema.getCatalog().getName()); + + if (catalog != null) + result.add(new SchemaDefinition(this, schema.getName(), "", catalog)); } else result.add(new SchemaDefinition(this, schema.getName(), "")); } - + Collections.sort(result, COMP); return result; } @@ -145,7 +158,7 @@ public abstract class AbstractMetaDatabase extends AbstractDatabase { if (schemas == null) { schemas = new ArrayList<>(); - for (Schema schema : create().meta().getSchemas()) + for (Schema schema : getMeta0().getSchemas()) schemas.add(schema); } @@ -171,6 +184,7 @@ public abstract class AbstractMetaDatabase extends AbstractDatabase { } } + Collections.sort(result, COMP); return result; } @@ -186,6 +200,7 @@ public abstract class AbstractMetaDatabase extends AbstractDatabase { result.add(new DefaultMetaTableDefinition(sd, table)); } + Collections.sort(result, COMP); return result; } @@ -224,4 +239,11 @@ public abstract class AbstractMetaDatabase extends AbstractDatabase { List result = new ArrayList<>(); return result; } + + private static final Comparator COMP = new Comparator() { + @Override + public int compare(Definition o1, Definition o2) { + return o1.getQualifiedInputName().compareTo(o2.getQualifiedInputName()); + } + }; }