Skip to content

Commit 24f6ea0

Browse files
committed
sqlite: refactor object sets
1 parent 89ab713 commit 24f6ea0

File tree

3 files changed

+27
-24
lines changed

3 files changed

+27
-24
lines changed

src/env_properties.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@
132132
V(crypto_rsa_pss_string, "rsa-pss") \
133133
V(cwd_string, "cwd") \
134134
V(data_string, "data") \
135+
V(database_string, "database") \
135136
V(default_is_true_string, "defaultIsTrue") \
136137
V(defensive_string, "defensive") \
137138
V(deserialize_info_string, "deserializeInfo") \
@@ -338,6 +339,7 @@
338339
V(source_map_url_string, "sourceMapURL") \
339340
V(source_url_string, "sourceURL") \
340341
V(specifier_string, "specifier") \
342+
V(sql_string, "sql") \
341343
V(stack_string, "stack") \
342344
V(start_string, "start") \
343345
V(state_string, "state") \

src/node_sqlite.cc

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1005,9 +1005,8 @@ bool DatabaseSync::Open() {
10051005
env()->isolate(), this, load_extension_ret, SQLITE_OK, false);
10061006
}
10071007

1008-
diagnostics_channel::Channel* ch =
1009-
diagnostics_channel::Channel::Get(env(), "sqlite.db.query");
1010-
if (ch != nullptr && ch->HasSubscribers()) {
1008+
trace_channel_ = diagnostics_channel::Channel::Get(env(), "sqlite.db.query");
1009+
if (trace_channel_ != nullptr && trace_channel_->HasSubscribers()) {
10111010
sqlite3_trace_v2(connection_, SQLITE_TRACE_PROFILE, TraceCallback, this);
10121011
}
10131012

@@ -1016,6 +1015,10 @@ bool DatabaseSync::Open() {
10161015

10171016
void DatabaseSync::EnableTracing() {
10181017
if (!IsOpen()) return;
1018+
if (trace_channel_ == nullptr) {
1019+
trace_channel_ =
1020+
diagnostics_channel::Channel::Get(env(), "sqlite.db.query");
1021+
}
10191022
sqlite3_trace_v2(connection_, SQLITE_TRACE_PROFILE, TraceCallback, this);
10201023
}
10211024

@@ -2449,15 +2452,13 @@ int DatabaseSync::TraceCallback(unsigned int type,
24492452
DatabaseSync* db = static_cast<DatabaseSync*>(user_data);
24502453
Environment* env = db->env();
24512454

2452-
diagnostics_channel::Channel* ch =
2453-
diagnostics_channel::Channel::Get(env, "sqlite.db.query");
2455+
diagnostics_channel::Channel* ch = db->trace_channel_;
24542456
if (ch == nullptr || !ch->HasSubscribers()) {
24552457
return 0;
24562458
}
24572459

24582460
Isolate* isolate = env->isolate();
24592461
HandleScope handle_scope(isolate);
2460-
Local<Context> context = env->context();
24612462

24622463
char* expanded = sqlite3_expanded_sql(static_cast<sqlite3_stmt*>(p));
24632464
Local<Value> sql_string;
@@ -2480,24 +2481,19 @@ int DatabaseSync::TraceCallback(unsigned int type,
24802481
// sufficient since 2^53 ns (~104 days) exceeds any realistic query duration.
24812482
sqlite3_int64 duration_ns = *static_cast<sqlite3_int64*>(x);
24822483

2483-
Local<Object> payload = Object::New(isolate);
2484-
if (payload
2485-
->Set(context,
2486-
FIXED_ONE_BYTE_STRING(isolate, "sql"),
2487-
sql_string)
2488-
.IsNothing() ||
2489-
payload
2490-
->Set(context,
2491-
FIXED_ONE_BYTE_STRING(isolate, "database"),
2492-
db->object())
2493-
.IsNothing() ||
2494-
payload
2495-
->Set(context,
2496-
FIXED_ONE_BYTE_STRING(isolate, "duration"),
2497-
Number::New(isolate, static_cast<double>(duration_ns)))
2498-
.IsNothing()) {
2499-
return 0;
2500-
}
2484+
Local<Name> keys[3] = {
2485+
env->sql_string().As<Name>(),
2486+
env->database_string().As<Name>(),
2487+
env->duration_string().As<Name>(),
2488+
};
2489+
2490+
Local<Value> values[3] = {
2491+
sql_string,
2492+
db->object(),
2493+
Number::New(isolate, static_cast<double>(duration_ns)),
2494+
};
2495+
2496+
Local<Object> payload = Object::New(isolate, Null(isolate), keys, values, 3);
25012497

25022498
ch->Publish(env, payload);
25032499

src/node_sqlite.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@
1818

1919
namespace node {
2020

21+
namespace diagnostics_channel {
22+
class Channel;
23+
} // namespace diagnostics_channel
24+
2125
class ExternalReferenceRegistry;
2226

2327
namespace sqlite {
@@ -272,6 +276,7 @@ class DatabaseSync : public BaseObject {
272276
std::set<BackupJob*> backups_;
273277
std::set<sqlite3_session*> sessions_;
274278
std::unordered_set<StatementSync*> statements_;
279+
diagnostics_channel::Channel* trace_channel_ = nullptr;
275280

276281
friend class DatabaseSyncLimits;
277282
friend class Session;

0 commit comments

Comments
 (0)