Skip to content

Commit 0867538

Browse files
committed
sqlite: refactor object sets
1 parent 0394861 commit 0867538

3 files changed

Lines changed: 27 additions & 24 deletions

File tree

src/env_properties.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@
134134
V(crypto_rsa_pss_string, "rsa-pss") \
135135
V(cwd_string, "cwd") \
136136
V(data_string, "data") \
137+
V(database_string, "database") \
137138
V(default_is_true_string, "defaultIsTrue") \
138139
V(defensive_string, "defensive") \
139140
V(deserialize_info_string, "deserializeInfo") \
@@ -344,6 +345,7 @@
344345
V(source_map_url_string, "sourceMapURL") \
345346
V(source_url_string, "sourceURL") \
346347
V(specifier_string, "specifier") \
348+
V(sql_string, "sql") \
347349
V(stack_string, "stack") \
348350
V(start_string, "start") \
349351
V(state_string, "state") \

src/node_sqlite.cc

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

1027-
diagnostics_channel::Channel* ch =
1028-
diagnostics_channel::Channel::Get(env(), "sqlite.db.query");
1029-
if (ch != nullptr && ch->HasSubscribers()) {
1027+
trace_channel_ = diagnostics_channel::Channel::Get(env(), "sqlite.db.query");
1028+
if (trace_channel_ != nullptr && trace_channel_->HasSubscribers()) {
10301029
sqlite3_trace_v2(connection_, SQLITE_TRACE_PROFILE, TraceCallback, this);
10311030
}
10321031

@@ -1035,6 +1034,10 @@ bool DatabaseSync::Open() {
10351034

10361035
void DatabaseSync::EnableTracing() {
10371036
if (!IsOpen()) return;
1037+
if (trace_channel_ == nullptr) {
1038+
trace_channel_ =
1039+
diagnostics_channel::Channel::Get(env(), "sqlite.db.query");
1040+
}
10381041
sqlite3_trace_v2(connection_, SQLITE_TRACE_PROFILE, TraceCallback, this);
10391042
}
10401043

@@ -2598,15 +2601,13 @@ int DatabaseSync::TraceCallback(unsigned int type,
25982601
DatabaseSync* db = static_cast<DatabaseSync*>(user_data);
25992602
Environment* env = db->env();
26002603

2601-
diagnostics_channel::Channel* ch =
2602-
diagnostics_channel::Channel::Get(env, "sqlite.db.query");
2604+
diagnostics_channel::Channel* ch = db->trace_channel_;
26032605
if (ch == nullptr || !ch->HasSubscribers()) {
26042606
return 0;
26052607
}
26062608

26072609
Isolate* isolate = env->isolate();
26082610
HandleScope handle_scope(isolate);
2609-
Local<Context> context = env->context();
26102611

26112612
char* expanded = sqlite3_expanded_sql(static_cast<sqlite3_stmt*>(p));
26122613
Local<Value> sql_string;
@@ -2629,24 +2630,19 @@ int DatabaseSync::TraceCallback(unsigned int type,
26292630
// sufficient since 2^53 ns (~104 days) exceeds any realistic query duration.
26302631
sqlite3_int64 duration_ns = *static_cast<sqlite3_int64*>(x);
26312632

2632-
Local<Object> payload = Object::New(isolate);
2633-
if (payload
2634-
->Set(context,
2635-
FIXED_ONE_BYTE_STRING(isolate, "sql"),
2636-
sql_string)
2637-
.IsNothing() ||
2638-
payload
2639-
->Set(context,
2640-
FIXED_ONE_BYTE_STRING(isolate, "database"),
2641-
db->object())
2642-
.IsNothing() ||
2643-
payload
2644-
->Set(context,
2645-
FIXED_ONE_BYTE_STRING(isolate, "duration"),
2646-
Number::New(isolate, static_cast<double>(duration_ns)))
2647-
.IsNothing()) {
2648-
return 0;
2649-
}
2633+
Local<Name> keys[3] = {
2634+
env->sql_string().As<Name>(),
2635+
env->database_string().As<Name>(),
2636+
env->duration_string().As<Name>(),
2637+
};
2638+
2639+
Local<Value> values[3] = {
2640+
sql_string,
2641+
db->object(),
2642+
Number::New(isolate, static_cast<double>(duration_ns)),
2643+
};
2644+
2645+
Local<Object> payload = Object::New(isolate, Null(isolate), keys, values, 3);
26502646

26512647
ch->Publish(env, payload);
26522648

src/node_sqlite.h

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

2020
namespace node {
2121

22+
namespace diagnostics_channel {
23+
class Channel;
24+
} // namespace diagnostics_channel
25+
2226
class ExternalReferenceRegistry;
2327

2428
namespace sqlite {
@@ -275,6 +279,7 @@ class DatabaseSync : public BaseObject {
275279
std::set<BackupJob*> backups_;
276280
std::set<sqlite3_session*> sessions_;
277281
std::unordered_set<StatementSync*> statements_;
282+
diagnostics_channel::Channel* trace_channel_ = nullptr;
278283

279284
friend class DatabaseSyncLimits;
280285
friend class Session;

0 commit comments

Comments
 (0)