diff --git a/jOOQ/src/main/java/org/jooq/DSLContext.java b/jOOQ/src/main/java/org/jooq/DSLContext.java
index 185309670c..bedc23e113 100644
--- a/jOOQ/src/main/java/org/jooq/DSLContext.java
+++ b/jOOQ/src/main/java/org/jooq/DSLContext.java
@@ -314,6 +314,14 @@ public interface DSLContext extends Scope , AutoCloseable {
*/
Meta meta(Source... sources);
+ /**
+ * Create meta data from a set of DDL queries.
+ *
+ * This works the same way as {@link #meta(Source...)}, without the need of
+ * parsing the DDL scripts.
+ */
+ Meta meta(Query... queries);
+
/**
* Convenience method for {@link Meta#informationSchema()}.
*
diff --git a/jOOQ/src/main/java/org/jooq/impl/DDLInterpreter.java b/jOOQ/src/main/java/org/jooq/impl/DDLInterpreter.java
index 20c12f8951..c4e1f86ee9 100644
--- a/jOOQ/src/main/java/org/jooq/impl/DDLInterpreter.java
+++ b/jOOQ/src/main/java/org/jooq/impl/DDLInterpreter.java
@@ -79,10 +79,13 @@ import org.jooq.UniqueKey;
import org.jooq.exception.DataAccessException;
import org.jooq.exception.DataDefinitionException;
import org.jooq.impl.ConstraintImpl.Action;
+import org.jooq.tools.JooqLogger;
@SuppressWarnings("serial")
final class DDLInterpreter {
+ private static final JooqLogger log = JooqLogger.getLogger(DDLInterpreter.class);
+
private final Configuration configuration;
private final Map catalogs = new LinkedHashMap<>();
private final MutableCatalog defaultCatalog;
@@ -118,6 +121,8 @@ final class DDLInterpreter {
// -------------------------------------------------------------------------
final void accept(Query query) {
+ log.info(query);
+
if (query instanceof CreateSchemaImpl)
accept0((CreateSchemaImpl) query);
else if (query instanceof AlterSchemaImpl)
diff --git a/jOOQ/src/main/java/org/jooq/impl/DDLInterpreterMetaProvider.java b/jOOQ/src/main/java/org/jooq/impl/DDLInterpreterMetaProvider.java
index 24e2614fd2..2256654cc2 100644
--- a/jOOQ/src/main/java/org/jooq/impl/DDLInterpreterMetaProvider.java
+++ b/jOOQ/src/main/java/org/jooq/impl/DDLInterpreterMetaProvider.java
@@ -44,7 +44,6 @@ import org.jooq.Configuration;
import org.jooq.DSLContext;
import org.jooq.Meta;
import org.jooq.MetaProvider;
-import org.jooq.Queries;
import org.jooq.Query;
import org.jooq.Source;
import org.jooq.tools.JooqLogger;
@@ -65,10 +64,18 @@ final class DDLInterpreterMetaProvider implements MetaProvider {
private final Configuration configuration;
private final Source[] scripts;
+ private final Query[] queries;
public DDLInterpreterMetaProvider(Configuration configuration, Source... scripts) {
this.configuration = configuration == null ? new DefaultConfiguration() : configuration;
this.scripts = scripts;
+ this.queries = null;
+ }
+
+ public DDLInterpreterMetaProvider(Configuration configuration, Query... queries) {
+ this.configuration = configuration == null ? new DefaultConfiguration() : configuration;
+ this.scripts = null;
+ this.queries = queries;
}
@Override
@@ -76,8 +83,13 @@ final class DDLInterpreterMetaProvider implements MetaProvider {
final DDLInterpreter interpreter = new DDLInterpreter(configuration);
Configuration localConfiguration = configuration.derive();
DSLContext ctx = DSL.using(localConfiguration);
- for (Source script : scripts)
- loadScript(ctx, script, interpreter);
+
+ if (scripts != null)
+ for (Source script : scripts)
+ loadScript(ctx, script, interpreter);
+ else
+ for (Query query : queries)
+ interpreter.accept(query);
return interpreter.meta();
}
@@ -86,12 +98,9 @@ final class DDLInterpreterMetaProvider implements MetaProvider {
Reader reader = source.reader();
try {
Scanner s = new Scanner(reader).useDelimiter("\\A");
- Queries queries = ctx.parser().parse(s.hasNext() ? s.next() : "");
- for (Query query : queries) {
+ for (Query query : ctx.parser().parse(s.hasNext() ? s.next() : ""))
interpreter.accept(query);
- log.info(query);
- }
}
catch (ParserException e) {
log.error("An exception occurred while parsing a DDL script: " + e.getMessage()
diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java
index 4e3474b936..353ae9631b 100644
--- a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java
+++ b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java
@@ -444,6 +444,11 @@ public class DefaultDSLContext extends AbstractScope implements DSLContext, Seri
return new SourceMetaProvider(configuration(), sources).provide();
}
+ @Override
+ public Meta meta(Query... queries) {
+ return new DDLInterpreterMetaProvider(configuration(), queries).provide();
+ }
+
@Override
public InformationSchema informationSchema(Catalog catalog) {
return InformationSchemaExport.exportCatalogs(configuration(), Arrays.asList(catalog));