From 04fd5a40d64e6ed213a0a33e55b8fbbcf96d284b Mon Sep 17 00:00:00 2001 From: Krishna Vishal Date: Mon, 20 Jan 2025 16:10:35 +0530 Subject: [PATCH] Finalize the parser in the case of Error while running queries. This resets the parser stack and prevents triggering the assertion and thereby panic. Closes https://github.com/tursodatabase/limbo/issues/742 --- core/lib.rs | 5 ++++- vendored/sqlite3-parser/src/lexer/sql/mod.rs | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/core/lib.rs b/core/lib.rs index c72ee9a3d..f093762fb 100644 --- a/core/lib.rs +++ b/core/lib.rs @@ -596,7 +596,10 @@ impl Iterator for QueryRunner<'_> { match self.parser.next() { Ok(Some(cmd)) => Some(self.conn.run_cmd(cmd)), Ok(None) => None, - Err(err) => Some(Err(LimboError::from(err))), + Err(err) => { + self.parser.finalize(); + Some(Result::Err(LimboError::from(err))) + } } } } diff --git a/vendored/sqlite3-parser/src/lexer/sql/mod.rs b/vendored/sqlite3-parser/src/lexer/sql/mod.rs index fa98282cc..185aa2183 100644 --- a/vendored/sqlite3-parser/src/lexer/sql/mod.rs +++ b/vendored/sqlite3-parser/src/lexer/sql/mod.rs @@ -28,6 +28,7 @@ pub use error::Error; pub struct Parser<'input> { input: &'input [u8], scanner: Scanner, + /// lemon parser parser: yyParser<'input>, } @@ -62,6 +63,11 @@ impl<'input> Parser<'input> { pub fn offset(&self) -> usize { self.scanner.offset() } + + /// Public API for sqlite3ParserFinalize() + pub fn finalize(&mut self) { + self.parser.sqlite3ParserFinalize(); + } } /*