SQLitePool

sqlite~ SQLitePool

new SQLitePool(urlOrPath, optsopt, numReadersopt)

SQLite connection pool (1 writer + N readers)

Example
var { SQLitePool } = require("sigma/sqlite");
var pool = new SQLitePool("./pool.db", { readers: 2, wal: true });
pool.withWriter(db => db.run("INSERT INTO t(name) VALUES(?)", ["pool"]));
var rows = pool.withReader(db => db.all("SELECT * FROM t"));
print(JSON.stringify(rows));
pool.close();
Parameters:
string urlOrPath

Database path or JDBC/URI

Object opts <optional>
Properties
number readers <optional>
2

Number of reader connections

boolean wal <optional>
false

Enable WAL on writer after open

number numReaders <optional>

(Deprecated) use opts.readers instead

close() → {void}

Close all pooled connections.

Example
var pool = new SQLitePool("./pool.db", { readers: 1 });
// ... use pool ...
pool.close();
Returns:
void

withReader(fn, lockMsopt) → {*}

Borrow a reader (round-robin); if all readers busy, fallback to writer.

Example
var pool = new SQLitePool("./pool.db", { readers: 2 });
var list = pool.withReader(db => db.all("SELECT name FROM sqlite_master WHERE type='table'"));
print(JSON.stringify(list));
Parameters:
function fn

Function to execute with reader.

number lockMs <optional>
15000

Lock wait timeout ms.

Returns:
*

Function result.

withWriter(fn, lockMsopt) → {*}

Execute function with writer connection.

Example
var pool = new SQLitePool("./pool.db", { readers: 1 });
pool.withWriter(db => {
  db.exec("CREATE TABLE IF NOT EXISTS logs(msg TEXT)");
  db.run("INSERT INTO logs(msg) VALUES(?)", ["Writer acquired"]);
});
Parameters:
function fn

Function to execute with writer.

number lockMs <optional>
30000

Lock wait timeout ms.

Throws:
Error

On writer lock timeout.

Returns:
*

Function result.