Skip to content

Commit 4dfcf1d

Browse files
authored
sqlite: persist enableDefensive() across reopen
`enableDefensive()` updated only the live connection, so after `close()` and `open()` the defensive flag went back to the value passed to the constructor. Store the new value in the open configuration so that `open()` applies it again. Signed-off-by: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Assisted-by: claude:opus-5.5 PR-URL: #66404 Fixes: #66403 Reviewed-By: Guilherme Araújo <arauujogui@gmail.com>
1 parent a0db728 commit 4dfcf1d

2 files changed

Lines changed: 21 additions & 0 deletions

File tree

‎src/node_sqlite.cc‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3550,6 +3550,7 @@ void Database::EnableDefensive(const FunctionCallbackInfo<Value>& args) {
35503550
enable,
35513551
&defensive_enabled);
35523552
CHECK_ERROR_OR_THROW(isolate, db, defensive_ret, SQLITE_OK, void());
3553+
db->open_config_.set_enable_defensive(enable);
35533554
}
35543555

35553556
void Database::LoadExtension(const FunctionCallbackInfo<Value>& args) {

‎test/parallel/test-sqlite-config.js‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,26 @@ test('defensive mode off after calling db.enableDefensive(false)', (t) => {
5353
t.assert.strictEqual(checkDefensiveMode(db), false);
5454
});
5555

56+
test('db.enableDefensive(true) persists across close() and open()', (t) => {
57+
const db = new Database(':memory:', {
58+
defensive: false
59+
});
60+
db.enableDefensive(true);
61+
db.close();
62+
db.open();
63+
t.assert.strictEqual(checkDefensiveMode(db), true);
64+
});
65+
66+
test('db.enableDefensive(false) persists across close() and open()', (t) => {
67+
const db = new Database(':memory:', {
68+
defensive: true
69+
});
70+
db.enableDefensive(false);
71+
db.close();
72+
db.open();
73+
t.assert.strictEqual(checkDefensiveMode(db), false);
74+
});
75+
5676
test('throws if options.defensive is provided but is not a boolean', (t) => {
5777
t.assert.throws(() => {
5878
new Database(':memory:', { defensive: 42 });

0 commit comments

Comments
 (0)