Skip to content

Commit 2d36987

Browse files
committed
sqlite: add database property on payload
1 parent 906ef83 commit 2d36987

File tree

2 files changed

+51
-15
lines changed

2 files changed

+51
-15
lines changed

src/node_sqlite.cc

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2457,6 +2457,7 @@ int DatabaseSync::TraceCallback(unsigned int type,
24572457

24582458
Isolate* isolate = env->isolate();
24592459
HandleScope handle_scope(isolate);
2460+
Local<Context> context = env->context();
24602461

24612462
char* expanded = sqlite3_expanded_sql(static_cast<sqlite3_stmt*>(p));
24622463
Local<Value> sql_string;
@@ -2475,7 +2476,21 @@ int DatabaseSync::TraceCallback(unsigned int type,
24752476
}
24762477
}
24772478

2478-
ch->Publish(env, sql_string);
2479+
Local<Object> payload = Object::New(isolate);
2480+
if (payload
2481+
->Set(context,
2482+
FIXED_ONE_BYTE_STRING(isolate, "sql"),
2483+
sql_string)
2484+
.IsNothing() ||
2485+
payload
2486+
->Set(context,
2487+
FIXED_ONE_BYTE_STRING(isolate, "database"),
2488+
db->object())
2489+
.IsNothing()) {
2490+
return 0;
2491+
}
2492+
2493+
ch->Publish(env, payload);
24792494

24802495
return 0;
24812496
}

test/parallel/test-sqlite-trace.js

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,24 @@ suite('sqlite.db.query diagnostics channel', () => {
1414
const db = new DatabaseSync(':memory:');
1515
t.after(() => db.close());
1616

17-
const handler = (sql) => calls.push(sql);
17+
const handler = (msg) => calls.push(msg);
1818
dc.subscribe('sqlite.db.query', handler);
1919
t.after(() => dc.unsubscribe('sqlite.db.query', handler));
2020

2121
db.exec('CREATE TABLE t (x INTEGER)');
2222
db.exec('INSERT INTO t VALUES (1)');
2323

2424
assert.strictEqual(calls.length, 2);
25-
assert.strictEqual(calls[0], 'CREATE TABLE t (x INTEGER)');
26-
assert.strictEqual(calls[1], 'INSERT INTO t VALUES (1)');
25+
assert.strictEqual(calls[0].sql, 'CREATE TABLE t (x INTEGER)');
26+
assert.strictEqual(calls[1].sql, 'INSERT INTO t VALUES (1)');
2727
});
2828

2929
it('subscriber receives SQL string for prepared INSERT statements', (t) => {
3030
let calls = [];
3131
const db = new DatabaseSync(':memory:');
3232
t.after(() => db.close());
3333

34-
const handler = (sql) => calls.push(sql);
34+
const handler = (msg) => calls.push(msg);
3535
dc.subscribe('sqlite.db.query', handler);
3636
t.after(() => dc.unsubscribe('sqlite.db.query', handler));
3737

@@ -42,15 +42,15 @@ suite('sqlite.db.query diagnostics channel', () => {
4242
stmt.run(42);
4343

4444
assert.strictEqual(calls.length, 1);
45-
assert.strictEqual(calls[0], 'INSERT INTO t VALUES (42.0)');
45+
assert.strictEqual(calls[0].sql, 'INSERT INTO t VALUES (42.0)');
4646
});
4747

4848
it('subscriber receives SQL string for prepared SELECT statements', (t) => {
4949
let calls = [];
5050
const db = new DatabaseSync(':memory:');
5151
t.after(() => db.close());
5252

53-
const handler = (sql) => calls.push(sql);
53+
const handler = (msg) => calls.push(msg);
5454
dc.subscribe('sqlite.db.query', handler);
5555
t.after(() => dc.unsubscribe('sqlite.db.query', handler));
5656

@@ -62,15 +62,15 @@ suite('sqlite.db.query diagnostics channel', () => {
6262
stmt.get(1);
6363

6464
assert.strictEqual(calls.length, 1);
65-
assert.strictEqual(calls[0], 'SELECT x FROM t WHERE x = 1.0');
65+
assert.strictEqual(calls[0].sql, 'SELECT x FROM t WHERE x = 1.0');
6666
});
6767

6868
it('subscriber receives SQL string for prepared UPDATE statements', (t) => {
6969
let calls = [];
7070
const db = new DatabaseSync(':memory:');
7171
t.after(() => db.close());
7272

73-
const handler = (sql) => calls.push(sql);
73+
const handler = (msg) => calls.push(msg);
7474
dc.subscribe('sqlite.db.query', handler);
7575
t.after(() => dc.unsubscribe('sqlite.db.query', handler));
7676

@@ -82,15 +82,15 @@ suite('sqlite.db.query diagnostics channel', () => {
8282
stmt.run(2, 1);
8383

8484
assert.strictEqual(calls.length, 1);
85-
assert.strictEqual(calls[0], 'UPDATE t SET x = 2.0 WHERE x = 1.0');
85+
assert.strictEqual(calls[0].sql, 'UPDATE t SET x = 2.0 WHERE x = 1.0');
8686
});
8787

8888
it('subscriber receives SQL string for prepared DELETE statements', (t) => {
8989
let calls = [];
9090
const db = new DatabaseSync(':memory:');
9191
t.after(() => db.close());
9292

93-
const handler = (sql) => calls.push(sql);
93+
const handler = (msg) => calls.push(msg);
9494
dc.subscribe('sqlite.db.query', handler);
9595
t.after(() => dc.unsubscribe('sqlite.db.query', handler));
9696

@@ -102,15 +102,15 @@ suite('sqlite.db.query diagnostics channel', () => {
102102
stmt.run(1);
103103

104104
assert.strictEqual(calls.length, 1);
105-
assert.strictEqual(calls[0], 'DELETE FROM t WHERE x = 1.0');
105+
assert.strictEqual(calls[0].sql, 'DELETE FROM t WHERE x = 1.0');
106106
});
107107

108108
it('no calls received after unsubscribe', (t) => {
109109
const calls = [];
110110
const db = new DatabaseSync(':memory:');
111111
t.after(() => db.close());
112112

113-
const handler = (sql) => calls.push(sql);
113+
const handler = (msg) => calls.push(msg);
114114
dc.subscribe('sqlite.db.query', handler);
115115

116116
db.exec('CREATE TABLE t (x INTEGER)');
@@ -126,7 +126,7 @@ suite('sqlite.db.query diagnostics channel', () => {
126126
const db = new DatabaseSync(':memory:', { limits: { length: 1000 } });
127127
t.after(() => db.close());
128128

129-
const handler = (sql) => calls.push(sql);
129+
const handler = (msg) => calls.push(msg);
130130
dc.subscribe('sqlite.db.query', handler);
131131
t.after(() => dc.unsubscribe('sqlite.db.query', handler));
132132

@@ -140,6 +140,27 @@ suite('sqlite.db.query diagnostics channel', () => {
140140

141141
assert.strictEqual(calls.length, 1);
142142
// Falls back to source SQL with unexpanded '?' placeholder
143-
assert.strictEqual(calls[0], 'INSERT INTO t VALUES (?)');
143+
assert.strictEqual(calls[0].sql, 'INSERT INTO t VALUES (?)');
144+
});
145+
146+
it('database property identifies the correct database', (t) => {
147+
const calls = [];
148+
const db1 = new DatabaseSync(':memory:');
149+
const db2 = new DatabaseSync(':memory:');
150+
t.after(() => {
151+
db1.close(); db2.close();
152+
});
153+
154+
const handler = (msg) => calls.push(msg);
155+
dc.subscribe('sqlite.db.query', handler);
156+
t.after(() => dc.unsubscribe('sqlite.db.query', handler));
157+
158+
db1.exec('CREATE TABLE t (x INTEGER)');
159+
db2.exec('CREATE TABLE t (x INTEGER)');
160+
161+
assert.strictEqual(calls.length, 2);
162+
assert.strictEqual(calls[0].database, db1);
163+
assert.strictEqual(calls[1].database, db2);
164+
assert.notStrictEqual(calls[0].database, calls[1].database);
144165
});
145166
});

0 commit comments

Comments
 (0)