mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
7fea0108d5
These objects are dictionaries, and a query can return columns with special names like `__proto__` (which would be ignored without this change). Also construct the object by passing vectors of properties for better performance and improve error handling by using `MaybeLocal`. PR-URL: https://github.com/nodejs/node/pull/54350 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
68 lines
1.9 KiB
JavaScript
68 lines
1.9 KiB
JavaScript
// Flags: --experimental-sqlite
|
|
'use strict';
|
|
require('../common');
|
|
const tmpdir = require('../common/tmpdir');
|
|
const { join } = require('node:path');
|
|
const { DatabaseSync } = require('node:sqlite');
|
|
const { suite, test } = require('node:test');
|
|
let cnt = 0;
|
|
|
|
tmpdir.refresh();
|
|
|
|
function nextDb() {
|
|
return join(tmpdir.path, `database-${cnt++}.db`);
|
|
}
|
|
|
|
suite('manual transactions', () => {
|
|
test('a transaction is committed', (t) => {
|
|
const db = new DatabaseSync(nextDb());
|
|
t.after(() => { db.close(); });
|
|
const setup = db.exec(`
|
|
CREATE TABLE data(
|
|
key INTEGER PRIMARY KEY
|
|
) STRICT;
|
|
`);
|
|
t.assert.strictEqual(setup, undefined);
|
|
t.assert.deepStrictEqual(
|
|
db.prepare('BEGIN').run(),
|
|
{ changes: 0, lastInsertRowid: 0 },
|
|
);
|
|
t.assert.deepStrictEqual(
|
|
db.prepare('INSERT INTO data (key) VALUES (100)').run(),
|
|
{ changes: 1, lastInsertRowid: 100 },
|
|
);
|
|
t.assert.deepStrictEqual(
|
|
db.prepare('COMMIT').run(),
|
|
{ changes: 1, lastInsertRowid: 100 },
|
|
);
|
|
t.assert.deepStrictEqual(
|
|
db.prepare('SELECT * FROM data').all(),
|
|
[{ __proto__: null, key: 100 }],
|
|
);
|
|
});
|
|
|
|
test('a transaction is rolled back', (t) => {
|
|
const db = new DatabaseSync(nextDb());
|
|
t.after(() => { db.close(); });
|
|
const setup = db.exec(`
|
|
CREATE TABLE data(
|
|
key INTEGER PRIMARY KEY
|
|
) STRICT;
|
|
`);
|
|
t.assert.strictEqual(setup, undefined);
|
|
t.assert.deepStrictEqual(
|
|
db.prepare('BEGIN').run(),
|
|
{ changes: 0, lastInsertRowid: 0 },
|
|
);
|
|
t.assert.deepStrictEqual(
|
|
db.prepare('INSERT INTO data (key) VALUES (100)').run(),
|
|
{ changes: 1, lastInsertRowid: 100 },
|
|
);
|
|
t.assert.deepStrictEqual(
|
|
db.prepare('ROLLBACK').run(),
|
|
{ changes: 1, lastInsertRowid: 100 },
|
|
);
|
|
t.assert.deepStrictEqual(db.prepare('SELECT * FROM data').all(), []);
|
|
});
|
|
});
|