diff --git a/src/main/java/io/ebean/UpdateQuery.java b/src/main/java/io/ebean/UpdateQuery.java index b4633a462..336ad38b1 100644 --- a/src/main/java/io/ebean/UpdateQuery.java +++ b/src/main/java/io/ebean/UpdateQuery.java @@ -154,9 +154,19 @@ public interface UpdateQuery { */ UpdateQuery setProfileLocation(ProfileLocation profileLocation); + /** + * Set the label on the update query. + */ + UpdateQuery setLabel(String label); + /** * Return the query expression list to add predicates to. */ ExpressionList where(); + /** + * Execute the update returning the number of rows updated. + */ + int update(); + } diff --git a/src/main/java/io/ebeaninternal/server/querydefn/DefaultUpdateQuery.java b/src/main/java/io/ebeaninternal/server/querydefn/DefaultUpdateQuery.java index f9189e88b..20d4ae3a0 100644 --- a/src/main/java/io/ebeaninternal/server/querydefn/DefaultUpdateQuery.java +++ b/src/main/java/io/ebeaninternal/server/querydefn/DefaultUpdateQuery.java @@ -48,8 +48,19 @@ public class DefaultUpdateQuery implements UpdateQuery { return this; } + @Override + public UpdateQuery setLabel(String label) { + query.setLabel(label); + return this; + } + @Override public ExpressionList where() { return query.where(); } + + @Override + public int update() { + return query.update(); + } } diff --git a/src/test/java/io/ebean/UpdateQueryTest.java b/src/test/java/io/ebean/UpdateQueryTest.java index 304a228f5..545712bc6 100644 --- a/src/test/java/io/ebean/UpdateQueryTest.java +++ b/src/test/java/io/ebean/UpdateQueryTest.java @@ -4,10 +4,12 @@ import io.ebean.annotation.IgnorePlatform; import io.ebean.annotation.Platform; import io.ebean.meta.BasicMetricVisitor; import io.ebean.meta.MetaOrmQueryMetric; +import org.ebeantest.LoggedSqlCollector; import org.junit.Test; import org.tests.model.basic.Country; import org.tests.model.basic.Customer; import org.tests.model.basic.EBasicWithUniqueCon; +import org.tests.model.basic.ResetBasicData; import java.sql.Timestamp; import java.util.List; @@ -43,6 +45,36 @@ public class UpdateQueryTest extends BaseTestCase { assertThat(ormQueryMetrics.get(0).getLabel()).isEqualTo("updateActive"); } + @Test + public void update() { + + ResetBasicData.reset(); + + resetAllMetrics(); + + UpdateQuery update = server().update(Customer.class); + + LoggedSqlCollector.start(); + + int rows = update + .setRaw("status = status") + .setLabel("updateAll") + .update(); + + + List sql = LoggedSqlCollector.stop(); + assertThat(sql).hasSize(1); + assertThat(rows).isGreaterThan(0); + + assertThat(sql.get(0)).contains("update o_customer set status = status"); + + BasicMetricVisitor basic = visitMetricsBasic(); + List ormQueryMetrics = basic.getOrmQueryMetrics(); + assertThat(ormQueryMetrics).hasSize(1); + assertThat(ormQueryMetrics.get(0).getType()).isEqualTo(Customer.class); + assertThat(ormQueryMetrics.get(0).getLabel()).isEqualTo("updateAll"); + } + @Test public void update_withTransactionBatch() {