#2768 - ENH: Add eqIfPresent() - a helper expression for fluid style when some EQ are optional

This commit is contained in:
Rob Bygrave
2022-08-01 16:36:09 +12:00
parent f930471beb
commit 7474430a63
6 changed files with 116 additions and 3 deletions
@@ -23,6 +23,52 @@ public class TestQueryIsNull extends BaseTestCase {
assertThat(query.getGeneratedSql()).contains("name is null");
}
@Test
void query_defaultNullToIsNull() {
ResetBasicData.reset();
Query<Order> query = DB.find(Order.class).select("id, status")
.where().eq("status", null).query();
query.findList();
assertThat(query.getGeneratedSql()).isEqualTo("select t0.id, t0.status from o_order t0 where t0.status is null");
}
@Test
void query_eqIfPresent() {
ResetBasicData.reset();
Query<Order> query = DB.find(Order.class).select("id, status")
.where().eqIfPresent("status", null).query();
query.findList();
assertThat(query.getGeneratedSql()).isEqualTo("select t0.id, t0.status from o_order t0");
Query<Order> query1 = DB.find(Order.class).select("id, status")
.where().eqIfPresent("status", null).isNull("shipDate").query();
query1.findList();
assertThat(query1.getGeneratedSql()).isEqualTo("select t0.id, t0.status from o_order t0 where t0.ship_date is null");
Query<Order> query2 = DB.find(Order.class).select("id, status")
.where().isNotNull("orderDate").eqIfPresent("status", null).query();
query2.findList();
assertThat(query2.getGeneratedSql()).isEqualTo("select t0.id, t0.status from o_order t0 where t0.order_date is not null");
Query<Order> query3 = DB.find(Order.class).select("id, status")
.where().isNotNull("orderDate").eqIfPresent("status", null).isNull("shipDate").query();
query3.findList();
assertThat(query3.getGeneratedSql()).isEqualTo("select t0.id, t0.status from o_order t0 where t0.order_date is not null and t0.ship_date is null");
Query<Order> query4 = DB.find(Order.class).select("id, status")
.where().isNotNull("orderDate").eqIfPresent("status", Order.Status.NEW).isNull("shipDate").query();
query4.findList();
assertThat(query4.getGeneratedSql()).isEqualTo("select t0.id, t0.status from o_order t0 where t0.order_date is not null and t0.status = ? and t0.ship_date is null");
}
@Test
public void isNotNull_when_OneToMany_expect_existsSubquery() {
ResetBasicData.reset();