From ebdc28e1cd729d37bc3b3f45c7fab1197bf1244e Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Wed, 19 Dec 2018 13:58:28 +1300 Subject: [PATCH] #1579 - ENH: for UpdateQuery add setLabel() and update() as top level methods --- src/main/java/io/ebean/UpdateQuery.java | 10 ++++++ .../server/querydefn/DefaultUpdateQuery.java | 11 +++++++ src/test/java/io/ebean/UpdateQueryTest.java | 32 +++++++++++++++++++ 3 files changed, 53 insertions(+) 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() {