EQL - parsing order by clause

This commit is contained in:
Robin Bygrave
2016-07-13 15:28:06 +12:00
parent 9dd82c0dd7
commit e58cec8bdd
11 changed files with 1124 additions and 610 deletions
@@ -330,6 +330,65 @@ public class EqlParserTest extends BaseTestCase {
}
}
@Test
public void orderBy() throws Exception {
ResetBasicData.reset();
Query<Customer> query = parse("order by id");
query.findList();
if (isH2()) {
assertThat(query.getGeneratedSql()).contains("from o_customer t0 order by t0.id");
}
}
@Test
public void orderBy_desc() throws Exception {
ResetBasicData.reset();
Query<Customer> query = parse("order by id desc");
query.findList();
if (isH2()) {
assertThat(query.getGeneratedSql()).contains("from o_customer t0 order by t0.id desc");
}
}
@Test
public void orderBy_nullsLast() throws Exception {
ResetBasicData.reset();
Query<Customer> query = parse("order by id desc nulls last");
query.findList();
if (isH2()) {
assertThat(query.getGeneratedSql()).contains(" from o_customer t0 order by t0.id desc nulls last");
}
}
@Test
public void orderBy_nullsFirst() throws Exception {
ResetBasicData.reset();
Query<Customer> query = parse("order by id nulls first");
query.findList();
if (isH2()) {
assertThat(query.getGeneratedSql()).contains(" from o_customer t0 order by t0.id nulls first");
}
}
@Test
public void orderBy_multiple() throws Exception {
ResetBasicData.reset();
Query<Customer> query = parse("order by billingAddress.city desc nulls last, name, id desc nulls last");
query.findList();
if (isH2()) {
assertThat(query.getGeneratedSql()).contains(" order by t1.city desc nulls last, t0.name, t0.id desc nulls last");
}
}
private Query<Customer> parse(String raw) {
@@ -54,6 +54,17 @@ public class TestOrderByParse extends BaseTestCase {
assertTrue(o1.toStringFormat().equals("id desc nulls high"));
}
@Test
public void add_parse() {
OrderBy<Object> o1 = new OrderBy<Object>();
o1.add("id desc nulls high");
assertTrue(o1.getProperties().size() == 1);
assertTrue(o1.getProperties().get(0).getProperty().equals("id"));
assertTrue(!o1.getProperties().get(0).isAscending());
assertTrue(o1.toStringFormat().equals("id desc nulls high"));
}
@Test
public void parseNullsHigh_with_second() {
+19 -1
View File
@@ -1,7 +1,7 @@
grammar EQL;
select_statement
: select_clause? fetch_clause* where_clause? limit_clause?
: select_clause? fetch_clause* where_clause? orderby_clause? limit_clause?
;
select_clause
@@ -20,6 +20,24 @@ where_clause
: 'where' conditional_expression
;
orderby_clause
: 'order' 'by' orderby_property (',' orderby_property)*
;
orderby_property
: PATH_VARIABLE asc_desc? nulls_firstlast?
;
nulls_firstlast
: 'nulls' 'first'
| 'nulls' 'last'
;
asc_desc
: 'asc'
| 'desc'
;
limit_clause
: 'limit' NUMBER_LITERAL offset_clause?
;