From 3d3a7bc0ca8cbf3bc5631f036401e2d77f28f5f0 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 12 Jul 2023 10:53:47 +0200 Subject: [PATCH] [jOOQ/jOOQ#15318] MetaImpl is missing view source code or unique constraints for objects in other catalogs --- .../src/main/java/org/jooq/impl/MetaImpl.java | 68 ++++++++++++++++--- 1 file changed, 59 insertions(+), 9 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java b/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java index 20c85639bc..f996b4880b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java @@ -197,6 +197,48 @@ final class MetaImpl extends AbstractMeta { } catch (SQLException e) { throw new DataAccessException("Error while running MetaFunction", e); + } + } + + private static final T withCatalog(Catalog catalog, DSLContext ctx, ThrowingFunction supplier) throws E { + String previous = null; + Exception e = null; + + try { + + + + + + + + + + + + + + + return supplier.apply(ctx); + } + catch (Exception x) { + e = x; + throw (E) x; + } + finally { + + + + + + + + + + + + + } } @@ -473,14 +515,18 @@ final class MetaImpl extends AbstractMeta { String sql = M_UNIQUE_KEYS(family()); if (sql != null) { - Result result = meta(meta -> DSL.using(meta.getConnection(), family()).resultQuery( - sql, - NO_SUPPORT_SCHEMAS.contains(dialect()) - ? EMPTY_OBJECT - : inverseSchemaCatalog - ? new Object[] { catalog } - : new Object[] { schema } - ).fetch()); + Result result = meta(meta -> + withCatalog(DSL.catalog(catalog), DSL.using(meta.getConnection(), family()), ctx -> + ctx.resultQuery( + sql, + NO_SUPPORT_SCHEMAS.contains(dialect()) + ? EMPTY_OBJECT + : inverseSchemaCatalog + ? new Object[] { catalog } + : new Object[] { schema } + ).fetch() + ) + ); // TODO Support catalogs as well Map> groups = result.intoGroups(new Field[] { result.field(0), result.field(1), result.field(2) }); @@ -644,7 +690,11 @@ final class MetaImpl extends AbstractMeta { String sql = M_SOURCES(family()); if (sql != null) { - Result result = meta(meta -> DSL.using(meta.getConnection(), family()).resultQuery(sql, MetaSchema.this.getName()).fetch()); + Result result = meta(meta -> + withCatalog(getCatalog(), DSL.using(meta.getConnection(), family()), ctx -> + ctx.resultQuery(sql, MetaSchema.this.getName()).fetch() + ) + ); // TODO Support catalogs as well Map> groups = result.intoGroups(new Field[] { result.field(0), result.field(1), result.field(2) });