Don't parse ORDER BY as a table alias (8/8)

This commit is contained in:
Nickolay Ponomarev 2019-01-21 00:57:06 +03:00
parent 76ec175d20
commit 50b5724c39
2 changed files with 26 additions and 24 deletions

View file

@ -716,5 +716,5 @@ pub const RESERVED_FOR_TABLE_ALIAS: &'static [&'static str] = &[
WHERE, GROUP, ON, // keyword is 'reserved' in most dialects WHERE, GROUP, ON, // keyword is 'reserved' in most dialects
JOIN, INNER, CROSS, FULL, LEFT, RIGHT, // not reserved in Oracle JOIN, INNER, CROSS, FULL, LEFT, RIGHT, // not reserved in Oracle
NATURAL, USING, // not reserved in Oracle & MSSQL NATURAL, USING, // not reserved in Oracle & MSSQL
// UNION, EXCEPT, INTERSECT, ORDER // TODO add these with tests. ORDER, // UNION, EXCEPT, INTERSECT, // TODO add these with tests.
]; ];

View file

@ -229,31 +229,33 @@ fn parse_not_like() {
#[test] #[test]
fn parse_select_order_by() { fn parse_select_order_by() {
let sql = String::from( fn chk(sql: &str) {
"SELECT id, fname, lname FROM customer WHERE id < 5 ORDER BY lname ASC, fname DESC, id", match verified(&sql) {
); ASTNode::SQLSelect { order_by, .. } => {
match verified(&sql) { assert_eq!(
ASTNode::SQLSelect { order_by, .. } => { Some(vec![
assert_eq!( SQLOrderByExpr {
Some(vec![ expr: Box::new(ASTNode::SQLIdentifier("lname".to_string())),
SQLOrderByExpr { asc: Some(true),
expr: Box::new(ASTNode::SQLIdentifier("lname".to_string())), },
asc: Some(true), SQLOrderByExpr {
}, expr: Box::new(ASTNode::SQLIdentifier("fname".to_string())),
SQLOrderByExpr { asc: Some(false),
expr: Box::new(ASTNode::SQLIdentifier("fname".to_string())), },
asc: Some(false), SQLOrderByExpr {
}, expr: Box::new(ASTNode::SQLIdentifier("id".to_string())),
SQLOrderByExpr { asc: None,
expr: Box::new(ASTNode::SQLIdentifier("id".to_string())), },
asc: None, ]),
}, order_by
]), );
order_by }
); _ => assert!(false),
} }
_ => assert!(false),
} }
chk("SELECT id, fname, lname FROM customer WHERE id < 5 ORDER BY lname ASC, fname DESC, id");
// make sure ORDER is not treated as an alias
chk("SELECT id, fname, lname FROM customer ORDER BY lname ASC, fname DESC, id");
} }
#[test] #[test]