123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- const {ColorConsole} = require('./utils/color');
- const npm = {
- utils: require('./utils')
- };
- class DatabasePool {
-
- static get instance() {
- const s = Symbol.for('pgPromiseDatabasePool');
- let scope = global[s];
- if (!scope) {
- scope = {
- dbMap: {},
- dbs: []
- };
- global[s] = scope;
- }
- return scope;
- }
-
- static register(db) {
- const cnKey = DatabasePool.createContextKey(db);
- npm.utils.addReadProp(db, '$cnKey', cnKey, true);
- const {dbMap, dbs} = DatabasePool.instance;
- if (cnKey in dbMap) {
- dbMap[cnKey]++;
-
- if (!db.$config.options.noWarnings) {
- ColorConsole.warn(`WARNING: Creating a duplicate database object for the same connection.\n${npm.utils.getLocalStack(4, 3)}\n`);
- }
- } else {
- dbMap[cnKey] = 1;
- }
- dbs.push(db);
- }
-
- static unregister(db) {
- const cnKey = db.$cnKey;
- const {dbMap} = DatabasePool.instance;
- if (!--dbMap[cnKey]) {
- delete dbMap[cnKey];
- }
- }
-
- static shutDown() {
- const {instance} = DatabasePool;
- instance.dbs.forEach(db => {
- db.$destroy();
- });
- instance.dbs.length = 0;
- instance.dbMap = {};
- }
-
- static createContextKey(db) {
- let cn = db.$cn;
- if (typeof cn === 'object') {
- const obj = {}, keys = Object.keys(cn).sort();
- keys.forEach(name => {
- obj[name] = cn[name];
- });
- cn = obj;
- }
- return npm.utils.toJson(npm.utils.getSafeConnection(cn)) + npm.utils.toJson(db.$dc);
- }
- }
- module.exports = {DatabasePool};
|