From 1b5309be62a3f412e3394696db0da44e5382b4cd Mon Sep 17 00:00:00 2001 From: lukaseder Date: Mon, 24 Apr 2017 16:06:31 +0200 Subject: [PATCH] [#6148] Add Queries.executeBatch() --- jOOQ/src/main/java/org/jooq/Queries.java | 31 +++++++++++++++++-- .../main/java/org/jooq/impl/QueriesImpl.java | 11 +++++-- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/Queries.java b/jOOQ/src/main/java/org/jooq/Queries.java index e1e592abda..8438656380 100644 --- a/jOOQ/src/main/java/org/jooq/Queries.java +++ b/jOOQ/src/main/java/org/jooq/Queries.java @@ -34,8 +34,11 @@ */ package org.jooq; +import java.sql.Statement; import java.util.stream.Stream; +import org.jooq.exception.DetachedException; + /** * A wrapper for a collection of queries. * @@ -74,9 +77,31 @@ public interface Queries extends QueryPart, Iterable { /** * Execute all queries one-by-one and return all results. *

- * This is a convenience method for calling {@link ResultQuery#fetchMany()} - * on each individual {@link ResultQuery}, or {@link Query#execute()} on all - * others. + * This is a convenience method for executing individual {@link #queries()}. + *

+ * If this {@link Queries} reference is attached to a {@link Configuration}, + * then that configuration is used through + * {@link DSLContext#fetchMany(ResultQuery)} or + * {@link DSLContext#execute(Query)}. If this queries reference + * is unattached, then each individual {@link ResultQuery#fetchMany()} or + * {@link Query#execute()} method is called. + * + * @throws DetachedException If this queries reference is + * unattached and at least one of the contained + * {@link #queries()} is also unattached. */ Results fetchMany(); + + /** + * Sends the entire batch of queries to the server and executes them using a + * JDBC {@link Statement#executeBatch()} operation. + *

+ * This {@link Queries} reference must be attached to a + * {@link Configuration}. + * + * @throws DetachedException If this queries reference is + * unattached. + * @see DSLContext#batch(Queries) + */ + int[] executeBatch(); } diff --git a/jOOQ/src/main/java/org/jooq/impl/QueriesImpl.java b/jOOQ/src/main/java/org/jooq/impl/QueriesImpl.java index 971ad37084..8fd5b83bb1 100644 --- a/jOOQ/src/main/java/org/jooq/impl/QueriesImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/QueriesImpl.java @@ -44,6 +44,7 @@ import org.jooq.AttachableInternal; import org.jooq.Clause; import org.jooq.Configuration; import org.jooq.Context; +import org.jooq.DSLContext; import org.jooq.Queries; import org.jooq.Query; import org.jooq.ResultQuery; @@ -103,16 +104,22 @@ final class QueriesImpl extends AbstractQueryPart implements Queries, Attachable @Override public final Results fetchMany() { ResultsImpl results = new ResultsImpl(configuration()); + DSLContext ctx = DSL.using(configuration()); for (Query query : this) if (query instanceof ResultQuery) - results.resultsOrRows.addAll(((ResultQuery) query).fetchMany().resultsOrRows()); + results.resultsOrRows.addAll(ctx.fetchMany((ResultQuery) query).resultsOrRows()); else - results.resultsOrRows.add(new ResultOrRowsImpl(query.execute())); + results.resultsOrRows.add(new ResultOrRowsImpl(ctx.execute(query))); return results; } + @Override + public final int[] executeBatch() { + return DSL.using(configuration()).batch(this).execute(); + } + // ------------------------------------------------------------------------ // Attachable API // ------------------------------------------------------------------------