Fix SELF of QueryBuilder, QueryBean, IQueryBean for fluid use

Currently, the SELF response type of QueryBuilder returns as Object when really we want it to return the SELF generic type of QueryBuilder, QueryBean, IQueryBean etc

Note that this change requires an updated ebean-agent
This commit is contained in:
Rob Bygrave
2024-10-18 16:18:39 +13:00
parent e0a00bea34
commit e04ac50800
14 changed files with 44 additions and 14 deletions
@@ -1,5 +1,9 @@
package org.querytest;
import io.ebean.QueryBuilder;
import io.ebean.QueryBuilderProjection;
import io.ebean.typequery.IQueryBean;
import io.ebean.typequery.QueryBean;
import org.example.domain.Customer;
import org.example.domain.query.QCustomer;
import org.junit.jupiter.api.Test;
@@ -46,4 +50,29 @@ class QueryAlsoIfTest {
q.findList();
assertThat(q.getGeneratedSql()).isEqualTo("select /* QueryAlsoIfTest.notApply */ t0.id, t0.name from be_customer t0 where t0.name is not null");
}
@Test
void queryBuilders_expect_fluidUseOfSELF() {
var q = new QCustomer();
checkQueryBean(q);
checkIQueryBean(q);
checkQueryBuilder(q);
checkQueryBuilderProjection(q);
}
private void checkQueryBean(QueryBean<?, ?> queryBean) {
queryBean.setFirstRow(10).setMaxRows(10);
}
private void checkIQueryBean(IQueryBean<?, ?> iQueryBean) {
iQueryBean.setFirstRow(10).setMaxRows(20);
}
private void checkQueryBuilderProjection(QueryBuilderProjection<?, ?> queryBuilder) {
queryBuilder.fetch("a").fetch("b");
}
private void checkQueryBuilder(QueryBuilder<?,?> queryBuilder) {
queryBuilder.setFirstRow(10).setMaxRows(10);
}
}