@@ -174,6 +174,113 @@ suite('DatabaseSync() constructor', () => {
174174    t . after ( ( )  =>  {  db . close ( ) ;  } ) ; 
175175    db . exec ( 'SELECT "foo";' ) ; 
176176  } ) ; 
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+   } ) ; 
177284} ) ; 
178285
179286suite ( 'DatabaseSync.prototype.open()' ,  ( )  =>  { 
0 commit comments