package io.ebean; import org.tests.model.basic.Country; import org.tests.model.basic.Customer; import org.junit.Test; import java.sql.Timestamp; import static org.assertj.core.api.Assertions.assertThat; public class UpdateQueryTest extends BaseTestCase { @Test public void basic() { EbeanServer server = server(); UpdateQuery<Customer> update = server.update(Customer.class); Query<Customer> query = update .set("status", Customer.Status.ACTIVE) .set("updtime", new Timestamp(System.currentTimeMillis())) .where() .eq("status", Customer.Status.NEW) .gt("id", 1000) .query(); query.update(); assertThat(query.getGeneratedSql()).contains("update o_customer set status=?, updtime=? where status = ? and id > ?"); } @Test public void withJoin() { if (isMySql()) { return; } EbeanServer server = server(); Country nz = server.getReference(Country.class, "NZ"); UpdateQuery<Customer> update = server.update(Customer.class); Query<Customer> query = update .set("status", Customer.Status.ACTIVE) .set("updtime", new Timestamp(System.currentTimeMillis())) .where() .eq("status", Customer.Status.NEW) .eq("billingAddress.country", nz) //.isEmpty("contacts") .gt("id", 1000) .query(); query.update(); assertThat(sqlOf(query)).contains("update o_customer set status=?, updtime=? where id in (select t0.id from o_customer t0 left join o_address t1 on t1.id = t0.billing_address_id where t0.status = ? and t1.country_code = ? and t0.id > ? )"); } @Test public void whereIsEmpty() { EbeanServer server = server(); Query<Customer> updateQuery = server .update(Customer.class) .set("status", Customer.Status.ACTIVE) .where() .isEmpty("contacts") .gt("id", 1000) .query(); updateQuery.update(); assertThat(updateQuery.getGeneratedSql()).contains("update o_customer set status=? where not exists (select 1 from contact where customer_id = id) and id > ?"); } @Test public void setNull() { EbeanServer server = server(); Query<Customer> updateQuery = server .update(Customer.class) .setNull("status") .where() .gt("id", 1000) .query(); updateQuery.update(); assertThat(updateQuery.getGeneratedSql()).contains("update o_customer set status=null where id > ?"); } @Test public void set_whenValueIsNull_expectNull() { EbeanServer server = server(); Query<Customer> updateQuery = server .update(Customer.class) .set("status", null) .where() .gt("id", 1000) .query(); updateQuery.update(); assertThat(updateQuery.getGeneratedSql()).contains("update o_customer set status=null where id > ?"); } @Test public void setExpression() { EbeanServer server = server(); Query<Customer> updateQuery = server .update(Customer.class) .setRaw("status = coalesce(status, 'A')") .where() .gt("id", 1000) .query(); updateQuery.update(); assertThat(updateQuery.getGeneratedSql()).contains("update o_customer set status = coalesce(status, 'A') where id > ?"); } @Test public void setExpression_withBind() { EbeanServer server = server(); Query<Customer> updateQuery = server .update(Customer.class) .setRaw("status = coalesce(status, ?)", Customer.Status.ACTIVE) .where() .gt("id", 1000) .query(); updateQuery.update(); assertThat(updateQuery.getGeneratedSql()).contains("update o_customer set status = coalesce(status, ?) where id > ?"); } @Test public void fluidSyntax() { EbeanServer server = server(); int rows = server .update(Customer.class) .setRaw("status = coalesce(status, ?)", Customer.Status.ACTIVE) .where() .gt("id", 10000) .update(); assertThat(rows).isEqualTo(0); } @Test public void useViaEbean() { int rows = Ebean.update(Customer.class) .setRaw("status = coalesce(status, ?)", Customer.Status.ACTIVE) .where() .gt("id", 10000) .update(); assertThat(rows).isEqualTo(0); } }