1.0.0 • Published 2 years ago

aa-sqlite3 v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

aa-sqlite3 - npm

aa-sqlite3 (Async Await SQLite3) is simple awaitable wrapper for sqlite3 in async function.

INSTALL:

$ npm install aa-sqlite3 sqlite3

PREPARE:

const sqlite3 = require('sqlite3').verbose();
const aaSqlite3 = require('aa-sqlite3');

const db = aaSqlite3(new sqlite3.Database('./test.db'));

or

const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('./test.db');

const aaSqlite3 = require('aa-sqlite3');
aaSqlite3(db);

EXAMPLE:

Simple example:

'use strict';

const sqlite3 = require('sqlite3').verbose();
const aaSqlite3 = require('aa-sqlite3');

(async () => {
  // Simple example:
  const db = aaSqlite3(new sqlite3.Database('./test.db'));

  // db.on('trace', (sql) => console.log('trace:', sql));
  db.on('profile', (sql, msec) => console.log('profile:', sql, msec, 'msec'));

  await db.exec('DROP TABLE IF EXISTS users');
  await db.exec('CREATE TABLE IF NOT EXISTS users(name TEXT UNIQUE, age INTEGER)');

  await db.run('INSERT INTO users(name, age) VALUES($name, $age)',
                { $name: 'Kaz', $age: 57 });
  await db.run('INSERT INTO users(name, age) VALUES(?, ?)',
                'Leo', 13);

  const rows = await db.all('SELECT * FROM users');
  console.log('db.all: =>', rows.length, 'rows:', rows);

  const row = await db.get('SELECT * FROM users WHERE name = $name',
                            { $name: 'Leo' });
  console.log('db.get: ->', row);

  const nRows = await db.each('SELECT * FROM users',
    (err, row) => console.log('db.each: ->', err ? err : row));
  console.log('db.each: =>', nRows, 'rows');

  const st = await db.prepare('SELECT * FROM users WHERE name = ?');
  console.log('st.get: ->', await st.get('Leo'));
  console.log('st.get: ->', await st.get('Kaz'));
  await st.finalize();

  console.log('db.get(all): =>', await Promise.all([
    db.get('SELECT * FROM users WHERE name = $name', { $name: 'Leo' }),
    db.get('SELECT * FROM users WHERE name = ?', 'Kaz'),
  ]));

  await db.close();
})().catch(console.error);

Other example:

'use strict';

const sqlite3 = require('sqlite3').verbose();
const aaSqlite3 = require('aa-sqlite3');

(async () => {
  // Example with options: trace, profile, etc...
  const db = aaSqlite3(new sqlite3.Database('./test.db'),
    { // options
      trace: (sql, method, ctorName) =>
        console.log(`  trace: ${ctorName}.${method}:`, sql),
      profile: (sql, msec, method, ctorName) =>
        console.log(`profile: ${ctorName}.${method}:`, sql, msec, 'msec'),
      // usePromise: true, // default: false
      asyncMethods: [ // awaitable methods
        'run', 'exec', 'get', 'all', 'each',
        'close', 'map', 'loadExtension',
        'bind', 'reset', 'finalize',
      ],
      traceMethods: [ // traceable methods for trace and profile
        'run', 'exec', 'get', 'all', 'each', 'map',
      ],
    });
  // db.on('trace', (sql) => console.log('trace:', sql));
  // db.on('profile', (sql, msec) => console.log('profile:', sql, msec, 'msec'));

  await db.exec('DROP TABLE IF EXISTS users');
  await db.exec('CREATE TABLE IF NOT EXISTS users' +
                '(name TEXT PRIMARY KEY, age INTEGER) WITHOUT rowid');
  await db.exec('CREATE INDEX IF NOT EXISTS users_ix01 ON users(name, age)');

  await db.exec('BEGIN IMMEDIATE');
  await db.run('INSERT INTO users(name, age) VALUES(?, ?)', 'Kaz', 57);
  await db.run('INSERT INTO users(name, age) VALUES(?, ?)', 'Leo', 13);
  await db.exec('COMMIT');

  const rows = await db.all('SELECT * FROM users');
  console.log('         Database.all: =>', rows.length, 'rows:', rows);

  const row = await db.get('SELECT * FROM users WHERE name = $name',
                            { $name: 'Leo' });
  console.log('         Database.get: ->', row);

  const nRow = await db.each('SELECT * FROM users', (err, row) => {
    if (err) console.log('each:', err);
    else console.log('         Database.each: ->', row);
    db.interrupt(); // if you want to abort long transaction
  });
  console.log('         Database.each: =>', nRow, 'rows');

  const map = await db.map('SELECT * FROM users');
  console.log('         Database.map: #>', map);

  {
    await db.exec('BEGIN IMMEDIATE');
    await db.run('DELETE FROM users WHERE name = ?', 'Kaz');
    await db.run('DELETE FROM users WHERE name = ?', 'Leo');

    const st = await db.prepare('INSERT INTO users(name, age) VALUES($name, $age)');
    await st.run({ $name: 'Taro', $age: 30 });
    await st.run({ $name: 'Hanako', $age: 20 });
    await st.finalize();
    await db.exec('COMMIT');
  }

  {
    const st = await db.prepare('SELECT * FROM users');
    console.log('         Statement.all: =>', await st.all());
    await st.finalize();
  }

  {
    const st = await db.prepare('SELECT * FROM users WHERE name = $name');
    console.log('         Statement.get: ->', await st.get({ $name: 'Taro' }));
    console.log('         Statement.get: ->', await st.get({ $name: 'Hanako' }));
    await st.finalize();
  }

  {
    const st = await db.prepare('SELECT * FROM users WHERE name = $name');
    await st.bind({ $name: 'Taro' });
    console.log('         Statement.all: =>', await st.all());
    await st.bind({ $name: 'Hanako' });
    console.log('         Statement.all: =>', await st.all());
    await st.finalize();
  }

  {
    const st = await db.prepare('SELECT * FROM users WHERE name = @name');
    console.log('         Statement.get: ->', await st.get({ '@name': 'Taro' }));
    await st.finalize();
  }

  {
    const st = await db.prepare('SELECT * FROM users WHERE name = :name');
    console.log('         Statement.get: ->', await st.get({ ':name': 'Hanako' }));
    await st.finalize();
  }

  {
    const st = await db.prepare('SELECT * FROM users WHERE name = ?');
    console.log('         Statement.get: ->', await st.get('Leo'), '(not found!)');
    await st.finalize();
  }

  const all = await Promise.all([
    db.get('SELECT * FROM users WHERE name = ?', 'Taro'),
    db.get('SELECT * FROM users WHERE name = ?', 'Hanako'),
  ]);
  console.log('         Database.get: =>', all);

  console.log('         Database.close');
  await db.close();
  console.log('         Example.end');

  // aaSqlite3({}, { getActualOptions: (opts) => console.log('default:', opts) });
})().catch(console.error);

FORMAT:

aaSqlite3 (object, options) - replace all methods awaitable (for Database and Statement)

  • object: sqlite3 Database object (instance)

  • options: options for aaSqlite3

    • key "trace": trace function (call before method)
      (sql, method, constructorName) => void

      • sql: sql string and parameters
      • method: "run", "exec", "get", "all", and so on
      • constructorName: "Database" or "Statement"
    • key "profile": profile function (call after method)
      (sql, msec, method, constructorName) => void

      • sql: sql string and parameters
      • msec: milliseconds
      • method: "run", "exec", "get", "all", and so on
      • constructorName: "Database" or "Statement"
    • key "asyncMethods": array of awaitable methods string
      default:
      'run', 'exec', 'get', 'all', 'each',
      'close', 'map', 'loadExtension',
      'bind', 'reset', 'finalize',

    • key "traceMethods": array of traceable methods string for trace and profile
      default:
      'run', 'exec', 'get', 'all', 'each', 'map',

    • key "usePromise": use Promise or else,
      if true: use native Promise or,
      if false: simple thenable object

    • key "getActualOptions": get actual options object
      (options) => void

GIT REPOSITORY

https://github.com/LightSpeedWorks/aa-sqlite3

LICENSE:

MIT

1.0.0

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago

0.0.0

2 years ago