@@ -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
10171016void 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
0 commit comments