diff --git a/lib/db.js b/lib/db.js index 4f59674c..13110d53 100644 --- a/lib/db.js +++ b/lib/db.js @@ -4,9 +4,19 @@ const _ = require('lodash/fp') const psqlUrl = require('../lib/options').postgresql const logger = require('./logger') const eventBus = require('./event-bus') +const extendedQueries = require('./extendedQueries') const pgp = Pgp({ pgNative: true, + extend (obj, dbContext) { + obj.$any = (query, tables, variables) => extendedQueries.any(obj, dbContext, query, tables, variables) + obj.$one = (query, tables, variables) => extendedQueries.one(obj, dbContext, query, tables, variables) + obj.$oneOrNone = (query, tables, variables) => extendedQueries.oneOrNone(obj, dbContext, query, tables, variables) + obj.$many = (query, tables, variables) => extendedQueries.many(obj, dbContext, query, tables, variables) + obj.$manyOrNone = (query, tables, variables) => extendedQueries.manyOrNone(obj, dbContext, query, tables, variables) + obj.$none = (query, tables, variables) => extendedQueries.none(obj, dbContext, query, tables, variables) + obj.$result = (query, tables, variables, cb) => extendedQueries.result(obj, dbContext, query, tables, variables, cb) + }, error: (err, e) => { if (e.cn) logger.error('Database not reachable.') if (e.query) { diff --git a/lib/extendedQueries.js b/lib/extendedQueries.js new file mode 100644 index 00000000..bf5a8b6d --- /dev/null +++ b/lib/extendedQueries.js @@ -0,0 +1,56 @@ +const _ = require('lodash/fp') + +const concatSchema = (qry, tables) => { + const schemaName = 'public' // fetch schema name from Async Local Storage here + let query = qry + _.forEach(tableName => { query = query.replace(tableName, `${schemaName}.${tableName}`) }, tables) + return query +} + +const any = (db, dbContext, qry, tables, variables) => { + const query = concatSchema(qry, tables) + return db.any(query, variables) +} + +const manyOrNone = (db, dbContext, qry, tables, variables) => { + const query = concatSchema(qry, tables) + return db.manyOrNone(query, variables) +} + +const none = (db, dbContext, qry, tables, variables) => { + const query = concatSchema(qry, tables) + return db.none(query, variables) +} + +const many = (db, dbContext, qry, tables, variables) => { + const query = concatSchema(qry, tables) + return db.many(query, variables) +} + +const oneOrNone = (db, dbContext, qry, tables, variables) => { + const query = concatSchema(qry, tables) + return db.oneOrNone(query, variables) +} + +const one = (db, dbContext, qry, tables, variables) => { + const query = concatSchema(qry, tables) + return db.one(query, variables) +} + +const result = (db, dbContext, qry, tables, variables, cb) => { + const query = concatSchema(qry, tables) + console.log(query) + return db.result(query, variables).then(r => { + return cb ? cb(r) : r + }) +} + +module.exports = { + any, + manyOrNone, + none, + many, + oneOrNone, + one, + result +}