From 144f815820fe5c5bb0a00d55a366f29f8fb810fd Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Thu, 20 Jun 2024 16:24:34 -0700 Subject: [PATCH] Fixes #12012 --- src/bun.js/bindings/sqlite/JSSQLStatement.cpp | 4 ++-- test/js/bun/sqlite/sqlite.test.js | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/bun.js/bindings/sqlite/JSSQLStatement.cpp b/src/bun.js/bindings/sqlite/JSSQLStatement.cpp index efd55a7f75..d330c3d7ef 100644 --- a/src/bun.js/bindings/sqlite/JSSQLStatement.cpp +++ b/src/bun.js/bindings/sqlite/JSSQLStatement.cpp @@ -2219,6 +2219,8 @@ JSC_DEFINE_HOST_FUNCTION(jsSQLStatementExecuteStatementFunctionRun, (JSC::JSGlob DO_REBIND(arg0); } + int total_changes_before = sqlite3_total_changes(castedThis->version_db->db); + int status = sqlite3_step(stmt); if (!sqlite3_stmt_readonly(stmt)) { castedThis->version_db->version++; @@ -2228,8 +2230,6 @@ JSC_DEFINE_HOST_FUNCTION(jsSQLStatementExecuteStatementFunctionRun, (JSC::JSGlob initializeColumnNames(lexicalGlobalObject, castedThis); } - int total_changes_before = sqlite3_total_changes(castedThis->version_db->db); - while (status == SQLITE_ROW) { status = sqlite3_step(stmt); } diff --git a/test/js/bun/sqlite/sqlite.test.js b/test/js/bun/sqlite/sqlite.test.js index 1516c38326..baab2b8671 100644 --- a/test/js/bun/sqlite/sqlite.test.js +++ b/test/js/bun/sqlite/sqlite.test.js @@ -1251,3 +1251,15 @@ it("query should work if the cached statement was finalized", () => { expect(() => prevQuery.get()).toThrow(); } }); + +// https://github.com/oven-sh/bun/issues/12012 +it("reports changes in Statement#run", () => { + const db = new Database(":memory:"); + db.exec("CREATE TABLE cats (id INTEGER PRIMARY KEY, name TEXT)"); + + const sql = "INSERT INTO cats (name) VALUES ('Fluffy'), ('Furry')"; + + expect(db.run(sql).changes).toBe(2); + expect(db.prepare(sql).run().changes).toBe(2); + expect(db.query(sql).run().changes).toBe(2); +});