execute run on multiple parsed statements

This commit is contained in:
Pere Diaz Bou
2025-06-27 14:02:34 +02:00
parent 09ba89e2ba
commit 22cb95bc5d
2 changed files with 23 additions and 7 deletions

View File

@@ -496,13 +496,12 @@ impl Connection {
pub fn execute(self: &Arc<Connection>, sql: impl AsRef<str>) -> Result<()> {
let sql = sql.as_ref();
let mut parser = Parser::new(sql.as_bytes());
let cmd = parser.next()?;
let syms = self.syms.borrow();
let byte_offset_end = parser.offset();
let input = str::from_utf8(&sql.as_bytes()[..byte_offset_end])
.unwrap()
.trim();
if let Some(cmd) = cmd {
while let Some(cmd) = parser.next()? {
let syms = self.syms.borrow();
let byte_offset_end = parser.offset();
let input = str::from_utf8(&sql.as_bytes()[..byte_offset_end])
.unwrap()
.trim();
match cmd {
Cmd::Explain(stmt) => {
let program = translate::translate(

View File

@@ -500,6 +500,23 @@ fn test_update_regression() -> anyhow::Result<()> {
Ok(())
}
#[test]
fn test_multiple_statements() -> anyhow::Result<()> {
let _ = env_logger::try_init();
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t(x)", false);
let conn = tmp_db.connect_limbo();
conn.execute("INSERT INTO t values(1); insert into t values(2);")?;
run_query_on_row(&tmp_db, &conn, "SELECT count(1) from t;", |row| {
let count = row.get::<i64>(0).unwrap();
assert_eq!(count, 2);
})
.unwrap();
Ok(())
}
fn check_integrity_is_ok(tmp_db: TempDatabase, conn: Arc<Connection>) -> Result<(), anyhow::Error> {
run_query_on_row(&tmp_db, &conn, "pragma integrity_check", |row: &Row| {
let res = row.get::<String>(0).unwrap();