diff --git a/src/parser.rs b/src/parser.rs index a59c283..bb5c2c7 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -144,19 +144,17 @@ impl<'a> Parser<'a> { expect_keyword(self.shift(), "by")?; let expr = self.parse_expr()?; - let token = self.shift(); + let token = self.peek(); if let Sym::Id(name) = token.sym { let order = if name.eq_ignore_ascii_case("asc") { + self.shift(); Order::Asc } else if name.eq_ignore_ascii_case("desc") { + self.shift(); Order::Desc } else { - return Err(ParserError::UnexpectedToken( - token.line, - token.col, - name.to_owned(), - )); + Order::Asc }; return Ok(OrderBy { expr, order }); diff --git a/src/tests/parser.rs b/src/tests/parser.rs index 711eeed..7f6afad 100644 --- a/src/tests/parser.rs +++ b/src/tests/parser.rs @@ -90,3 +90,9 @@ fn test_parser_with_comment() { let tokens = tokenize(include_str!("./resources/with_comment.eql")).unwrap(); insta::assert_yaml_snapshot!(parse(tokens.as_slice())); } + +#[test] +fn test_parser_order_by_no_ordering() { + let tokens = tokenize(include_str!("./resources/query_order_by_no_ordering.eql")).unwrap(); + insta::assert_yaml_snapshot!(parse(tokens.as_slice())); +} diff --git a/src/tests/resources/query_order_by_no_ordering.eql b/src/tests/resources/query_order_by_no_ordering.eql new file mode 100644 index 0000000..df34d10 --- /dev/null +++ b/src/tests/resources/query_order_by_no_ordering.eql @@ -0,0 +1,3 @@ +FROM e IN events +ORDER BY e.data.price +PROJECT INTO e diff --git a/src/tests/snapshots/eventql_parser__tests__parser__parser_order_by_no_ordering.snap b/src/tests/snapshots/eventql_parser__tests__parser__parser_order_by_no_ordering.snap new file mode 100644 index 0000000..ba578e3 --- /dev/null +++ b/src/tests/snapshots/eventql_parser__tests__parser__parser_order_by_no_ordering.snap @@ -0,0 +1,54 @@ +--- +source: src/tests/parser.rs +expression: parse(tokens.as_slice()) +--- +Ok: + attrs: + pos: + line: 1 + col: 1 + sources: + - binding: + name: e + pos: + line: 1 + col: 6 + kind: + Name: events + predicate: ~ + group_by: ~ + order_by: + expr: + attrs: + pos: + line: 2 + col: 10 + value: + Access: + target: + attrs: + pos: + line: 2 + col: 10 + value: + Access: + target: + attrs: + pos: + line: 2 + col: 10 + value: + Id: e + field: data + field: price + order: Asc + limit: ~ + projection: + attrs: + pos: + line: 3 + col: 14 + value: + Id: e + distinct: false + meta: ~