mirror of
https://github.com/denoland/deno.git
synced 2025-09-26 12:19:12 +00:00
fix(ext/node): Fix Database#exec
should return undefined (#29368)
This commit is contained in:
parent
5a8c0a23db
commit
ff2354be0b
7 changed files with 87 additions and 10 deletions
12
Cargo.lock
generated
12
Cargo.lock
generated
|
@ -1754,9 +1754,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "deno_core"
|
||||
version = "0.347.0"
|
||||
version = "0.348.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d75ae5562f6ad750bc2007e7b1032ae37115a83fe58b6fbc77331c47744956cc"
|
||||
checksum = "7902cd1dde9e8ffc953428933f37f9b943dc123265709220cded6277946cadf7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"az",
|
||||
|
@ -2440,9 +2440,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "deno_ops"
|
||||
version = "0.223.0"
|
||||
version = "0.224.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c5adc7f0795c7547f1b560a07aaea484e8f9cd035318348c6bfd084e0c42dce8"
|
||||
checksum = "55db7994eccbdad457ca5091c545af712234c8f6e4389cadb2a24d2ecbbe7e89"
|
||||
dependencies = [
|
||||
"indexmap 2.8.0",
|
||||
"proc-macro-rules",
|
||||
|
@ -7472,9 +7472,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "serde_v8"
|
||||
version = "0.256.0"
|
||||
version = "0.257.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "69d69b4e574a9ec6bd0222463e50cf8531986d9c657543888e029d54d909b283"
|
||||
checksum = "7c57c63e9203f1d1383df0943e080955999e984e96ecc9557c3bae48e483edfa"
|
||||
dependencies = [
|
||||
"deno_error",
|
||||
"num-bigint",
|
||||
|
|
|
@ -55,7 +55,7 @@ repository = "https://github.com/denoland/deno"
|
|||
|
||||
[workspace.dependencies]
|
||||
deno_ast = { version = "=0.47.0", features = ["transpiling"] }
|
||||
deno_core = { version = "0.347.0" }
|
||||
deno_core = { version = "0.348.0" }
|
||||
|
||||
deno_cache_dir = "=0.20.1"
|
||||
deno_config = { version = "=0.54.2", features = ["workspace"] }
|
||||
|
|
|
@ -271,6 +271,7 @@ impl DatabaseSync {
|
|||
//
|
||||
// This method is a wrapper around sqlite3_exec().
|
||||
#[fast]
|
||||
#[undefined]
|
||||
fn exec(&self, #[string] sql: &str) -> Result<(), SqliteError> {
|
||||
let db = self.conn.borrow();
|
||||
let db = db.as_ref().ok_or(SqliteError::InUse)?;
|
||||
|
|
|
@ -979,6 +979,7 @@
|
|||
"test-socket-write-after-fin-error.js",
|
||||
"test-source-map-enable.js",
|
||||
"test-spawn-cmd-named-pipe.js",
|
||||
"test-sqlite-transactions.js",
|
||||
"test-stdin-from-file-spawn.js",
|
||||
"test-stdin-hang.js",
|
||||
"test-stdin-pipe-large.js",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!-- deno-fmt-ignore-file -->
|
||||
# Remaining Node Tests
|
||||
|
||||
1173 tests out of 3993 have been ported from Node 23.9.0 (29.38% ported, 71.15% remaining).
|
||||
1174 tests out of 3993 have been ported from Node 23.9.0 (29.40% ported, 71.12% remaining).
|
||||
|
||||
NOTE: This file should not be manually edited. Please edit `tests/node_compat/config.json` and run `deno task setup` in `tests/node_compat/runner` dir instead.
|
||||
|
||||
|
@ -2056,7 +2056,6 @@ NOTE: This file should not be manually edited. Please edit `tests/node_compat/co
|
|||
- [parallel/test-sqlite-named-parameters.js](https://github.com/nodejs/node/tree/v23.9.0/test/parallel/test-sqlite-named-parameters.js)
|
||||
- [parallel/test-sqlite-session.js](https://github.com/nodejs/node/tree/v23.9.0/test/parallel/test-sqlite-session.js)
|
||||
- [parallel/test-sqlite-statement-sync.js](https://github.com/nodejs/node/tree/v23.9.0/test/parallel/test-sqlite-statement-sync.js)
|
||||
- [parallel/test-sqlite-transactions.js](https://github.com/nodejs/node/tree/v23.9.0/test/parallel/test-sqlite-transactions.js)
|
||||
- [parallel/test-sqlite-typed-array-and-data-view.js](https://github.com/nodejs/node/tree/v23.9.0/test/parallel/test-sqlite-typed-array-and-data-view.js)
|
||||
- [parallel/test-sqlite.js](https://github.com/nodejs/node/tree/v23.9.0/test/parallel/test-sqlite.js)
|
||||
- [parallel/test-stack-size-limit.js](https://github.com/nodejs/node/tree/v23.9.0/test/parallel/test-stack-size-limit.js)
|
||||
|
|
73
tests/node_compat/test/parallel/test-sqlite-transactions.js
Normal file
73
tests/node_compat/test/parallel/test-sqlite-transactions.js
Normal file
|
@ -0,0 +1,73 @@
|
|||
// deno-fmt-ignore-file
|
||||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 23.9.0
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'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(), []);
|
||||
});
|
||||
});
|
|
@ -7,7 +7,10 @@ const tempDir = Deno.makeTempDirSync();
|
|||
Deno.test("[node/sqlite] in-memory databases", () => {
|
||||
const db1 = new DatabaseSync(":memory:");
|
||||
const db2 = new DatabaseSync(":memory:");
|
||||
db1.exec("CREATE TABLE data(key INTEGER PRIMARY KEY);");
|
||||
assertEquals(
|
||||
db1.exec("CREATE TABLE data(key INTEGER PRIMARY KEY);"),
|
||||
undefined,
|
||||
);
|
||||
db1.exec("INSERT INTO data (key) VALUES (1);");
|
||||
|
||||
db2.exec("CREATE TABLE data(key INTEGER PRIMARY KEY);");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue