#398 - ENH: Support delete using a Query instance

This commit is contained in:
Robin Bygrave
2015-08-29 00:58:47 +12:00
parent ccba5d08ef
commit 1c23720605
21 changed files with 407 additions and 24 deletions
@@ -161,6 +161,11 @@ public class TDSpiEbeanServer implements SpiEbeanServer {
return null;
}
@Override
public <T> int delete(Query<T> query, Transaction t) {
return 0;
}
@Override
public <T> List<Version<T>> findVersions(Query<T> query, Transaction transaction) {
return null;
@@ -0,0 +1,48 @@
package com.avaje.tests.delete;
import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.EbeanServer;
import com.avaje.ebean.Query;
import com.avaje.tests.model.basic.Contact;
import org.avaje.ebeantest.LoggedSqlCollector;
import org.junit.Test;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
public class TestDeleteByQuery extends BaseTestCase {
@Test
public void test() {
EbeanServer server = Ebean.getDefaultServer();
Query<Contact> query = server.find(Contact.class).where().eq("group.name", "NahYeahMaybe").query();
LoggedSqlCollector.start();
server.delete(query, null);
List<String> loggedSql = LoggedSqlCollector.stop();
assertThat(loggedSql).hasSize(1);
assertThat(loggedSql.get(0)).contains("delete from contact where id in (select t0.id c0 from contact t0 left outer join");
Query<Contact> query2 = server.find(Contact.class).where().eq("firstName", "NotARealFirstName").query();
LoggedSqlCollector.start();
server.delete(query2, null);
loggedSql = LoggedSqlCollector.stop();
assertThat(loggedSql).hasSize(1);
assertThat(loggedSql.get(0)).contains("delete from contact t0 where t0.first_name =");
server.find(Contact.class).select("id").where().eq("firstName", "NotARealFirstName").delete();
server.find(Contact.class).select("id").where().eq("firstName", "TwoAlsoNotRealFirstName").query().delete();
List<Contact> list = server.find(Contact.class).select("id").where().eq("firstName", "NotARealFirstName").findList();
assertThat(list).isEmpty();
}
}