Commit 9e17e7fc718 for nodejs

commit 9e17e7fc718659a1a97a491f427e72c9b467e118
Author: Guilherme Araújo <arauujogui@gmail.com>
Date:   Tue Oct 20 22:49:34 2026 -0300

    sqlite: track statements in the Statement constructor

    Statement::Close() untracks itself, so the constructor should track
    itself too, like Session does, instead of relying on every caller.

    Signed-off-by: Guilherme Araújo <arauujogui@gmail.com>
    PR-URL: https://github.com/nodejs/node/pull/66912
    Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>

diff --git a/src/node_sqlite.cc b/src/node_sqlite.cc
index 36aab3f3a42..07979acd3df 100644
--- a/src/node_sqlite.cc
+++ b/src/node_sqlite.cc
@@ -1769,6 +1769,10 @@ void Database::FinalizeStatements() {
   statements_.clear();
 }

+void Database::TrackStatement(Statement* statement) {
+  statements_.insert(statement);
+}
+
 void Database::UntrackStatement(Statement* statement) {
   statements_.erase(statement);
 }
@@ -2182,7 +2186,6 @@ void Database::Prepare(const FunctionCallbackInfo<Value>& args) {
   if (!stmt) {
     return;
   }
-  db->statements_.insert(stmt.get());

   if (return_arrays.has_value()) {
     stmt->return_arrays_ = return_arrays.value();
@@ -3491,6 +3494,7 @@ Statement::Statement(Environment* env,
                      BaseObjectPtr<Database> db,
                      StatementPtr stmt)
     : BaseObject(env, object), db_(std::move(db)), statement_(std::move(stmt)) {
+  db_->TrackStatement(this);
   MakeWeak();
   use_big_ints_ = db_->use_big_ints();
   return_arrays_ = db_->return_arrays();
@@ -4660,7 +4664,6 @@ BaseObjectPtr<Statement> SQLTagStore::PrepareStatement(
       return BaseObjectPtr<Statement>();
     }

-    session->database_->statements_.insert(stmt_obj.get());
     session->sql_tags_.Put(sql, stmt_obj);
     stmt = stmt_obj;
   }
diff --git a/src/node_sqlite.h b/src/node_sqlite.h
index c4d7e55547d..2adb95f62dd 100644
--- a/src/node_sqlite.h
+++ b/src/node_sqlite.h
@@ -262,6 +262,7 @@ class Database : public BaseObject {
   void RemoveBackup(BackupJob* backup);
   void AddBackup(BackupJob* backup);
   void FinalizeBackups();
+  void TrackStatement(Statement* statement);
   void UntrackStatement(Statement* statement);
   bool IsOpen();
   // SQL functions are one of several paths by which SQLite can invoke JS.