From 55fc8c5a5785dee0d22356f184a7e95854ed9cc4 Mon Sep 17 00:00:00 2001 From: Jamie Brandon Date: Wed, 22 May 2019 14:09:18 +0100 Subject: [PATCH] Support SELECT ALL Co-authored-by: Nikhil Benesch --- src/sqlparser.rs | 4 ++++ tests/sqlparser_common.rs | 14 ++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/sqlparser.rs b/src/sqlparser.rs index edfa0c573..6ff0df593 100644 --- a/src/sqlparser.rs +++ b/src/sqlparser.rs @@ -1300,7 +1300,11 @@ impl Parser { /// Parse a restricted `SELECT` statement (no CTEs / `UNION` / `ORDER BY`), /// assuming the initial `SELECT` was already consumed pub fn parse_select(&mut self) -> Result { + let all = self.parse_keyword("ALL"); let distinct = self.parse_keyword("DISTINCT"); + if all && distinct { + return parser_err!("Cannot specify both ALL and DISTINCT in SELECT"); + } let projection = self.parse_select_list()?; let (relation, joins) = if self.parse_keyword("FROM") { diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs index e141c840c..dd8992198 100644 --- a/tests/sqlparser_common.rs +++ b/tests/sqlparser_common.rs @@ -135,6 +135,20 @@ fn parse_select_distinct() { ); } +#[test] +fn parse_select_all() { + one_statement_parses_to("SELECT ALL name FROM customer", "SELECT name FROM customer"); +} + +#[test] +fn parse_select_all_distinct() { + let result = parse_sql_statements("SELECT ALL DISTINCT name FROM customer"); + assert_eq!( + ParserError::ParserError("Cannot specify both ALL and DISTINCT in SELECT".to_string()), + result.unwrap_err(), + ); +} + #[test] fn parse_select_wildcard() { let sql = "SELECT * FROM foo";