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.