Skip to content

Commit 620bf78

Browse files
authored
fix: make order by ordering keyword optional (#17)
1 parent 23439b6 commit 620bf78

4 files changed

Lines changed: 67 additions & 6 deletions

File tree

src/parser.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -144,19 +144,17 @@ impl<'a> Parser<'a> {
144144
expect_keyword(self.shift(), "by")?;
145145

146146
let expr = self.parse_expr()?;
147-
let token = self.shift();
147+
let token = self.peek();
148148

149149
if let Sym::Id(name) = token.sym {
150150
let order = if name.eq_ignore_ascii_case("asc") {
151+
self.shift();
151152
Order::Asc
152153
} else if name.eq_ignore_ascii_case("desc") {
154+
self.shift();
153155
Order::Desc
154156
} else {
155-
return Err(ParserError::UnexpectedToken(
156-
token.line,
157-
token.col,
158-
name.to_owned(),
159-
));
157+
Order::Asc
160158
};
161159

162160
return Ok(OrderBy { expr, order });

src/tests/parser.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,9 @@ fn test_parser_with_comment() {
9090
let tokens = tokenize(include_str!("./resources/with_comment.eql")).unwrap();
9191
insta::assert_yaml_snapshot!(parse(tokens.as_slice()));
9292
}
93+
94+
#[test]
95+
fn test_parser_order_by_no_ordering() {
96+
let tokens = tokenize(include_str!("./resources/query_order_by_no_ordering.eql")).unwrap();
97+
insta::assert_yaml_snapshot!(parse(tokens.as_slice()));
98+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
FROM e IN events
2+
ORDER BY e.data.price
3+
PROJECT INTO e
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
---
2+
source: src/tests/parser.rs
3+
expression: parse(tokens.as_slice())
4+
---
5+
Ok:
6+
attrs:
7+
pos:
8+
line: 1
9+
col: 1
10+
sources:
11+
- binding:
12+
name: e
13+
pos:
14+
line: 1
15+
col: 6
16+
kind:
17+
Name: events
18+
predicate: ~
19+
group_by: ~
20+
order_by:
21+
expr:
22+
attrs:
23+
pos:
24+
line: 2
25+
col: 10
26+
value:
27+
Access:
28+
target:
29+
attrs:
30+
pos:
31+
line: 2
32+
col: 10
33+
value:
34+
Access:
35+
target:
36+
attrs:
37+
pos:
38+
line: 2
39+
col: 10
40+
value:
41+
Id: e
42+
field: data
43+
field: price
44+
order: Asc
45+
limit: ~
46+
projection:
47+
attrs:
48+
pos:
49+
line: 3
50+
col: 14
51+
value:
52+
Id: e
53+
distinct: false
54+
meta: ~

0 commit comments

Comments
 (0)