mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
#1354 - ENH: Add SqlUpdate setNextParameter() ... as alternative for positioned parameters
This commit is contained in:
@@ -30,6 +30,35 @@ package io.ebean;
|
||||
* String msg = "There were " + modifiedCount + " rows updated";
|
||||
*
|
||||
* }</pre>
|
||||
* <p>
|
||||
* <h3>Example: Using setNextParameter()</h3>
|
||||
* <pre>{@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();
|
||||
* }
|
||||
*
|
||||
* }</pre>
|
||||
*
|
||||
* @see Update
|
||||
* @see SqlQuery
|
||||
@@ -61,7 +90,7 @@ public interface SqlUpdate {
|
||||
|
||||
/**
|
||||
* Execute and return the generated key. This is effectively a short cut for:
|
||||
*
|
||||
* <p>
|
||||
* <pre>{@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.
|
||||
*/
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user