@@ -119,3 +119,103 @@ suite('StatementSync.prototype.setAllowUnknownNamedParameters()', () => {
119119 } ) ;
120120 } ) ;
121121} ) ;
122+
123+ suite ( 'options.allowUnknownNamedParameters' , ( ) => {
124+ test ( 'unknown named parameters are allowed when input is true' , ( t ) => {
125+ const db = new DatabaseSync ( ':memory:' ) ;
126+ t . after ( ( ) => { db . close ( ) ; } ) ;
127+ const setup = db . exec (
128+ 'CREATE TABLE data(key INTEGER, val INTEGER) STRICT;'
129+ ) ;
130+ t . assert . strictEqual ( setup , undefined ) ;
131+ const stmt = db . prepare (
132+ 'INSERT INTO data (key, val) VALUES ($k, $v)' ,
133+ { allowUnknownNamedParameters : true }
134+ ) ;
135+ const params = { $a : 1 , $b : 2 , $k : 42 , $y : 25 , $v : 84 , $z : 99 } ;
136+ t . assert . deepStrictEqual (
137+ stmt . run ( params ) ,
138+ { changes : 1 , lastInsertRowid : 1 } ,
139+ ) ;
140+ } ) ;
141+
142+ test ( 'unknown named parameters throw when input is false' , ( t ) => {
143+ const db = new DatabaseSync ( ':memory:' ) ;
144+ t . after ( ( ) => { db . close ( ) ; } ) ;
145+ const setup = db . exec (
146+ 'CREATE TABLE data(key INTEGER, val INTEGER) STRICT;'
147+ ) ;
148+ t . assert . strictEqual ( setup , undefined ) ;
149+ const stmt = db . prepare (
150+ 'INSERT INTO data (key, val) VALUES ($k, $v)' ,
151+ { allowUnknownNamedParameters : false }
152+ ) ;
153+ const params = { $a : 1 , $b : 2 , $k : 42 , $y : 25 , $v : 84 , $z : 99 } ;
154+ t . assert . throws ( ( ) => {
155+ stmt . run ( params ) ;
156+ } , {
157+ code : 'ERR_INVALID_STATE' ,
158+ message : / U n k n o w n n a m e d p a r a m e t e r ' \$ a ' / ,
159+ } ) ;
160+ } ) ;
161+
162+ test ( 'unknown named parameters throws error by default' , ( t ) => {
163+ const db = new DatabaseSync ( ':memory:' ) ;
164+ t . after ( ( ) => { db . close ( ) ; } ) ;
165+ const setup = db . exec (
166+ 'CREATE TABLE data(key INTEGER, val INTEGER) STRICT;'
167+ ) ;
168+ t . assert . strictEqual ( setup , undefined ) ;
169+ const stmt = db . prepare ( 'INSERT INTO data (key, val) VALUES ($k, $v)' ) ;
170+ const params = { $a : 1 , $b : 2 , $k : 42 , $y : 25 , $v : 84 , $z : 99 } ;
171+ t . assert . throws ( ( ) => {
172+ stmt . run ( params ) ;
173+ } , {
174+ code : 'ERR_INVALID_STATE' ,
175+ message : / U n k n o w n n a m e d p a r a m e t e r ' \$ a ' / ,
176+ } ) ;
177+ } ) ;
178+
179+ test ( 'throws when option is not a boolean' , ( t ) => {
180+ const db = new DatabaseSync ( ':memory:' ) ;
181+ t . after ( ( ) => { db . close ( ) ; } ) ;
182+ const setup = db . exec (
183+ 'CREATE TABLE data(key INTEGER PRIMARY KEY, val INTEGER) STRICT;'
184+ ) ;
185+ t . assert . strictEqual ( setup , undefined ) ;
186+ t . assert . throws ( ( ) => {
187+ db . prepare (
188+ 'INSERT INTO data (key, val) VALUES ($k, $v)' ,
189+ { allowUnknownNamedParameters : 'true' }
190+ ) ;
191+ } , {
192+ code : 'ERR_INVALID_ARG_TYPE' ,
193+ message : / T h e " o p t i o n s \. a l l o w U n k n o w n 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 / ,
194+ } ) ;
195+ } ) ;
196+
197+ test ( 'setAllowUnknownNamedParameters can override prepare option' , ( t ) => {
198+ const db = new DatabaseSync ( ':memory:' ) ;
199+ t . after ( ( ) => { db . close ( ) ; } ) ;
200+ const setup = db . exec (
201+ 'CREATE TABLE data(key INTEGER, val INTEGER) STRICT;'
202+ ) ;
203+ t . assert . strictEqual ( setup , undefined ) ;
204+ const stmt = db . prepare (
205+ 'INSERT INTO data (key, val) VALUES ($k, $v)' ,
206+ { allowUnknownNamedParameters : true }
207+ ) ;
208+ const params = { $a : 1 , $b : 2 , $k : 42 , $y : 25 , $v : 84 , $z : 99 } ;
209+ t . assert . deepStrictEqual (
210+ stmt . run ( params ) ,
211+ { changes : 1 , lastInsertRowid : 1 } ,
212+ ) ;
213+ t . assert . strictEqual ( stmt . setAllowUnknownNamedParameters ( false ) , undefined ) ;
214+ t . assert . throws ( ( ) => {
215+ stmt . run ( params ) ;
216+ } , {
217+ code : 'ERR_INVALID_STATE' ,
218+ message : / U n k n o w n n a m e d p a r a m e t e r ' \$ a ' / ,
219+ } ) ;
220+ } ) ;
221+ } ) ;
0 commit comments