UNPKG

@whi/dbv

Version:

An agnostic database versioning tool designed for predictable upgrading/downgrading of database schema and content

117 lines (100 loc) 2.61 kB
const path = require('path'); const log = require('@whi/stdlog')(path.basename( __filename ), { level: process.env.DEBUG_LEVEL || "fatal", }); const prompter = require('@whi/prompter'); const knex = require('knex'); const waitUntil = require('async-wait-until'); const sprintf = require('sprintf-js').sprintf; let conn; process.on("unhandledRejection", (reason, p) => { log.fatal("Unhandled Rejection at Promise %s for reason: %s", p, reason); process.exit(1); }); const db_filepath = "./tests.sqlite"; const config = { context: async function () { await waitUntil(() => { return conn !== undefined; }, 5000, 100 ); return conn; }, contextID: async function () { return db_filepath; }, teardown: async function () { log.debug("Closing db connection pool"); conn.destroy(); }, currentVersion: async function () { var rows = await conn("metadata") .where("name", "version"); return rows[0].value; }, setVersion: async function ( version ) { await conn("metadata") .where("name", "version") .update("value", version); const v = version.split(".").map(function(n) { try { return parseInt(n); } catch (_) { return n; } }); await conn("metadata") .where("name", "version_info") .update("value", JSON.stringify({ "major": v[0], "minor": v[1], "patch": v[2], }) ); }, isInstalled: async function () { log.debug("Check if installed"); return await conn.schema.hasTable( "metadata" ); }, install: async function () { log.debug("Creating table"); await conn.schema.createTable("metadata", function (table) { table.increments("metadata_id").primary(); table.string("name", 255); table.text("value", "mediumtext"); table.specificType("created", "datetime2").defaultTo( conn.fn.now() ); }); log.debug("Inserting version rows"); await conn("metadata").insert([ { "name": "version", "value": "0.0.0", }, { "name": "version_info", "value": JSON.stringify({ "major": 0, "minor": 0, "patch": 0, }), } ]); return true; }, uninstall: async function () { log.info("Dropping 'metadata' table"); const resp = await conn.schema.dropTable("metadata"); log.info("Dropped table: %s", resp); return true; }, }; async function connect() { console.log("Connecting to database..."); conn = knex({ "client": "sqlite3", "connection": { "filename": db_filepath, }, "useNullAsDefault": true, }); } connect(); module.exports = config;