Don't parse ORDER BY as a table alias (8/8)
diff --git a/src/dialect/keywords.rs b/src/dialect/keywords.rs
index 7c7eb49..1a39fe4 100644
--- a/src/dialect/keywords.rs
+++ b/src/dialect/keywords.rs
@@ -716,5 +716,5 @@
WHERE, GROUP, ON, // keyword is 'reserved' in most dialects
JOIN, INNER, CROSS, FULL, LEFT, RIGHT, // not reserved in Oracle
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.
];
diff --git a/tests/sqlparser_generic.rs b/tests/sqlparser_generic.rs
index ec4e26f..c57e1d5 100644
--- a/tests/sqlparser_generic.rs
+++ b/tests/sqlparser_generic.rs
@@ -229,31 +229,33 @@
#[test]
fn parse_select_order_by() {
- let sql = String::from(
- "SELECT id, fname, lname FROM customer WHERE id < 5 ORDER BY lname ASC, fname DESC, id",
- );
- match verified(&sql) {
- ASTNode::SQLSelect { order_by, .. } => {
- assert_eq!(
- Some(vec![
- SQLOrderByExpr {
- expr: Box::new(ASTNode::SQLIdentifier("lname".to_string())),
- asc: Some(true),
- },
- SQLOrderByExpr {
- expr: Box::new(ASTNode::SQLIdentifier("fname".to_string())),
- asc: Some(false),
- },
- SQLOrderByExpr {
- expr: Box::new(ASTNode::SQLIdentifier("id".to_string())),
- asc: None,
- },
- ]),
- order_by
- );
+ fn chk(sql: &str) {
+ match verified(&sql) {
+ ASTNode::SQLSelect { order_by, .. } => {
+ assert_eq!(
+ Some(vec![
+ SQLOrderByExpr {
+ expr: Box::new(ASTNode::SQLIdentifier("lname".to_string())),
+ asc: Some(true),
+ },
+ SQLOrderByExpr {
+ expr: Box::new(ASTNode::SQLIdentifier("fname".to_string())),
+ asc: Some(false),
+ },
+ SQLOrderByExpr {
+ expr: Box::new(ASTNode::SQLIdentifier("id".to_string())),
+ asc: None,
+ },
+ ]),
+ 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]