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) });