package org.tests.query.orderby;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.Query;
import org.tests.model.basic.Customer;
import org.junit.Assert;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class TestOrderByWithDistinctTake2 extends BaseTestCase {
@Test
public void testRegex() {
String test = "helloasc asc ASC desc DESC boodesc desc ASC";
test = test.replaceAll("(?i)\\b asc\\b|\\b desc\\b", "");
Assert.assertEquals("helloasc boodesc", test);
}
@Test
public void test() {
Query<Customer> query = Ebean.find(Customer.class)
.select("id, name")
.where().ilike("contacts.firstName", "R%")
.order("name desc");
query.findList();
String generatedSql = sqlOf(query);
// select distinct t0.id c0, t0.name
// from o_customer t0 join contact u1 on u1.customer_id = t0.id
// where lower(u1.first_name) like ?
// order by t0.name; --bind(r%)
if (isPostgres()) {
assertThat(generatedSql).contains("select distinct on (t0.name, t0.id) t0.id, t0.name");
} else {
assertThat(generatedSql).contains("select distinct t0.id, t0.name");
}
assertThat(generatedSql).contains("order by t0.name desc");
assertThat(generatedSql).contains("from o_customer t0 join contact u1 on u1.customer_id = t0.id");
assertThat(generatedSql).contains("where lower(u1.first_name) like ?");
}
@Test
public void testWithAscAndDesc() {
Query<Customer> query = Ebean.find(Customer.class)
.select("id")
.where().ilike("contacts.firstName", "R%")
.order("name asc,id desc");
query.findList();
String generatedSql = sqlOf(query);
if (isPostgres()) {
assertThat(generatedSql).contains("select distinct on (t0.name, t0.id) t0.id, t0.name, t0.id");
} else {
assertThat(generatedSql).contains("select distinct t0.id, t0.name, t0.id");
}
assertThat(generatedSql).contains("order by t0.name, t0.id desc");
assertThat(generatedSql).contains("from o_customer t0 join contact u1 on u1.customer_id = t0.id");
assertThat(generatedSql).contains("where lower(u1.first_name) like ?");
}
}