diff --git a/src/dialect/sqlite.rs b/src/dialect/sqlite.rs index 7d1c935f1..cb0785799 100644 --- a/src/dialect/sqlite.rs +++ b/src/dialect/sqlite.rs @@ -88,7 +88,10 @@ impl Dialect for SQLiteDialect { ] { if parser.parse_keyword(keyword) { let left = Box::new(expr.clone()); - let right = Box::new(parser.parse_expr().unwrap()); + let right = Box::new(match parser.parse_expr() { + Ok(expr) => expr, + Err(e) => return Some(Err(e)), + }); return Some(Ok(Expr::BinaryOp { left, op, right })); } } diff --git a/tests/sqlparser_sqlite.rs b/tests/sqlparser_sqlite.rs index da311ac06..ffe94ab8a 100644 --- a/tests/sqlparser_sqlite.rs +++ b/tests/sqlparser_sqlite.rs @@ -602,6 +602,10 @@ fn test_regexp_operator() { } ); sqlite().verified_only_select(r#"SELECT count(*) FROM messages WHERE msg_text REGEXP '\d+'"#); + + // Should return an error, not panic + assert!(sqlite().parse_sql_statements("SELECT 1 REGEXP").is_err()); + assert!(sqlite().parse_sql_statements("SELECT 1 MATCH").is_err()); } #[test]