fcoin/lib/db/ldb.js
2017-07-31 18:21:02 -07:00

101 lines
1.8 KiB
JavaScript

/**
* ldb.js - database backend for bcoin
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
* Copyright (c) 2014-2017, Christopher Jeffrey (MIT License).
* https://github.com/bcoin-org/bcoin
*/
'use strict';
const assert = require('assert');
const LowlevelUp = require('./lowlevelup');
const backends = require('./backends');
/**
* Create a database.
* @alias module:db.LDB
* @param {Object} options
* @returns {LowlevelUp}
*/
function LDB(options) {
const result = LDB.getBackend(options);
const backend = result.backend;
const location = result.location;
return new LowlevelUp(backend, location, options);
}
/**
* Get database name and extension based on options.
* @param {String} db
* @returns {Object}
*/
LDB.getName = function getName(db) {
let name, ext;
if (!db)
db = 'memory';
switch (db) {
case 'ldb':
case 'leveldb':
case 'leveldown':
name = 'leveldown';
ext = 'ldb';
break;
case 'rdb':
case 'rocksdb':
case 'rocksdown':
name = 'rocksdown';
ext = 'rdb';
break;
case 'mdb':
case 'lmdb':
name = 'lmdb';
ext = 'mdb';
break;
case 'mem':
case 'memory':
case 'rbt':
name = 'memory';
ext = 'mem';
break;
default:
name = db;
ext = 'db';
break;
}
return [name, ext];
};
/**
* Get target backend and location.
* @param {Object} options
* @returns {Object}
*/
LDB.getBackend = function getBackend(options) {
const [name, ext] = LDB.getName(options.db);
const backend = backends.get(name);
let location = options.location;
if (typeof location !== 'string') {
assert(name === 'memory', 'Location required.');
location = 'memory';
}
return {
backend: backend,
location: `${location}.${ext}`
};
};
/*
* Expose
*/
module.exports = LDB;