Skip to content

Commit 5bc98ec

Browse files
araujoguiaduh95
authored andcommitted
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: #66912 Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
1 parent 12a857a commit 5bc98ec

2 files changed

Lines changed: 6 additions & 2 deletions

File tree

‎src/node_sqlite.cc‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1769,6 +1769,10 @@ void Database::FinalizeStatements() {
17691769
statements_.clear();
17701770
}
17711771

1772+
void Database::TrackStatement(Statement* statement) {
1773+
statements_.insert(statement);
1774+
}
1775+
17721776
void Database::UntrackStatement(Statement* statement) {
17731777
statements_.erase(statement);
17741778
}
@@ -2182,7 +2186,6 @@ void Database::Prepare(const FunctionCallbackInfo<Value>& args) {
21822186
if (!stmt) {
21832187
return;
21842188
}
2185-
db->statements_.insert(stmt.get());
21862189

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

4663-
session->database_->statements_.insert(stmt_obj.get());
46644667
session->sql_tags_.Put(sql, stmt_obj);
46654668
stmt = stmt_obj;
46664669
}

‎src/node_sqlite.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@ class Database : public BaseObject {
262262
void RemoveBackup(BackupJob* backup);
263263
void AddBackup(BackupJob* backup);
264264
void FinalizeBackups();
265+
void TrackStatement(Statement* statement);
265266
void UntrackStatement(Statement* statement);
266267
bool IsOpen();
267268
// SQL functions are one of several paths by which SQLite can invoke JS.

0 commit comments

Comments
 (0)