mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-09-01 03:37:21 +00:00
[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:
parent
35ef0eee38
commit
56e50dccd4
3 changed files with 16 additions and 7 deletions
|
@ -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]
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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";
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue