Comparing version 1.2.7 to 1.3.0
142
larvitdb.js
'use strict'; | ||
const events = require('events'), | ||
const topLogPrefix = 'larvitdb: larvitdb.js: ', | ||
events = require('events'), | ||
eventEmitter = new events.EventEmitter(), | ||
@@ -15,4 +16,93 @@ async = require('async'), | ||
// Wrap getConnection to log errors | ||
function getConnection(cb) { | ||
const logPrefix = topLogPrefix + 'getConnection() - '; | ||
exports.pool.getConnection(function (err, dbCon) { | ||
if (err) { | ||
log.error(logPrefix + 'Could not get connection, err: ' + err.message); | ||
return cb(err); | ||
} | ||
dbCon.org_beginTransaction = dbCon.beginTransaction; | ||
dbCon.org_commit = dbCon.commit; | ||
dbCon.org_query = dbCon.query; | ||
dbCon.org_rollback = dbCon.rollback; | ||
dbCon.beginTransaction = function beginTransaction(cb) { | ||
const subLogPrefix = logPrefix + 'beginTransaction() - '; | ||
dbCon.org_beginTransaction(function (err) { | ||
if (err) { | ||
log.error(subLogPrefix + err.message); | ||
return cb(err); | ||
} | ||
cb(err); | ||
}); | ||
}; | ||
dbCon.commit = function commit(cb) { | ||
const subLogPrefix = logPrefix + 'commit() - '; | ||
dbCon.org_commit(function (err) { | ||
if (err) { | ||
log.error(subLogPrefix + err.message); | ||
return cb(err); | ||
} | ||
cb(err); | ||
}); | ||
}; | ||
dbCon.query = function query(sql, dbFields, cb) { | ||
const subLogPrefix = logPrefix + 'query() - '; | ||
let startTime; | ||
if (typeof dbFields === 'function') { | ||
cb = dbFields; | ||
dbFields = []; | ||
} | ||
if ( ! dbFields) { | ||
dbFields = []; | ||
} | ||
startTime = process.hrtime(); | ||
dbCon.org_query(sql, dbFields, function (err, rows) { | ||
const queryTime = utils.hrtimeToMs(startTime, 4); | ||
log.debug(subLogPrefix + 'Ran SQL: "' + sql + '" with dbFields: ' + JSON.stringify(dbFields) + ' in ' + queryTime + 'ms'); | ||
if (err) { | ||
log.error(subLogPrefix + err.message, ', SQL: "' + err.sql + '"'); | ||
} | ||
cb(err, rows); | ||
}); | ||
}; | ||
dbCon.rollback = function rollback(cb) { | ||
const subLogPrefix = logPrefix + 'rollback() - '; | ||
dbCon.org_rollback(function (err) { | ||
if (err) { | ||
log.error(subLogPrefix + err.message); | ||
return cb(err); | ||
} | ||
cb(err); | ||
}); | ||
}; | ||
cb(err, dbCon); | ||
}); | ||
} | ||
// Wrap the query function to log database errors or slow running queries | ||
function query(sql, dbFields, options, cb) { | ||
const logPrefix = topLogPrefix + 'query() - '; | ||
try { | ||
@@ -39,20 +129,19 @@ ready(function() { | ||
if (options.retryNr === undefined) { options.retryNr = 0; } | ||
if (options.ignoreLongQueryWarning === undefined) { options.ignoreLongQueryWarning = false; } | ||
if (options.ignoreLongQueryWarning === undefined) { options.ignoreLongQueryWarning = true; } | ||
if (exports.pool === undefined) { | ||
let err = new Error('larvitdb: No pool configured. sql: "' + sql + '" dbFields: ' + JSON.stringify(dbFields)); | ||
log.error(err.message); | ||
cb(err); | ||
return; | ||
const err = new Error('No pool configured. sql: "' + sql + '" dbFields: ' + JSON.stringify(dbFields)); | ||
log.error(logPrefix + err.message); | ||
return cb(err); | ||
} | ||
startTime = process.hrtime(); | ||
startTime = process.hrtime(); | ||
exports.pool.query(sql, dbFields, function(err, rows, rowFields) { | ||
const queryTime = utils.hrtimeToMs(startTime, 4); | ||
const queryTime = utils.hrtimeToMs(startTime, 4); | ||
if (conf.longQueryTime !== false && conf.longQueryTime < queryTime && options.ignoreLongQueryWarning !== true) { | ||
log.warn('larvitdb: Ran SQL: "' + sql + '" with dbFields: ' + JSON.stringify(dbFields) + ' in ' + queryTime + 'ms'); | ||
log.warn(logPrefix + 'Ran SQL: "' + sql + '" with dbFields: ' + JSON.stringify(dbFields) + ' in ' + queryTime + 'ms'); | ||
} else { | ||
log.debug('larvitdb: Ran SQL: "' + sql + '" with dbFields: ' + JSON.stringify(dbFields) + ' in ' + queryTime + 'ms'); | ||
log.debug(logPrefix + 'Ran SQL: "' + sql + '" with dbFields: ' + JSON.stringify(dbFields) + ' in ' + queryTime + 'ms'); | ||
} | ||
@@ -69,3 +158,3 @@ | ||
if (options.retryNr <= conf.retries) { | ||
log.warn('larvitdb: Retrying database recoverable error: ' + err.message + ' retryNr: ' + options.retryNr + ' SQL: "' + sql + '" dbFields: ' + JSON.stringify(dbFields)); | ||
log.warn(logPrefix + 'Retrying database recoverable error: ' + err.message + ' retryNr: ' + options.retryNr + ' SQL: "' + sql + '" dbFields: ' + JSON.stringify(dbFields)); | ||
setTimeout(function() { | ||
@@ -77,10 +166,8 @@ query(sql, dbFields, {'retryNr': options.retryNr}, cb); | ||
log.error('larvitdb: Exhausted retries (' + options.retryNr + ') for database recoverable error: ' + err.message + ' SQL: "' + sql + '" dbFields: ' + JSON.stringify(dbFields)); | ||
cb(err); | ||
return; | ||
log.error(logPrefix + 'Exhausted retries (' + options.retryNr + ') for database recoverable error: ' + err.message + ' SQL: "' + err.sql + '" dbFields: ' + JSON.stringify(dbFields)); | ||
return cb(err); | ||
} | ||
log.error('larvitdb: Database error msg: ' + err.message + ', code: "' + err.code + '" SQL: "' + sql + '" dbFields: ' + JSON.stringify(dbFields)); | ||
cb(err); | ||
return; | ||
log.error(logPrefix + 'Database error msg: ' + err.message + ', code: "' + err.code + '" SQL: "' + err.sql + '" dbFields: ' + JSON.stringify(dbFields)); | ||
return cb(err); | ||
} | ||
@@ -92,3 +179,3 @@ | ||
} catch (err) { | ||
log.error('larvitdb: query() - Throwed error from database driver: ' + err.message); | ||
log.error(logPrefix + 'Throwed error from database driver: ' + err.message); | ||
cb(err); | ||
@@ -99,3 +186,3 @@ } | ||
function ready(cb) { | ||
if (dbSetup) { cb(); return; } | ||
if (dbSetup) return cb(); | ||
@@ -106,2 +193,4 @@ eventEmitter.once('checked', cb); | ||
function removeAllTables(cb) { | ||
const logPrefix = topLogPrefix + 'removeAllTables() - '; | ||
try { | ||
@@ -114,3 +203,3 @@ ready(function() { | ||
if (err) { | ||
log.error('larvitdb: removeAllTables() - Could not get a connection from the pool: ' + err.message); | ||
log.error(logPrefix + 'Could not get a connection from the pool: ' + err.message); | ||
cb(err); | ||
@@ -129,3 +218,3 @@ return; | ||
if (err) { | ||
log.error('larvitdb: removeAllTables() - Error when running "SHOW TABLES": ' + err.message); | ||
log.error(logPrefix + 'Error when running "SHOW TABLES": ' + err.message); | ||
cb(err); | ||
@@ -172,3 +261,3 @@ return; | ||
} catch (err) { | ||
log.error('larvitdb: removeAllTables() - Throwed error from database driver: ' + err.message); | ||
log.error(logPrefix + 'Throwed error from database driver: ' + err.message); | ||
cb(err); | ||
@@ -179,2 +268,4 @@ } | ||
function setup(thisConf, cb) { | ||
const logPrefix = topLogPrefix + 'setup() - '; | ||
try { | ||
@@ -202,5 +293,5 @@ exports.conf = conf = thisConf; | ||
if (err || rows.length === 0) { | ||
log.error('larvitdb: setup() - Database connection test failed!'); | ||
log.error(logPrefix + 'Database connection test failed!'); | ||
} else { | ||
log.info('larvitdb: setup() - Database connection test succeeded.'); | ||
log.info(logPrefix + 'Database connection test succeeded.'); | ||
} | ||
@@ -216,3 +307,3 @@ | ||
} catch (err) { | ||
log.error('larvitdb: setup() - Throwed error from database driver: ' + err.message); | ||
log.error(logPrefix + 'Throwed error from database driver: ' + err.message); | ||
cb(err); | ||
@@ -222,2 +313,3 @@ } | ||
exports.getConnection = getConnection; | ||
exports.query = query; | ||
@@ -224,0 +316,0 @@ exports.ready = ready; |
{ | ||
"name": "larvitdb", | ||
"version": "1.2.7", | ||
"version": "1.3.0", | ||
"description": "DB wrapper module for node.js", | ||
@@ -5,0 +5,0 @@ "main": "larvitdb.js", |
@@ -23,14 +23,5 @@ 'use strict'; | ||
db.query('SHOW TABLES', function(err, rows) { | ||
if (err) { | ||
log.error(err); | ||
assert( ! err, 'err should be negative'); | ||
process.exit(1); | ||
} | ||
if (err) throw err; | ||
if (rows.length) throw new Error('Database is not empty. To make a test, you must supply an empty database!'); | ||
if (rows.length) { | ||
log.error('Database is not empty. To make a test, you must supply an empty database!'); | ||
assert.deepEqual(rows.length, 0); | ||
process.exit(1); | ||
} | ||
done(); | ||
@@ -44,3 +35,3 @@ }); | ||
db.setup(require(confFile), function(err) { | ||
assert( ! err, 'err should be negative'); | ||
if (err) throw err; | ||
@@ -66,9 +57,5 @@ checkEmptyDb(); | ||
fs.stat(altConfFile, function(err) { | ||
if (err) { | ||
assert( ! err, 'fs.stat failed: ' + err.message); | ||
} | ||
if (err) throw err; | ||
if ( ! err) { | ||
runDbSetup(altConfFile); | ||
} | ||
runDbSetup(altConfFile); | ||
}); | ||
@@ -86,13 +73,7 @@ } else { | ||
tasks.push(function(cb) { | ||
dbCon.query('CREATE TABLE `fjant` (`test` int NOT NULL) ENGINE=\'InnoDB\';', function(err) { | ||
assert( ! err, 'err should be negative'); | ||
cb(err); | ||
}); | ||
dbCon.query('CREATE TABLE `fjant` (`test` int NOT NULL) ENGINE=\'InnoDB\';', cb); | ||
}); | ||
tasks.push(function(cb) { | ||
dbCon.query('INSERT INTO `fjant` VALUES(13);', function(err) { | ||
assert( ! err, 'err should be negative'); | ||
cb(err); | ||
}); | ||
dbCon.query('INSERT INTO `fjant` VALUES(13);', cb); | ||
}); | ||
@@ -102,5 +83,5 @@ | ||
dbCon.query('SELECT test FROM fjant', function(err, rows) { | ||
assert( ! err, 'err should be negative'); | ||
assert.deepEqual(rows.length, 1); | ||
assert.deepEqual(rows[0].test, 13); | ||
if (err) throw err; | ||
assert.strictEqual(rows.length, 1); | ||
assert.strictEqual(rows[0].test, 13); | ||
cb(err); | ||
@@ -111,8 +92,8 @@ }); | ||
tasks.push(function(cb) { | ||
dbCon.query('UPDATE fjant SET test = 7', function(err) { | ||
assert( ! err, 'err should be negative'); | ||
dbCon.query('UPDATE fjant SET test = ?', [7], function(err) { | ||
if (err) throw err; | ||
dbCon.query('SELECT test FROM fjant', function(err, rows) { | ||
assert( ! err, 'err should be negative'); | ||
assert.deepEqual(rows.length, 1); | ||
assert.deepEqual(rows[0].test, 7); | ||
if (err) throw err; | ||
assert.strictEqual(rows.length, 1); | ||
assert.strictEqual(rows[0].test, 7); | ||
cb(err); | ||
@@ -125,6 +106,6 @@ }); | ||
dbCon.query('DELETE FROM fjant', function(err) { | ||
assert( ! err, 'err should be negative'); | ||
if (err) throw err; | ||
dbCon.query('SELECT test FROM fjant', function(err, rows) { | ||
assert( ! err, 'err should be negative'); | ||
assert.deepEqual(rows.length, 0); | ||
if (err) throw err; | ||
assert.strictEqual(rows.length, 0); | ||
cb(err); | ||
@@ -136,9 +117,9 @@ }); | ||
tasks.push(function(cb) { | ||
dbCon.query('DROP TABLE fjant', function(err) { | ||
assert( ! err, 'err should be negative'); | ||
cb(err); | ||
}); | ||
dbCon.query('DROP TABLE fjant', cb); | ||
}); | ||
async.series(tasks, cb); | ||
async.series(tasks, function (err) { | ||
if (err) throw err; | ||
cb(); | ||
}); | ||
} | ||
@@ -151,4 +132,4 @@ | ||
it('Queries on a single connection from the pool', function(done) { | ||
db.pool.getConnection(function(err, dbCon) { | ||
assert( ! err, 'err should be negative'); | ||
db.getConnection(function(err, dbCon) { | ||
if (err) throw err; | ||
@@ -172,10 +153,10 @@ dbTests(dbCon, done); | ||
tasks.push(function(cb) { | ||
db.pool.getConnection(function(err, dbCon) { | ||
assert( ! err, 'err should be negative'); | ||
db.getConnection(function(err, dbCon) { | ||
if (err) throw err; | ||
dbCon.beginTransaction(function(err) { | ||
assert( ! err, 'err should be negative'); | ||
if (err) throw err; | ||
dbCon.query('INSERT INTO foobar VALUES(5)', function(err) { | ||
assert( ! err, 'err should be negative'); | ||
if (err) throw err; | ||
@@ -186,3 +167,3 @@ // If an error occurred in the queries, in a production environment | ||
dbCon.commit(function(err) { | ||
assert( ! err, 'err should be negative'); | ||
if (err) throw err; | ||
@@ -198,13 +179,13 @@ cb(err); | ||
tasks.push(function(cb) { | ||
db.pool.getConnection(function(err, dbCon) { | ||
assert( ! err, 'err should be negative'); | ||
db.getConnection(function(err, dbCon) { | ||
if (err) throw err; | ||
dbCon.beginTransaction(function(err) { | ||
assert( ! err, 'err should be negative'); | ||
if (err) throw err; | ||
dbCon.query('INSERT INTO foobar VALUES(5)', function(err) { | ||
assert( ! err, 'err should be negative'); | ||
if (err) throw err; | ||
dbCon.rollback(function(err) { | ||
assert( ! err, 'err should be negative'); | ||
if (err) throw err; | ||
@@ -223,4 +204,4 @@ cb(err); | ||
db.query('SELECT SUM(baz) AS bazSum FROM foobar', function(err, rows) { | ||
assert( ! err, 'err should be negative'); | ||
assert.deepEqual(rows[0].bazSum, 10); | ||
if (err) throw err; | ||
assert.strictEqual(Number(rows[0].bazSum), 10); | ||
cb(err); | ||
@@ -266,4 +247,4 @@ }); | ||
db.query('SHOW TABLES', function(err, rows) { | ||
assert( ! err, 'err should be negative'); | ||
assert.deepEqual(rows.length, 0); | ||
if (err) throw err; | ||
assert.strictEqual(rows.length, 0); | ||
cb(); | ||
@@ -270,0 +251,0 @@ }); |
Sorry, the diff of this file is not supported yet
20297
442