@@ -174,6 +174,113 @@ suite('DatabaseSync() constructor', () => {
174
174
t . after ( ( ) => { db . close ( ) ; } ) ;
175
175
db . exec ( 'SELECT "foo";' ) ;
176
176
} ) ;
177
+
178
+ test ( 'throws if options.readBigInts is provided but is not a boolean' , ( t ) => {
179
+ t . assert . throws ( ( ) => {
180
+ new DatabaseSync ( 'foo' , { readBigInts : 42 } ) ;
181
+ } , {
182
+ code : 'ERR_INVALID_ARG_TYPE' ,
183
+ message : 'The "options.readBigInts" argument must be a boolean.' ,
184
+ } ) ;
185
+ } ) ;
186
+
187
+ test ( 'allows reading big integers' , ( t ) => {
188
+ const dbPath = nextDb ( ) ;
189
+ const db = new DatabaseSync ( dbPath , { readBigInts : true } ) ;
190
+ t . after ( ( ) => { db . close ( ) ; } ) ;
191
+
192
+ const setup = db . exec ( `
193
+ CREATE TABLE data(key INTEGER PRIMARY KEY, val INTEGER) STRICT;
194
+ INSERT INTO data (key, val) VALUES (1, 42);
195
+ ` ) ;
196
+ t . assert . strictEqual ( setup , undefined ) ;
197
+
198
+ const query = db . prepare ( 'SELECT val FROM data' ) ;
199
+ t . assert . deepStrictEqual ( query . get ( ) , { __proto__ : null , val : 42n } ) ;
200
+
201
+ const insert = db . prepare ( 'INSERT INTO data (key) VALUES (?)' ) ;
202
+ t . assert . deepStrictEqual (
203
+ insert . run ( 20 ) ,
204
+ { changes : 1n , lastInsertRowid : 20n } ,
205
+ ) ;
206
+ } ) ;
207
+
208
+ test ( 'throws if options.returnArrays is provided but is not a boolean' , ( t ) => {
209
+ t . assert . throws ( ( ) => {
210
+ new DatabaseSync ( 'foo' , { returnArrays : 42 } ) ;
211
+ } , {
212
+ code : 'ERR_INVALID_ARG_TYPE' ,
213
+ message : 'The "options.returnArrays" argument must be a boolean.' ,
214
+ } ) ;
215
+ } ) ;
216
+
217
+ test ( 'allows returning arrays' , ( t ) => {
218
+ const dbPath = nextDb ( ) ;
219
+ const db = new DatabaseSync ( dbPath , { returnArrays : true } ) ;
220
+ t . after ( ( ) => { db . close ( ) ; } ) ;
221
+ const setup = db . exec ( `
222
+ CREATE TABLE data(key INTEGER PRIMARY KEY, val TEXT) STRICT;
223
+ INSERT INTO data (key, val) VALUES (1, 'one');
224
+ INSERT INTO data (key, val) VALUES (2, 'two');
225
+ ` ) ;
226
+ t . assert . strictEqual ( setup , undefined ) ;
227
+
228
+ const query = db . prepare ( 'SELECT key, val FROM data WHERE key = 1' ) ;
229
+ t . assert . deepStrictEqual ( query . get ( ) , [ 1 , 'one' ] ) ;
230
+ } ) ;
231
+
232
+ test ( 'throws if options.allowBareNamedParameters is provided but is not a boolean' , ( t ) => {
233
+ t . assert . throws ( ( ) => {
234
+ new DatabaseSync ( 'foo' , { allowBareNamedParameters : 42 } ) ;
235
+ } , {
236
+ code : 'ERR_INVALID_ARG_TYPE' ,
237
+ message : 'The "options.allowBareNamedParameters" argument must be a boolean.' ,
238
+ } ) ;
239
+ } ) ;
240
+
241
+ test ( 'throws if bare named parameters are used when option is false' , ( t ) => {
242
+ const dbPath = nextDb ( ) ;
243
+ const db = new DatabaseSync ( dbPath , { allowBareNamedParameters : false } ) ;
244
+ t . after ( ( ) => { db . close ( ) ; } ) ;
245
+ const setup = db . exec (
246
+ 'CREATE TABLE data(key INTEGER PRIMARY KEY, val INTEGER) STRICT;'
247
+ ) ;
248
+ t . assert . strictEqual ( setup , undefined ) ;
249
+
250
+ const stmt = db . prepare ( 'INSERT INTO data (key, val) VALUES ($k, $v)' ) ;
251
+ t . assert . throws ( ( ) => {
252
+ stmt . run ( { k : 2 , v : 4 } ) ;
253
+ } , {
254
+ code : 'ERR_INVALID_STATE' ,
255
+ message : / U n k n o w n n a m e d p a r a m e t e r ' k ' / ,
256
+ } ) ;
257
+ } ) ;
258
+
259
+ test ( 'throws if options.allowUnknownNamedParameters is provided but is not a boolean' , ( t ) => {
260
+ t . assert . throws ( ( ) => {
261
+ new DatabaseSync ( 'foo' , { allowUnknownNamedParameters : 42 } ) ;
262
+ } , {
263
+ code : 'ERR_INVALID_ARG_TYPE' ,
264
+ message : 'The "options.allowUnknownNamedParameters" argument must be a boolean.' ,
265
+ } ) ;
266
+ } ) ;
267
+
268
+ test ( 'allows unknown named parameters' , ( t ) => {
269
+ const dbPath = nextDb ( ) ;
270
+ const db = new DatabaseSync ( dbPath , { allowUnknownNamedParameters : true } ) ;
271
+ t . after ( ( ) => { db . close ( ) ; } ) ;
272
+ const setup = db . exec (
273
+ 'CREATE TABLE data(key INTEGER, val INTEGER) STRICT;'
274
+ ) ;
275
+ t . assert . strictEqual ( setup , undefined ) ;
276
+
277
+ const stmt = db . prepare ( 'INSERT INTO data (key, val) VALUES ($k, $v)' ) ;
278
+ const params = { $a : 1 , $b : 2 , $k : 42 , $y : 25 , $v : 84 , $z : 99 } ;
279
+ t . assert . deepStrictEqual (
280
+ stmt . run ( params ) ,
281
+ { changes : 1 , lastInsertRowid : 1 } ,
282
+ ) ;
283
+ } ) ;
177
284
} ) ;
178
285
179
286
suite ( 'DatabaseSync.prototype.open()' , ( ) => {
0 commit comments