mirror of
https://github.com/nodejs/node.git
synced 2026-11-09 15:11:11 -05:00
Co-authored-by: Asroy Cristian Sitorus <asroycristiansitorus@gmail.com> Signed-off-by: Matteo Collina <hello@matteocollina.com> PR-URL: https://github.com/nodejs/node/pull/64743 Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Edy Silva <edigleyssonsilva@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
40 lines
1.0 KiB
JavaScript
40 lines
1.0 KiB
JavaScript
'use strict';
|
|
|
|
const { skipIfSQLiteMissing } = require('../common');
|
|
skipIfSQLiteMissing();
|
|
const assert = require('node:assert');
|
|
const { test } = require('node:test');
|
|
const { DatabaseSync } = require('node:sqlite');
|
|
|
|
for (const method of ['all', 'get', 'run', 'iterate']) {
|
|
test(`database.close() from a UDF during statement.${method}()`, () => {
|
|
const db = new DatabaseSync(':memory:');
|
|
db.exec(`
|
|
CREATE TABLE data (value INTEGER);
|
|
INSERT INTO data VALUES (1), (2), (3);
|
|
`);
|
|
|
|
db.function('close_db', (value) => {
|
|
db.close();
|
|
return value;
|
|
});
|
|
|
|
const statement = db.prepare('SELECT close_db(value) FROM data');
|
|
assert.throws(() => {
|
|
if (method === 'iterate') {
|
|
for (const row of statement.iterate()) {
|
|
assert.ok(row);
|
|
}
|
|
} else {
|
|
statement[method]();
|
|
}
|
|
}, {
|
|
code: 'ERR_INVALID_STATE',
|
|
message: 'database cannot be closed while in a callback',
|
|
});
|
|
|
|
assert.strictEqual(db.isOpen, true);
|
|
db.close();
|
|
});
|
|
}
|