diff --git a/src/main/java/io/ebean/SqlUpdate.java b/src/main/java/io/ebean/SqlUpdate.java index 59865f815..87364334d 100644 --- a/src/main/java/io/ebean/SqlUpdate.java +++ b/src/main/java/io/ebean/SqlUpdate.java @@ -30,6 +30,35 @@ package io.ebean; * String msg = "There were " + modifiedCount + " rows updated"; * * } + *
+ *
{@code
+ *
+ * String sql = "insert into audit_log (id, description, modified_description) values (?,?,?)";
+ * SqlUpdate insert = Ebean.createSqlUpdate(sql);
+ *
+ * try (Transaction txn = Ebean.beginTransaction()) {
+ * txn.setBatchMode(true);
+ *
+ * insert.setNextParameter(10000);
+ * insert.setNextParameter("hello");
+ * insert.setNextParameter("rob");
+ * insert.execute();
+ *
+ * insert.setNextParameter(10001);
+ * insert.setNextParameter("goodbye");
+ * insert.setNextParameter("rob");
+ * insert.execute();
+ *
+ * insert.setNextParameter(10002);
+ * insert.setNextParameter("chow");
+ * insert.setNextParameter("bob");
+ * insert.execute();
+ *
+ * txn.commit();
+ * }
+ *
+ * }
*
* @see Update
* @see SqlQuery
@@ -61,7 +90,7 @@ public interface SqlUpdate {
/**
* Execute and return the generated key. This is effectively a short cut for:
- *
+ * *
{@code
*
* sqlUpdate.execute();
@@ -137,6 +166,13 @@ public interface SqlUpdate {
*/
SqlUpdate setTimeout(int secs);
+ /**
+ * Set the next positioned parameter.
+ *
+ * @param value The value to bind
+ */
+ SqlUpdate setNextParameter(Object value);
+
/**
* Set a parameter via its index position.
*/
diff --git a/src/main/java/io/ebeaninternal/server/core/DefaultSqlUpdate.java b/src/main/java/io/ebeaninternal/server/core/DefaultSqlUpdate.java
index c65b6c269..28869a8c3 100644
--- a/src/main/java/io/ebeaninternal/server/core/DefaultSqlUpdate.java
+++ b/src/main/java/io/ebeaninternal/server/core/DefaultSqlUpdate.java
@@ -105,6 +105,7 @@ public final class DefaultSqlUpdate implements Serializable, SpiSqlUpdate {
@Override
public int execute() {
+ addPos = 0;
if (server != null) {
return server.execute(this);
} else {
@@ -182,8 +183,9 @@ public final class DefaultSqlUpdate implements Serializable, SpiSqlUpdate {
return this;
}
- public void addParameter(Object value) {
+ public SqlUpdate setNextParameter(Object value) {
setParameter(++addPos, value);
+ return this;
}
@Override
diff --git a/src/test/java/org/tests/persistencecontext/TestPersistenceContextQueryScope.java b/src/test/java/org/tests/persistencecontext/TestPersistenceContextQueryScope.java
index 367ec77ac..2221a7424 100644
--- a/src/test/java/org/tests/persistencecontext/TestPersistenceContextQueryScope.java
+++ b/src/test/java/org/tests/persistencecontext/TestPersistenceContextQueryScope.java
@@ -3,8 +3,8 @@ package org.tests.persistencecontext;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.SqlUpdate;
-import org.tests.model.basic.EBasicVer;
import org.junit.Test;
+import org.tests.model.basic.EBasicVer;
import static io.ebean.PersistenceContextScope.QUERY;
import static io.ebean.PersistenceContextScope.TRANSACTION;
@@ -28,8 +28,8 @@ public class TestPersistenceContextQueryScope extends BaseTestCase {
// do an update of the name in the DB
SqlUpdate sqlUpdate = Ebean.createSqlUpdate("update e_basicver set name=? where id=?");
- sqlUpdate.setParameter(1, "second");
- sqlUpdate.setParameter(2, bean.getId());
+ sqlUpdate.setNextParameter("second");
+ sqlUpdate.setNextParameter(bean.getId());
int rowCount = sqlUpdate.execute();
assertEquals(1, rowCount);
diff --git a/src/test/java/org/tests/rawsql/TestInsertSqlLogging.java b/src/test/java/org/tests/rawsql/TestInsertSqlLogging.java
index 0d0c1824b..44e7ceef3 100644
--- a/src/test/java/org/tests/rawsql/TestInsertSqlLogging.java
+++ b/src/test/java/org/tests/rawsql/TestInsertSqlLogging.java
@@ -5,8 +5,8 @@ import io.ebean.Ebean;
import io.ebean.SqlUpdate;
import io.ebean.Transaction;
import io.ebeaninternal.api.SpiTransaction;
-import org.tests.idkeys.db.AuditLog;
import org.junit.Test;
+import org.tests.idkeys.db.AuditLog;
import static org.junit.Assert.assertFalse;
@@ -15,15 +15,33 @@ public class TestInsertSqlLogging extends BaseTestCase {
@Test
public void test() {
- Ebean.delete(AuditLog.class, 10000);
+ Ebean.find(AuditLog.class).where().ge("id", 10000).delete();
String sql = "insert into audit_log (id, description, modified_description) values (?,?,?)";
- SqlUpdate sqlUpdate = Ebean.createSqlUpdate(sql);
- sqlUpdate.setParameter(1, 10000);
- sqlUpdate.setParameter(2, "hello");
- sqlUpdate.setParameter(3, "rob");
+ SqlUpdate insert = Ebean.createSqlUpdate(sql);
+
+ try (Transaction txn = Ebean.beginTransaction()) {
+ txn.setBatchMode(true);
+ txn.setBatchSize(2);
+
+ insert.setNextParameter(10000);
+ insert.setNextParameter("hello");
+ insert.setNextParameter("rob");
+ insert.execute();
+
+ insert.setNextParameter(10001);
+ insert.setNextParameter("goodbye");
+ insert.setNextParameter("rob");
+ insert.execute();
+
+ insert.setNextParameter(10002);
+ insert.setNextParameter("chow");
+ insert.setNextParameter("bob");
+ insert.execute();
+
+ txn.commit();
+ }
- sqlUpdate.execute();
}
@Test