From 19e341c76099fa14ddf9db4b9adc48ca2093df8c Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Wed, 8 Jan 2025 12:47:40 +0000 Subject: [PATCH] Add support for Node.js integrated sqlite Available in Node.js 22.50 - see https://nodejs.org/api/sqlite.html Given the Node.js release timeline, I think it will be reasonable to switch to the integrated Node.js sqlite as the default, which will avoid all the npm install kerfuffle too. --- .github/workflows/ci.yml | 2 +- .../tiddlywiki/multiwikiserver/modules/store/sql-engine.js | 5 ++++- .../modules/store/tests-sql-tiddler-database.js | 4 ++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1dc98df1c..af030458e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,7 +6,7 @@ on: - tiddlywiki-com - multi-wiki-support env: - NODE_VERSION: "22" + NODE_VERSION: "23" jobs: test: runs-on: ubuntu-latest diff --git a/plugins/tiddlywiki/multiwikiserver/modules/store/sql-engine.js b/plugins/tiddlywiki/multiwikiserver/modules/store/sql-engine.js index 61d4fcacc..00d15edf3 100644 --- a/plugins/tiddlywiki/multiwikiserver/modules/store/sql-engine.js +++ b/plugins/tiddlywiki/multiwikiserver/modules/store/sql-engine.js @@ -24,7 +24,7 @@ function SqlEngine(options) { // Initialise the statement cache this.statements = Object.create(null); // Hashmap by SQL text of statement objects // Choose engine - this.engine = options.engine || "better"; // wasm | better + this.engine = options.engine || "node"; // node | wasm | better // Create the database file directories if needed if(options.databasePath) { $tw.utils.createFileDirectories(options.databasePath); @@ -33,6 +33,9 @@ function SqlEngine(options) { const databasePath = options.databasePath || ":memory:"; let Database; switch(this.engine) { + case "node": + ({ DatabaseSync: Database } = require("node:sqlite")); + break; case "wasm": ({ Database } = require("node-sqlite3-wasm")); break; diff --git a/plugins/tiddlywiki/multiwikiserver/modules/store/tests-sql-tiddler-database.js b/plugins/tiddlywiki/multiwikiserver/modules/store/tests-sql-tiddler-database.js index 13e25e94a..563f86bf5 100644 --- a/plugins/tiddlywiki/multiwikiserver/modules/store/tests-sql-tiddler-database.js +++ b/plugins/tiddlywiki/multiwikiserver/modules/store/tests-sql-tiddler-database.js @@ -13,6 +13,10 @@ if($tw.node) { /*global $tw: false */ "use strict"; +describe("SQL tiddler database with node built-in sqlite", function() { + runSqlDatabaseTests("node"); +}); + describe("SQL tiddler database with node-sqlite3-wasm", function() { runSqlDatabaseTests("wasm"); });