From 580ea3e8372de2d984c325e2c1b8188b6668e1ab Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Mon, 15 Jun 2020 17:12:36 +0200 Subject: [PATCH] [jOOQ/jOOQ#10280] Add Meta.detach() to create an in-memory copy of a Meta implementation --- jOOQ/src/main/java/org/jooq/Meta.java | 6 ++++++ jOOQ/src/main/java/org/jooq/impl/AbstractMeta.java | 5 +++++ jOOQ/src/main/java/org/jooq/impl/DetachedMeta.java | 9 ++------- jOOQ/src/main/java/org/jooq/impl/FilteredMeta.java | 6 +++--- .../main/java/org/jooq/impl/TranslatingMetaProvider.java | 4 ++-- 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/Meta.java b/jOOQ/src/main/java/org/jooq/Meta.java index ab4d92e5f3..ce2c6941e0 100644 --- a/jOOQ/src/main/java/org/jooq/Meta.java +++ b/jOOQ/src/main/java/org/jooq/Meta.java @@ -287,6 +287,12 @@ public interface Meta extends Scope { */ Meta filterIndexes(Predicate filter); + /** + * Eager-create an in-memory copy of this {@link Meta} instance without any + * connection to the original data source. + */ + Meta detach() throws DataAccessException; + /** * Generate a creation script for the entire meta data. * diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractMeta.java b/jOOQ/src/main/java/org/jooq/impl/AbstractMeta.java index 7a51031aba..8da824e148 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractMeta.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractMeta.java @@ -460,6 +460,11 @@ abstract class AbstractMeta extends AbstractScope implements Meta, Serializable ); } + @Override + public final Meta detach() { + return new DetachedMeta(this); + } + @Override public final Queries ddl() { return ddl(new DDLExportConfiguration()); diff --git a/jOOQ/src/main/java/org/jooq/impl/DetachedMeta.java b/jOOQ/src/main/java/org/jooq/impl/DetachedMeta.java index 695e0321cd..62c214c878 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DetachedMeta.java +++ b/jOOQ/src/main/java/org/jooq/impl/DetachedMeta.java @@ -52,7 +52,6 @@ import org.jooq.Field; import org.jooq.ForeignKey; import org.jooq.Index; import org.jooq.Meta; -import org.jooq.MetaProvider; import org.jooq.Name; import org.jooq.Package; import org.jooq.Record; @@ -77,11 +76,7 @@ final class DetachedMeta extends AbstractMeta { private static final long serialVersionUID = 5561057000510740144L; private Meta delegate; - static Meta detach(MetaProvider provider) { - return new DetachedMeta(provider.provide()); - } - - private DetachedMeta(Meta meta) { + DetachedMeta(Meta meta) { super(meta.configuration()); delegate = meta; @@ -224,7 +219,7 @@ final class DetachedMeta extends AbstractMeta { } static DetachedTable copyOf(Table table, Schema owner) { - DetachedTable result = new DetachedTable<>(table.getUnqualifiedName(), owner, DSL.comment(table.getComment())); + DetachedTable result = new DetachedTable<>(table.getUnqualifiedName(), owner, table.getCommentPart()); for (Field field : table.fields()) DetachedTable.createField(field.getName(), field.getDataType(), result, field.getComment()); diff --git a/jOOQ/src/main/java/org/jooq/impl/FilteredMeta.java b/jOOQ/src/main/java/org/jooq/impl/FilteredMeta.java index 4926ac97df..5bea9c10b2 100644 --- a/jOOQ/src/main/java/org/jooq/impl/FilteredMeta.java +++ b/jOOQ/src/main/java/org/jooq/impl/FilteredMeta.java @@ -233,7 +233,7 @@ final class FilteredMeta extends AbstractMeta { private transient List schemas; private FilteredCatalog(Catalog delegate) { - super(delegate.getQualifiedName(), DSL.comment(delegate.getComment())); + super(delegate.getQualifiedName(), delegate.getCommentPart()); this.delegate = delegate; } @@ -261,7 +261,7 @@ final class FilteredMeta extends AbstractMeta { private transient List> sequences; private FilteredSchema(FilteredCatalog catalog, Schema delegate) { - super(delegate.getQualifiedName(), catalog, DSL.comment(delegate.getComment())); + super(delegate.getQualifiedName(), catalog, delegate.getCommentPart()); this.delegate = delegate; } @@ -325,7 +325,7 @@ final class FilteredMeta extends AbstractMeta { private transient List> references; private FilteredTable(FilteredSchema schema, Table delegate) { - super(delegate.getQualifiedName(), schema, null, null, DSL.comment(delegate.getComment()), delegate.getOptions()); + super(delegate.getQualifiedName(), schema, null, null, delegate.getCommentPart(), delegate.getOptions()); this.delegate = delegate; diff --git a/jOOQ/src/main/java/org/jooq/impl/TranslatingMetaProvider.java b/jOOQ/src/main/java/org/jooq/impl/TranslatingMetaProvider.java index a8f9ae61fe..41fe613bb0 100644 --- a/jOOQ/src/main/java/org/jooq/impl/TranslatingMetaProvider.java +++ b/jOOQ/src/main/java/org/jooq/impl/TranslatingMetaProvider.java @@ -96,9 +96,9 @@ final class TranslatingMetaProvider implements MetaProvider { for (Source script : scripts) initializer.loadScript(script); - return DetachedMeta.detach(new DefaultMetaProvider( + return new DetachedMeta(new DefaultMetaProvider( configuration.derive().set(initializer.connection).set(configuration.settings().getInterpreterDialect()) - )); + ).provide()); } finally { JDBCUtils.safeClose(initializer);