package org.tests.query.other;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.Query;
import io.ebean.bean.EntityBean;
import io.ebean.bean.EntityBeanIntercept;
import org.tests.model.basic.Customer;
import org.tests.model.basic.ResetBasicData;
import org.junit.Test;
import java.util.List;
import static junit.framework.TestCase.assertNull;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
public class TestQueryDistinct extends BaseTestCase {
@Test
public void test() {
ResetBasicData.reset();
Query<Customer> query = Ebean.find(Customer.class)
.setDistinct(true)
.select("name");
List<Customer> customers = query.findList();
String generatedSql = sqlOf(query);
assertThat(generatedSql).contains("select distinct t0.name from o_customer t0");
for (Customer customer : customers) {
EntityBeanIntercept ebi = ((EntityBean) customer)._ebean_getIntercept();
assertTrue(ebi.isDisableLazyLoad());
assertNull(ebi.getPersistenceContext());
// lazy loading disabled
assertNull(customer.getId());
assertNull(customer.getAnniversary());
}
}
@Test
public void test_onWhere() {
ResetBasicData.reset();
Query<Customer> query = Ebean.find(Customer.class)
.where().setDistinct(true)
.select("name");
query.findList();
String generatedSql = sqlOf(query);
assertThat(generatedSql).contains("select distinct t0.name from o_customer t0");
}
@Test
public void testDistinctStatus() {
ResetBasicData.reset();
Query<Customer> query = Ebean.find(Customer.class)
.setDistinct(true)
.select("status")
.where().isNotNull("status").query();
List<Customer> customers = query.findList();
String generatedSql = sqlOf(query);
assertThat(generatedSql).contains("select distinct t0.status from o_customer t0");
for (Customer customer : customers) {
assertNotNull(customer.getStatus());
// lazy loading disabled
assertNull(customer.getId());
assertNull(customer.getAnniversary());
}
}
@Test
public void testPagingQuery_expect_doesNotAddOrderBy() {
ResetBasicData.reset();
Query<Customer> query = Ebean.find(Customer.class)
.setMaxRows(10)
.setDistinct(true)
.select("name");
query.findList();
if (isH2() || isPostgres()) {
String generatedSql = sqlOf(query);
assertThat(generatedSql).contains("select distinct t0.name from o_customer t0 limit 10");
}
}
}