Skip to content

Commit 7c2d9cd

Browse files
authored
Make SELECT conformance tests pass (#134)
This PR includes the required changes to ensure the current SELECT conformance tests pass.
1 parent 5002d4f commit 7c2d9cd

File tree

3 files changed

+22
-76
lines changed

3 files changed

+22
-76
lines changed

partiql-parser/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
//! assert_eq!(errs[0].to_string(), "Unexpected end of input");
1414
//!
1515
//! let errs_at: Vec<ParserError> =
16-
//! parse_partiql("SELECT * FROM a AS a CROSS JOIN c AS c AT q").unwrap_err();
17-
//! assert_eq!(errs_at[0].to_string(), "Unexpected token `AT` at `(1:40..1:42)`");
16+
//! parse_partiql("SELECT * FROM a AY a CROSS JOIN c AS c AT q").unwrap_err();
17+
//! assert_eq!(errs_at[0].to_string(), "Unexpected token `<a:UNQUOTED_IDENT>` at `(1:20..1:21)`");
1818
//! ```
1919
//!
2020
//! [partiql]: https://partiql.org

partiql-parser/src/parse/mod.rs

Lines changed: 10 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,16 @@ mod tests {
451451
FROM UNPIVOT R.returnValueMap.success AS "list" AT symb"#
452452
);
453453
}
454+
455+
#[test]
456+
fn select_with_cross_join_and_at() {
457+
parse!(r#"SELECT * FROM a AS a CROSS JOIN c AS c AT q"#);
458+
}
459+
460+
#[test]
461+
fn select_with_at_and_cross_join_and_at() {
462+
parse!(r#"SELECT * FROM a AS a AT b CROSS JOIN c AS c AT q"#);
463+
}
454464
}
455465

456466
mod set_ops {
@@ -574,74 +584,6 @@ mod tests {
574584
};
575585
use std::borrow::Cow;
576586

577-
#[test]
578-
fn improper_at() {
579-
let res = parse_partiql(r#"SELECT * FROM a AS a CROSS JOIN c AS c AT q"#);
580-
assert!(res.is_err());
581-
let errors = res.unwrap_err();
582-
assert_eq!(1, errors.len());
583-
assert_eq!(
584-
"Unexpected token `AT` at `(1:40..1:42)`",
585-
errors[0].to_string()
586-
);
587-
}
588-
589-
#[test]
590-
fn improper_at_multi() {
591-
let res = parse_partiql(r#"SELECT * FROM a AS a AT b CROSS JOIN c AS c AT q"#);
592-
assert!(res.is_err());
593-
let errors = res.unwrap_err();
594-
assert_eq!(2, errors.len());
595-
assert_eq!(
596-
"Unexpected token `AT` at `(1:22..1:24)`",
597-
errors[0].to_string()
598-
);
599-
assert_eq!(
600-
"Unexpected token `AT` at `(1:45..1:47)`",
601-
errors[1].to_string()
602-
);
603-
assert_eq!(
604-
errors[0],
605-
ParseError::UnexpectedToken(UnexpectedToken {
606-
inner: UnexpectedTokenData {
607-
token: Cow::from("AT")
608-
},
609-
location: Location {
610-
start: LineAndCharPosition {
611-
line: LineOffset(0),
612-
char: CharOffset(21)
613-
}
614-
.into(),
615-
end: LineAndCharPosition {
616-
line: LineOffset(0),
617-
char: CharOffset(23)
618-
}
619-
.into(),
620-
},
621-
})
622-
);
623-
assert_eq!(
624-
errors[1],
625-
ParseError::UnexpectedToken(UnexpectedToken {
626-
inner: UnexpectedTokenData {
627-
token: Cow::from("AT")
628-
},
629-
location: Location {
630-
start: LineAndCharPosition {
631-
line: LineOffset(0),
632-
char: CharOffset(44)
633-
}
634-
.into(),
635-
end: LineAndCharPosition {
636-
line: LineOffset(0),
637-
char: CharOffset(46)
638-
}
639-
.into(),
640-
},
641-
})
642-
);
643-
}
644-
645587
#[test]
646588
fn eof() {
647589
let res = parse_partiql(r#"SELECT"#);

partiql-parser/src/parse/partiql.lalrpop

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -242,22 +242,22 @@ TableNonJoin: ast::FromClauseAst = {
242242

243243
#[inline]
244244
TableBaseReference: ast::FromLetAst = {
245-
<lo:@L> <e:ExprQuery> <hi:@R> => {
245+
<lo:@L> <e:ExprQuery> <as_alias:SymbolPrimitive> <hi:@R> => {
246246
ast::FromLet {
247247
expr: e,
248248
kind: ast::FromLetKind::Scan,
249-
as_alias: None,
249+
as_alias: Some(as_alias),
250250
at_alias: None,
251251
by_alias: None
252252
}.ast(lo..hi)
253253
},
254-
<lo:@L> <e:ExprQuery> "AS"? <as_alias:SymbolPrimitive> <hi:@R> => {
254+
<lo:@L> <e:ExprQuery> <as_alias:AsIdent?> <at_alias:AtIdent?> <by_alias:ByIdent?> <hi:@R> => {
255255
ast::FromLet {
256256
expr: e,
257257
kind: ast::FromLetKind::Scan,
258-
as_alias: Some(as_alias),
259-
at_alias: None,
260-
by_alias: None
258+
as_alias,
259+
at_alias,
260+
by_alias
261261
}.ast(lo..hi)
262262
}
263263
}
@@ -1164,6 +1164,10 @@ AtIdent: ast::SymbolPrimitive = {
11641164
"AT" <SymbolPrimitive>
11651165
}
11661166

1167+
ByIdent: ast::SymbolPrimitive = {
1168+
"BY" <SymbolPrimitive>
1169+
}
1170+
11671171
// ------------------------------------------------------------------------------ //
11681172
// //
11691173
// Lexer //

0 commit comments

Comments
 (0)