UNPKG

node-db-migrator

Version:

a node database migrator

59 lines (51 loc) 1.44 kB
var fs = require('fs'); var path = require('path'); var mkdirpSync = require('mkdirp').sync; var sqlite3 = require('sqlite3'); var checkExists = require('./utils').checkExists; var config = require('../config'); var SQLITE_DB_NAME = require('../constant').SQLITE_DB_NAME; var CHANGELOG_TABLE_NAME = require('../constant').CHANGELOG_TABLE_NAME; var TOKEN_TABLE_NAME = require('../constant').TOKEN_TABLE_NAME; var createTableSqls = [ 'CREATE TABLE IF NOT EXISTS ' + CHANGELOG_TABLE_NAME + ' (' + 'name TEXT UNIQUE NOT NULL,' + 'migrations_dir TEXT NOT NULL,' + 'run_on TEXT NOT NULL' + ');', 'CREATE TABLE IF NOT EXISTS ' + TOKEN_TABLE_NAME + ' (' + 'name TEXT UNIQUE NOT NULL,' + 'token TEXT NOT NULL,' + 'expired_at TEXT NOT NULL' + ');' ]; var inited = false; var db; exports.init = function(callback) { if (inited) { callback(db); return; }; var dir = config.migrationsDatabase; var dbPath = path.join(dir, SQLITE_DB_NAME); if (!checkExists(dbPath)) { mkdirpSync(dir); fs.writeFileSync(dbPath, ''); } db = new sqlite3.Database(dbPath); db.serialize(function() { createTableSqls.forEach(function(sql, index) { if (index === createTableSqls.length - 1) { db.run(sql, function() { inited = true; callback(db); }); } else { db.run(sql); } }); }); }; exports.close = function() { db.close(); };