[parser] Return error instead of panic (#316)

* [parser] return error instead of panic

* Fix clippy warning

* Fix cargo fmt warning
This commit is contained in:
BohuTANG 2021-06-22 13:05:43 +08:00 committed by GitHub
parent 35ef0eee38
commit 56e50dccd4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 7 deletions

View file

@ -32,7 +32,7 @@
//! //!
//! println!("AST: {:?}", ast); //! println!("AST: {:?}", ast);
//! ``` //! ```
#![warn(clippy::all)] #![allow(clippy::upper_case_acronyms)]
pub mod ast; pub mod ast;
#[macro_use] #[macro_use]

View file

@ -883,7 +883,7 @@ impl<'a> Parser<'a> {
} }
} }
// Can only happen if `get_next_precedence` got out of sync with this function // Can only happen if `get_next_precedence` got out of sync with this function
_ => panic!("No infix parser for token {:?}", tok), _ => parser_err!(format!("No infix parser for token {:?}", tok)),
} }
} else if Token::DoubleColon == tok { } else if Token::DoubleColon == tok {
self.parse_pg_cast(expr) self.parse_pg_cast(expr)
@ -897,7 +897,7 @@ impl<'a> Parser<'a> {
self.parse_map_access(expr) self.parse_map_access(expr)
} else { } else {
// Can only happen if `get_next_precedence` got out of sync with this function // Can only happen if `get_next_precedence` got out of sync with this function
panic!("No infix parser for token {:?}", tok) parser_err!(format!("No infix parser for token {:?}", tok))
} }
} }
@ -2202,8 +2202,8 @@ impl<'a> Parser<'a> {
Ok(Query { Ok(Query {
with, with,
body, body,
limit,
order_by, order_by,
limit,
offset, offset,
fetch, fetch,
}) })
@ -2414,8 +2414,8 @@ impl<'a> Parser<'a> {
top, top,
projection, projection,
from, from,
selection,
lateral_views, lateral_views,
selection,
group_by, group_by,
cluster_by, cluster_by,
distribute_by, distribute_by,

View file

@ -24,7 +24,7 @@ use test_utils::{all_dialects, expr_from_projection, join, number, only, table,
use matches::assert_matches; use matches::assert_matches;
use sqlparser::ast::*; use sqlparser::ast::*;
use sqlparser::dialect::{keywords::ALL_KEYWORDS, SQLiteDialect}; use sqlparser::dialect::{keywords::ALL_KEYWORDS, GenericDialect, SQLiteDialect};
use sqlparser::parser::{Parser, ParserError}; use sqlparser::parser::{Parser, ParserError};
#[test] #[test]
@ -109,7 +109,7 @@ fn parse_insert_sqlite() {
.unwrap() .unwrap()
{ {
Statement::Insert { or, .. } => assert_eq!(or, expected_action), Statement::Insert { or, .. } => assert_eq!(or, expected_action),
_ => panic!(sql.to_string()), _ => panic!("{}", sql.to_string()),
}; };
let sql = "INSERT INTO test_table(id) VALUES(1)"; let sql = "INSERT INTO test_table(id) VALUES(1)";
@ -358,6 +358,15 @@ fn test_eof_after_as() {
); );
} }
#[test]
fn test_no_infix_error() {
let res = Parser::parse_sql(&GenericDialect {}, "ASSERT-URA<<");
assert_eq!(
ParserError::ParserError("No infix parser for token ShiftLeft".to_string()),
res.unwrap_err()
);
}
#[test] #[test]
fn parse_select_count_wildcard() { fn parse_select_count_wildcard() {
let sql = "SELECT COUNT(*) FROM customer"; let sql = "SELECT COUNT(*) FROM customer";