From d263d285e2a4b99946d67f9a8829d49d38d8b5eb Mon Sep 17 00:00:00 2001 From: Jovansonlee Cesar Date: Sat, 18 May 2019 10:53:19 +0800 Subject: [PATCH 1/2] Add LIMIT as RESERVED_FOR_TABLE_ALIAS, this closes Issue#67 --- src/dialect/keywords.rs | 2 +- src/sqlparser.rs | 1 - tests/sqlparser_common.rs | 10 ++++++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/dialect/keywords.rs b/src/dialect/keywords.rs index 1d4d9993..033f5856 100644 --- a/src/dialect/keywords.rs +++ b/src/dialect/keywords.rs @@ -393,7 +393,7 @@ pub const RESERVED_FOR_TABLE_ALIAS: &[&str] = &[ // Reserved as both a table and a column alias: WITH, SELECT, WHERE, GROUP, ORDER, UNION, EXCEPT, INTERSECT, // Reserved only as a table alias in the `FROM`/`JOIN` clauses: - ON, JOIN, INNER, CROSS, FULL, LEFT, RIGHT, NATURAL, USING, + ON, JOIN, INNER, CROSS, FULL, LEFT, RIGHT, NATURAL, USING, LIMIT, ]; /// Can't be used as a column alias, so that `SELECT alias` diff --git a/src/sqlparser.rs b/src/sqlparser.rs index 7d65750b..10c49129 100644 --- a/src/sqlparser.rs +++ b/src/sqlparser.rs @@ -1202,7 +1202,6 @@ impl Parser { } else { None }; - let limit = if self.parse_keyword("LIMIT") { self.parse_limit()? } else { diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs index 29d07630..caeb60bc 100644 --- a/tests/sqlparser_common.rs +++ b/tests/sqlparser_common.rs @@ -124,6 +124,16 @@ fn parse_simple_select() { assert_eq!(Some(ASTNode::SQLValue(Value::Long(5))), select.limit); } +#[test] +fn parse_select_with_limit_but_no_where() { + let sql = "SELECT id, fname, lname FROM customer LIMIT 5"; + let select = verified_only_select(sql); + assert_eq!(false, select.distinct); + assert_eq!(3, select.projection.len()); + let select = verified_query(sql); + assert_eq!(Some(ASTNode::SQLValue(Value::Long(5))), select.limit); +} + #[test] fn parse_select_distinct() { let sql = "SELECT DISTINCT name FROM customer"; From 24f3d06231cae8eaf92d762e9a566a6e3b659b68 Mon Sep 17 00:00:00 2001 From: Jovansonlee Cesar Date: Sat, 18 May 2019 10:59:52 +0800 Subject: [PATCH 2/2] Restore the original spacing in sqlparser.rs --- src/sqlparser.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/sqlparser.rs b/src/sqlparser.rs index 10c49129..7d65750b 100644 --- a/src/sqlparser.rs +++ b/src/sqlparser.rs @@ -1202,6 +1202,7 @@ impl Parser { } else { None }; + let limit = if self.parse_keyword("LIMIT") { self.parse_limit()? } else {