[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);
//! ```
#![warn(clippy::all)]
#![allow(clippy::upper_case_acronyms)]
pub mod ast;
#[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
_ => panic!("No infix parser for token {:?}", tok),
_ => parser_err!(format!("No infix parser for token {:?}", tok)),
}
} else if Token::DoubleColon == tok {
self.parse_pg_cast(expr)
@ -897,7 +897,7 @@ impl<'a> Parser<'a> {
self.parse_map_access(expr)
} else {
// 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 {
with,
body,
limit,
order_by,
limit,
offset,
fetch,
})
@ -2414,8 +2414,8 @@ impl<'a> Parser<'a> {
top,
projection,
from,
selection,
lateral_views,
selection,
group_by,
cluster_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 sqlparser::ast::*;
use sqlparser::dialect::{keywords::ALL_KEYWORDS, SQLiteDialect};
use sqlparser::dialect::{keywords::ALL_KEYWORDS, GenericDialect, SQLiteDialect};
use sqlparser::parser::{Parser, ParserError};
#[test]
@ -109,7 +109,7 @@ fn parse_insert_sqlite() {
.unwrap()
{
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)";
@ -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]
fn parse_select_count_wildcard() {
let sql = "SELECT COUNT(*) FROM customer";