An open API service indexing awesome lists of open source software.

https://github.com/webreflection/sqlite-tag-spawned

Same as sqlite-tag but without the native sqlite3 module dependency
https://github.com/webreflection/sqlite-tag-spawned

Last synced: about 1 year ago
JSON representation

Same as sqlite-tag but without the native sqlite3 module dependency

Awesome Lists containing this project

README

          

# sqlite-tag-spawned

[![build status](https://github.com/WebReflection/sqlite-tag-spawned/actions/workflows/node.js.yml/badge.svg)](https://github.com/WebReflection/sqlite-tag-spawned/actions) [![Coverage Status](https://coveralls.io/repos/github/WebReflection/sqlite-tag-spawned/badge.svg?branch=main)](https://coveralls.io/github/WebReflection/sqlite-tag-spawned?branch=main)

**Social Media Photo by [Tomas Kirvėla](https://unsplash.com/@tomkirvela) on [Unsplash](https://unsplash.com/)**

The same [sqlite-tag](https://github.com/WebReflection/sqlite-tag#readme) ease but without the native [sqlite3](https://www.npmjs.com/package/sqlite3) dependency, aiming to replace [dblite](https://github.com/WebReflection/dblite#readme).

```js
import SQLiteTagSpawned from 'sqlite-tag-spawned';
// const SQLiteTagSpawned = require('sqlite-tag-spawned');

const {query, get, all, raw, transaction} = SQLiteTagSpawned('./db.sql');

// single query as any info
console.log(await query`.databases`);

// single query as SQL
await query`CREATE TABLE IF NOT EXISTS names (
id INTEGER PRIMARY KEY,
name TEXT
)`;

// transaction (requires .commit() to execute)
const populate = transaction();
for (let i = 0; i < 2; i++)
populate`INSERT INTO names (name) VALUES (${'Name' + i})`;
await populate.commit();

// get single row (works with LIMIT 1 too, of course)
await get`SELECT name FROM names`;
// { name: 'Name0' }

// get all results, if any, or an empty array
await all`SELECT * FROM names`;
// [ { id: 1, name: 'Name0' }, { id: 2, name: 'Name1' } ]

// use the IN clause through arrays
const list = ['Name 0', 'Name 1'];
await all`SELECT * FROM names WHERE name IN (${list})`;
```

### Differently from dblite

* requires **SQLite 3.33** or higher (it uses the `-json` output 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+

## API: SQLiteTagSpawned(fileName[, options])

While the `fileName` is just a string pointing at the db file or the string `:memory:`, optional options can contain the following fields:

* `readonly` to run queries in read only mode
* `bin` to specify a different `sqlite3` executable
* `timeout` to drop the spawned process after *N* milliseconds
* `persistent` to open a DB in persistent mode (kept alive spawned command)
* `exec` to specify a different way to execute spawned process and results, mostly used for internal purpose