Social Media Photo by Tomas Kirvėla on Unsplash
The same sqlite-tag ease but without the native sqlite3 dependency, aiming to replace dblite.
importSQLiteTagSpawnedfrom'sqlite-tag-spawned';// const SQLiteTagSpawned = require('sqlite-tag-spawned');const{query, get, all, raw, transaction}=SQLiteTagSpawned('./db.sql');// single query as any infoconsole.log(awaitquery`.databases`);// single query as SQLawaitquery`CREATE TABLE IF NOT EXISTS names ( id INTEGER PRIMARY KEY, name TEXT)`;// transaction (requires .commit() to execute)constpopulate=transaction();for(leti=0;i<2;i++)populate`INSERT INTO names (name) VALUES (${'Name'+i})`;awaitpopulate.commit();// get single row (works with LIMIT 1 too, of course)awaitget`SELECT name FROM names`;// { name: 'Name0' }// get all results, if any, or an empty arrayawaitall`SELECT * FROM names`;// [ { id: 1, name: 'Name0' }, { id: 2, name: 'Name1' } ]// use the IN clause through arraysconstlist=['Name 0','Name 1'];awaitall`SELECT * FROM names WHERE name IN (${list})`;- requires SQLite 3.33 or higher (it uses the
-jsonoutput mode) - each query is a spawn call except for transactions, grouped as single spawned query
- performance still similar to sqlite3 native module
:memory:database is based on an always same, yet runtime-once created temporary file, and it requires NodeJS 16+
While the fileName is just a string pointing at the db file or the string :memory:, optional options can contain the following fields:
readonlyto run queries in read only modebinto specify a differentsqlite3executabletimeoutto drop the spawned process after N millisecondspersistentto open a DB in persistent mode (kept alive spawned command)execto specify a different way to execute spawned process and results, mostly used for internal purpose