@@ -609,3 +609,248 @@ suite('StatementSync.prototype.setAllowBareNamedParameters()', () => {
609609 } ) ;
610610 } ) ;
611611} ) ;
612+
613+ suite ( 'options.readBigInts' , ( ) => {
614+ test ( 'BigInts are returned when input is true' , ( t ) => {
615+ const db = new DatabaseSync ( nextDb ( ) ) ;
616+ t . after ( ( ) => { db . close ( ) ; } ) ;
617+ const setup = db . exec ( `
618+ CREATE TABLE data(key INTEGER PRIMARY KEY, val INTEGER) STRICT;
619+ INSERT INTO data (key, val) VALUES (1, 42);
620+ ` ) ;
621+ t . assert . strictEqual ( setup , undefined ) ;
622+
623+ const query = db . prepare ( 'SELECT val FROM data' , { readBigInts : true } ) ;
624+ t . assert . deepStrictEqual ( query . get ( ) , { __proto__ : null , val : 42n } ) ;
625+ } ) ;
626+
627+ test ( 'numbers are returned when input is false' , ( t ) => {
628+ const db = new DatabaseSync ( nextDb ( ) ) ;
629+ t . after ( ( ) => { db . close ( ) ; } ) ;
630+ const setup = db . exec ( `
631+ CREATE TABLE data(key INTEGER PRIMARY KEY, val INTEGER) STRICT;
632+ INSERT INTO data (key, val) VALUES (1, 42);
633+ ` ) ;
634+ t . assert . strictEqual ( setup , undefined ) ;
635+
636+ const query = db . prepare ( 'SELECT val FROM data' , { readBigInts : false } ) ;
637+ t . assert . deepStrictEqual ( query . get ( ) , { __proto__ : null , val : 42 } ) ;
638+ } ) ;
639+
640+ test ( 'throws when input is not a boolean' , ( t ) => {
641+ const db = new DatabaseSync ( nextDb ( ) ) ;
642+ t . after ( ( ) => { db . close ( ) ; } ) ;
643+ const setup = db . exec (
644+ 'CREATE TABLE data(key INTEGER PRIMARY KEY, val INTEGER) STRICT;'
645+ ) ;
646+ t . assert . strictEqual ( setup , undefined ) ;
647+ t . assert . throws ( ( ) => {
648+ db . prepare ( 'SELECT val FROM data' , { readBigInts : 'true' } ) ;
649+ } , {
650+ code : 'ERR_INVALID_ARG_TYPE' ,
651+ message : / T h e " o p t i o n s \. r e a d B i g I n t s " a r g u m e n t m u s t b e a b o o l e a n / ,
652+ } ) ;
653+ } ) ;
654+
655+ test ( 'setReadBigInts can override prepare option' , ( t ) => {
656+ const db = new DatabaseSync ( nextDb ( ) ) ;
657+ t . after ( ( ) => { db . close ( ) ; } ) ;
658+ const setup = db . exec ( `
659+ CREATE TABLE data(key INTEGER PRIMARY KEY, val INTEGER) STRICT;
660+ INSERT INTO data (key, val) VALUES (1, 42);
661+ ` ) ;
662+ t . assert . strictEqual ( setup , undefined ) ;
663+
664+ const query = db . prepare ( 'SELECT val FROM data' , { readBigInts : true } ) ;
665+ t . assert . deepStrictEqual ( query . get ( ) , { __proto__ : null , val : 42n } ) ;
666+ t . assert . strictEqual ( query . setReadBigInts ( false ) , undefined ) ;
667+ t . assert . deepStrictEqual ( query . get ( ) , { __proto__ : null , val : 42 } ) ;
668+ } ) ;
669+ } ) ;
670+
671+ suite ( 'options.returnArrays' , ( ) => {
672+ test ( 'arrays are returned when input is true' , ( t ) => {
673+ const db = new DatabaseSync ( nextDb ( ) ) ;
674+ t . after ( ( ) => { db . close ( ) ; } ) ;
675+ const setup = db . exec ( `
676+ CREATE TABLE data(key INTEGER PRIMARY KEY, val TEXT) STRICT;
677+ INSERT INTO data (key, val) VALUES (1, 'one');
678+ ` ) ;
679+ t . assert . strictEqual ( setup , undefined ) ;
680+
681+ const query = db . prepare (
682+ 'SELECT key, val FROM data WHERE key = 1' ,
683+ { returnArrays : true }
684+ ) ;
685+ t . assert . deepStrictEqual ( query . get ( ) , [ 1 , 'one' ] ) ;
686+ } ) ;
687+
688+ test ( 'objects are returned when input is false' , ( t ) => {
689+ const db = new DatabaseSync ( nextDb ( ) ) ;
690+ t . after ( ( ) => { db . close ( ) ; } ) ;
691+ const setup = db . exec ( `
692+ CREATE TABLE data(key INTEGER PRIMARY KEY, val TEXT) STRICT;
693+ INSERT INTO data (key, val) VALUES (1, 'one');
694+ ` ) ;
695+ t . assert . strictEqual ( setup , undefined ) ;
696+
697+ const query = db . prepare (
698+ 'SELECT key, val FROM data WHERE key = 1' ,
699+ { returnArrays : false }
700+ ) ;
701+ t . assert . deepStrictEqual ( query . get ( ) , { __proto__ : null , key : 1 , val : 'one' } ) ;
702+ } ) ;
703+
704+ test ( 'throws when input is not a boolean' , ( t ) => {
705+ const db = new DatabaseSync ( nextDb ( ) ) ;
706+ t . after ( ( ) => { db . close ( ) ; } ) ;
707+ const setup = db . exec (
708+ 'CREATE TABLE data(key INTEGER PRIMARY KEY, val TEXT) STRICT;'
709+ ) ;
710+ t . assert . strictEqual ( setup , undefined ) ;
711+ t . assert . throws ( ( ) => {
712+ db . prepare ( 'SELECT key, val FROM data' , { returnArrays : 'true' } ) ;
713+ } , {
714+ code : 'ERR_INVALID_ARG_TYPE' ,
715+ message : / T h e " o p t i o n s \. r e t u r n A r r a y s " a r g u m e n t m u s t b e a b o o l e a n / ,
716+ } ) ;
717+ } ) ;
718+
719+ test ( 'setReturnArrays can override prepare option' , ( t ) => {
720+ const db = new DatabaseSync ( nextDb ( ) ) ;
721+ t . after ( ( ) => { db . close ( ) ; } ) ;
722+ const setup = db . exec ( `
723+ CREATE TABLE data(key INTEGER PRIMARY KEY, val TEXT) STRICT;
724+ INSERT INTO data (key, val) VALUES (1, 'one');
725+ ` ) ;
726+ t . assert . strictEqual ( setup , undefined ) ;
727+
728+ const query = db . prepare (
729+ 'SELECT key, val FROM data WHERE key = 1' ,
730+ { returnArrays : true }
731+ ) ;
732+ t . assert . deepStrictEqual ( query . get ( ) , [ 1 , 'one' ] ) ;
733+ t . assert . strictEqual ( query . setReturnArrays ( false ) , undefined ) ;
734+ t . assert . deepStrictEqual ( query . get ( ) , { __proto__ : null , key : 1 , val : 'one' } ) ;
735+ } ) ;
736+
737+ test ( 'all() returns arrays when input is true' , ( t ) => {
738+ const db = new DatabaseSync ( nextDb ( ) ) ;
739+ t . after ( ( ) => { db . close ( ) ; } ) ;
740+ const setup = db . exec ( `
741+ CREATE TABLE data(key INTEGER PRIMARY KEY, val TEXT) STRICT;
742+ INSERT INTO data (key, val) VALUES (1, 'one');
743+ INSERT INTO data (key, val) VALUES (2, 'two');
744+ ` ) ;
745+ t . assert . strictEqual ( setup , undefined ) ;
746+
747+ const query = db . prepare (
748+ 'SELECT key, val FROM data ORDER BY key' ,
749+ { returnArrays : true }
750+ ) ;
751+ t . assert . deepStrictEqual ( query . all ( ) , [
752+ [ 1 , 'one' ] ,
753+ [ 2 , 'two' ] ,
754+ ] ) ;
755+ } ) ;
756+
757+ test ( 'iterate() returns arrays when input is true' , ( t ) => {
758+ const db = new DatabaseSync ( nextDb ( ) ) ;
759+ t . after ( ( ) => { db . close ( ) ; } ) ;
760+ const setup = db . exec ( `
761+ CREATE TABLE data(key INTEGER PRIMARY KEY, val TEXT) STRICT;
762+ INSERT INTO data (key, val) VALUES (1, 'one');
763+ INSERT INTO data (key, val) VALUES (2, 'two');
764+ ` ) ;
765+ t . assert . strictEqual ( setup , undefined ) ;
766+
767+ const query = db . prepare (
768+ 'SELECT key, val FROM data ORDER BY key' ,
769+ { returnArrays : true }
770+ ) ;
771+ t . assert . deepStrictEqual ( query . iterate ( ) . toArray ( ) , [
772+ [ 1 , 'one' ] ,
773+ [ 2 , 'two' ] ,
774+ ] ) ;
775+ } ) ;
776+ } ) ;
777+
778+ suite ( 'options.allowBareNamedParameters' , ( ) => {
779+ test ( 'bare named parameters are allowed when input is true' , ( t ) => {
780+ const db = new DatabaseSync ( nextDb ( ) ) ;
781+ t . after ( ( ) => { db . close ( ) ; } ) ;
782+ const setup = db . exec (
783+ 'CREATE TABLE data(key INTEGER PRIMARY KEY, val INTEGER) STRICT;'
784+ ) ;
785+ t . assert . strictEqual ( setup , undefined ) ;
786+ const stmt = db . prepare (
787+ 'INSERT INTO data (key, val) VALUES ($k, $v)' ,
788+ { allowBareNamedParameters : true }
789+ ) ;
790+ t . assert . deepStrictEqual (
791+ stmt . run ( { k : 1 , v : 2 } ) ,
792+ { changes : 1 , lastInsertRowid : 1 } ,
793+ ) ;
794+ } ) ;
795+
796+ test ( 'bare named parameters throw when input is false' , ( t ) => {
797+ const db = new DatabaseSync ( nextDb ( ) ) ;
798+ t . after ( ( ) => { db . close ( ) ; } ) ;
799+ const setup = db . exec (
800+ 'CREATE TABLE data(key INTEGER PRIMARY KEY, val INTEGER) STRICT;'
801+ ) ;
802+ t . assert . strictEqual ( setup , undefined ) ;
803+ const stmt = db . prepare (
804+ 'INSERT INTO data (key, val) VALUES ($k, $v)' ,
805+ { allowBareNamedParameters : false }
806+ ) ;
807+ t . assert . throws ( ( ) => {
808+ stmt . run ( { k : 1 , v : 2 } ) ;
809+ } , {
810+ code : 'ERR_INVALID_STATE' ,
811+ message : / U n k n o w n n a m e d p a r a m e t e r ' k ' / ,
812+ } ) ;
813+ } ) ;
814+
815+ test ( 'throws when input is not a boolean' , ( t ) => {
816+ const db = new DatabaseSync ( nextDb ( ) ) ;
817+ t . after ( ( ) => { db . close ( ) ; } ) ;
818+ const setup = db . exec (
819+ 'CREATE TABLE data(key INTEGER PRIMARY KEY, val INTEGER) STRICT;'
820+ ) ;
821+ t . assert . strictEqual ( setup , undefined ) ;
822+ t . assert . throws ( ( ) => {
823+ db . prepare (
824+ 'INSERT INTO data (key, val) VALUES ($k, $v)' ,
825+ { allowBareNamedParameters : 'true' }
826+ ) ;
827+ } , {
828+ code : 'ERR_INVALID_ARG_TYPE' ,
829+ message : / T h e " o p t i o n s \. a l l o w B a r e N a m e d P a r a m e t e r s " a r g u m e n t m u s t b e a b o o l e a n / ,
830+ } ) ;
831+ } ) ;
832+
833+ test ( 'setAllowBareNamedParameters can override prepare option' , ( t ) => {
834+ const db = new DatabaseSync ( nextDb ( ) ) ;
835+ t . after ( ( ) => { db . close ( ) ; } ) ;
836+ const setup = db . exec (
837+ 'CREATE TABLE data(key INTEGER PRIMARY KEY, val INTEGER) STRICT;'
838+ ) ;
839+ t . assert . strictEqual ( setup , undefined ) ;
840+ const stmt = db . prepare (
841+ 'INSERT INTO data (key, val) VALUES ($k, $v)' ,
842+ { allowBareNamedParameters : false }
843+ ) ;
844+ t . assert . throws ( ( ) => {
845+ stmt . run ( { k : 1 , v : 2 } ) ;
846+ } , {
847+ code : 'ERR_INVALID_STATE' ,
848+ message : / U n k n o w n n a m e d p a r a m e t e r ' k ' / ,
849+ } ) ;
850+ t . assert . strictEqual ( stmt . setAllowBareNamedParameters ( true ) , undefined ) ;
851+ t . assert . deepStrictEqual (
852+ stmt . run ( { k : 2 , v : 4 } ) ,
853+ { changes : 1 , lastInsertRowid : 2 } ,
854+ ) ;
855+ } ) ;
856+ } ) ;
0 commit comments