@@ -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