@@ -240,6 +240,36 @@ suite('StatementSync.prototype.run()', () => {
|
240 | 240 | stmt.run({ k: 3, v: 30 }), { changes: 1, lastInsertRowid: 3 } |
241 | 241 | ); |
242 | 242 | }); |
| 243 | + |
| 244 | +test('SQLite defaults unbound ?NNN parameters', (t) => { |
| 245 | +const db = new DatabaseSync(nextDb()); |
| 246 | +t.after(() => { db.close(); }); |
| 247 | +const setup = db.exec( |
| 248 | +'CREATE TABLE data(key INTEGER PRIMARY KEY, val INTEGER NOT NULL) STRICT;' |
| 249 | +); |
| 250 | +t.assert.strictEqual(setup, undefined); |
| 251 | +const stmt = db.prepare('INSERT INTO data (key, val) VALUES (?1, ?3)'); |
| 252 | + |
| 253 | +t.assert.throws(() => { |
| 254 | +stmt.run(1); |
| 255 | +}, { |
| 256 | +code: 'ERR_SQLITE_ERROR', |
| 257 | +message: 'NOT NULL constraint failed: data.val', |
| 258 | +errcode: 1299, |
| 259 | +errstr: 'constraint failed', |
| 260 | +}); |
| 261 | +}); |
| 262 | + |
| 263 | +test('binds ?NNN params by position', (t) => { |
| 264 | +const db = new DatabaseSync(nextDb()); |
| 265 | +t.after(() => { db.close(); }); |
| 266 | +const setup = db.exec( |
| 267 | +'CREATE TABLE data(key INTEGER PRIMARY KEY, val INTEGER NOT NULL) STRICT;' |
| 268 | +); |
| 269 | +t.assert.strictEqual(setup, undefined); |
| 270 | +const stmt = db.prepare('INSERT INTO data (key, val) VALUES (?1, ?2)'); |
| 271 | +t.assert.deepStrictEqual(stmt.run(1, 2), { changes: 1, lastInsertRowid: 1 }); |
| 272 | +}); |
243 | 273 | }); |
244 | 274 | |
245 | 275 | suite('StatementSync.prototype.sourceSQL', () => { |
|