orange-orm
Version:
Object Relational Mapper
57 lines (52 loc) • 1.41 kB
JavaScript
/* eslint-disable no-prototype-builtins */
var defaults = require('../../poolDefaults');
var genericPool = require('../../generic-pool');
var sqlite;
function newGenericPool(connectionString, poolOptions) {
poolOptions = poolOptions || {};
var pool = genericPool.Pool({
min: poolOptions.min || 0,
max: poolOptions.size || poolOptions.poolSize || defaults.poolSize,
idleTimeoutMillis: poolOptions.idleTimeout || defaults.poolIdleTimeout,
reapIntervalMillis: poolOptions.reapIntervalMillis || defaults.reapIntervalMillis,
log: poolOptions.log || defaults.poolLog,
create: async function(cb) {
try {
if (!sqlite)
sqlite = await import('better-sqlite3');
sqlite = sqlite.default || sqlite;
}
catch (err) {
return cb(err, null);
}
try {
var client = new sqlite(connectionString);
client.poolCount = 0;
return cb(null, client);
}
catch (err) {
return cb(err, null);
}
},
destroy: function(client) {
client.poolCount = undefined;
client.close();
}
});
//monkey-patch with connect method
pool.connect = function(cb) {
pool.acquire(function(err, client) {
if(err) return cb(err, null, function() {/*NOOP*/});
client.poolCount++;
cb(null, client, function(err) {
if(err) {
pool.destroy(client);
} else {
pool.release(client);
}
});
});
};
return pool;
}
module.exports = newGenericPool;