@@ -7,27 +7,26 @@ const assert = require('node:assert');
77const { DatabaseSync } = require ( 'node:sqlite' ) ;
88const { suite, it } = require ( 'node:test' ) ;
99
10- suite ( 'DatabaseSync trace option ' , ( ) => {
10+ suite ( 'DatabaseSync.prototype.setSqlTraceHook() ' , ( ) => {
1111 it ( 'callback receives SQL string for exec() statements' , ( t ) => {
1212 const calls = [ ] ;
13- const db = new DatabaseSync ( ':memory:' , {
14- trace : ( sql ) => calls . push ( sql ) ,
15- } ) ;
13+ const db = new DatabaseSync ( ':memory:' ) ;
14+ t . after ( ( ) => db . close ( ) ) ;
15+ db . setSqlTraceHook ( ( sql ) => calls . push ( sql ) ) ;
1616
1717 db . exec ( 'CREATE TABLE t (x INTEGER)' ) ;
1818 db . exec ( 'INSERT INTO t VALUES (1)' ) ;
1919
2020 assert . strictEqual ( calls . length , 2 ) ;
2121 assert . strictEqual ( calls [ 0 ] , 'CREATE TABLE t (x INTEGER)' ) ;
2222 assert . strictEqual ( calls [ 1 ] , 'INSERT INTO t VALUES (1)' ) ;
23- db . close ( ) ;
2423 } ) ;
2524
26- it ( 'callback receives SQL string for prepared statement execution ' , ( t ) => {
25+ it ( 'callback receives SQL string for prepared INSERT statements ' , ( t ) => {
2726 let calls = [ ] ;
28- const db = new DatabaseSync ( ':memory:' , {
29- trace : ( sql ) => calls . push ( sql ) ,
30- } ) ;
27+ const db = new DatabaseSync ( ':memory:' ) ;
28+ t . after ( ( ) => db . close ( ) ) ;
29+ db . setSqlTraceHook ( ( sql ) => calls . push ( sql ) ) ;
3130
3231 db . exec ( 'CREATE TABLE t (x INTEGER)' ) ;
3332 calls = [ ] ; // reset after setup
@@ -37,14 +36,13 @@ suite('DatabaseSync trace option', () => {
3736
3837 assert . strictEqual ( calls . length , 1 ) ;
3938 assert . strictEqual ( calls [ 0 ] , 'INSERT INTO t VALUES (42.0)' ) ;
40- db . close ( ) ;
4139 } ) ;
4240
43- it ( 'callback receives SQL string for SELECT statements' , ( ) => {
41+ it ( 'callback receives SQL string for prepared SELECT statements' , ( t ) => {
4442 let calls = [ ] ;
45- const db = new DatabaseSync ( ':memory:' , {
46- trace : ( sql ) => calls . push ( sql ) ,
47- } ) ;
43+ const db = new DatabaseSync ( ':memory:' ) ;
44+ t . after ( ( ) => db . close ( ) ) ;
45+ db . setSqlTraceHook ( ( sql ) => calls . push ( sql ) ) ;
4846
4947 db . exec ( 'CREATE TABLE t (x INTEGER)' ) ;
5048 db . exec ( 'INSERT INTO t VALUES (1)' ) ;
@@ -55,14 +53,13 @@ suite('DatabaseSync trace option', () => {
5553
5654 assert . strictEqual ( calls . length , 1 ) ;
5755 assert . strictEqual ( calls [ 0 ] , 'SELECT x FROM t WHERE x = 1.0' ) ;
58- db . close ( ) ;
5956 } ) ;
6057
61- it ( 'callback receives SQL string for UPDATE statements' , ( ) => {
58+ it ( 'callback receives SQL string for prepared UPDATE statements' , ( t ) => {
6259 let calls = [ ] ;
63- const db = new DatabaseSync ( ':memory:' , {
64- trace : ( sql ) => calls . push ( sql ) ,
65- } ) ;
60+ const db = new DatabaseSync ( ':memory:' ) ;
61+ t . after ( ( ) => db . close ( ) ) ;
62+ db . setSqlTraceHook ( ( sql ) => calls . push ( sql ) ) ;
6663
6764 db . exec ( 'CREATE TABLE t (x INTEGER)' ) ;
6865 db . exec ( 'INSERT INTO t VALUES (1)' ) ;
@@ -73,14 +70,13 @@ suite('DatabaseSync trace option', () => {
7370
7471 assert . strictEqual ( calls . length , 1 ) ;
7572 assert . strictEqual ( calls [ 0 ] , 'UPDATE t SET x = 2.0 WHERE x = 1.0' ) ;
76- db . close ( ) ;
7773 } ) ;
7874
79- it ( 'callback receives SQL string for DELETE statements' , ( ) => {
75+ it ( 'callback receives SQL string for prepared DELETE statements' , ( t ) => {
8076 let calls = [ ] ;
81- const db = new DatabaseSync ( ':memory:' , {
82- trace : ( sql ) => calls . push ( sql ) ,
83- } ) ;
77+ const db = new DatabaseSync ( ':memory:' ) ;
78+ t . after ( ( ) => db . close ( ) ) ;
79+ db . setSqlTraceHook ( ( sql ) => calls . push ( sql ) ) ;
8480
8581 db . exec ( 'CREATE TABLE t (x INTEGER)' ) ;
8682 db . exec ( 'INSERT INTO t VALUES (1)' ) ;
@@ -91,16 +87,27 @@ suite('DatabaseSync trace option', () => {
9187
9288 assert . strictEqual ( calls . length , 1 ) ;
9389 assert . strictEqual ( calls [ 0 ] , 'DELETE FROM t WHERE x = 1.0' ) ;
94- db . close ( ) ;
9590 } ) ;
9691
97- it ( 'falls back to source SQL when expansion fails' , ( ) => {
98- let calls = [ ] ;
92+ it ( 'setSqlTraceHook(null) clears the callback' , ( t ) => {
93+ const calls = [ ] ;
94+ const db = new DatabaseSync ( ':memory:' ) ;
95+ t . after ( ( ) => db . close ( ) ) ;
96+ db . setSqlTraceHook ( ( sql ) => calls . push ( sql ) ) ;
9997
100- const db = new DatabaseSync ( ':memory:' , {
101- trace : ( sql ) => calls . push ( sql ) ,
102- limits : { length : 1000 } ,
103- } ) ;
98+ db . exec ( 'CREATE TABLE t (x INTEGER)' ) ;
99+ assert . strictEqual ( calls . length , 1 ) ;
100+
101+ db . setSqlTraceHook ( null ) ;
102+ db . exec ( 'INSERT INTO t VALUES (1)' ) ;
103+ assert . strictEqual ( calls . length , 1 ) ; // No new calls after clearing
104+ } ) ;
105+
106+ it ( 'falls back to source SQL when expansion fails' , ( t ) => {
107+ let calls = [ ] ;
108+ const db = new DatabaseSync ( ':memory:' , { limits : { length : 1000 } } ) ;
109+ t . after ( ( ) => db . close ( ) ) ;
110+ db . setSqlTraceHook ( ( sql ) => calls . push ( sql ) ) ;
104111
105112 db . exec ( 'CREATE TABLE t (x TEXT)' ) ;
106113 calls = [ ] ; // reset after setup
@@ -113,22 +120,35 @@ suite('DatabaseSync trace option', () => {
113120 assert . strictEqual ( calls . length , 1 ) ;
114121 // Falls back to source SQL with unexpanded '?' placeholder
115122 assert . strictEqual ( calls [ 0 ] , 'INSERT INTO t VALUES (?)' ) ;
116- db . close ( ) ;
117123 } ) ;
118124
119- it ( 'invalid type for trace throws ERR_INVALID_ARG_TYPE' , ( ) => {
125+ it ( 'throws when the database is not open' , ( ) => {
126+ const db = new DatabaseSync ( ':memory:' , { open : false } ) ;
127+
128+ assert . throws ( ( ) => {
129+ db . setSqlTraceHook ( ( ) => { } ) ;
130+ } , {
131+ code : 'ERR_INVALID_STATE' ,
132+ message : / d a t a b a s e i s n o t o p e n / ,
133+ } ) ;
134+ } ) ;
135+
136+ it ( 'throws ERR_INVALID_ARG_TYPE for non-function argument' , ( t ) => {
137+ const db = new DatabaseSync ( ':memory:' ) ;
138+ t . after ( ( ) => db . close ( ) ) ;
139+
120140 assert . throws ( ( ) => {
121- new DatabaseSync ( ':memory:' , { trace : ' not-a-function' } ) ;
141+ db . setSqlTraceHook ( ' not-a-function') ;
122142 } , {
123143 code : 'ERR_INVALID_ARG_TYPE' ,
124- message : / T h e " o p t i o n s \. t r a c e " a r g u m e n t m u s t b e a f u n c t i o n \. / ,
144+ message : / T h e " h o o k " a r g u m e n t m u s t b e a f u n c t i o n \. / ,
125145 } ) ;
126146
127147 assert . throws ( ( ) => {
128- new DatabaseSync ( ':memory:' , { trace : 42 } ) ;
148+ db . setSqlTraceHook ( 42 ) ;
129149 } , {
130150 code : 'ERR_INVALID_ARG_TYPE' ,
131- message : / T h e " o p t i o n s \. t r a c e " a r g u m e n t m u s t b e a f u n c t i o n \. / ,
151+ message : / T h e " h o o k " a r g u m e n t m u s t b e a f u n c t i o n \. / ,
132152 } ) ;
133153 } ) ;
134154} ) ;
0 commit comments