Feat: implement queries using task for easier usage
This commit is contained in:
parent
47614c9637
commit
440b8e7f61
2 changed files with 98 additions and 37 deletions
29
lib/db.js
29
lib/db.js
|
|
@ -9,13 +9,28 @@ const extendedQueries = require('./extendedQueries')
|
||||||
const pgp = Pgp({
|
const pgp = Pgp({
|
||||||
pgNative: true,
|
pgNative: true,
|
||||||
extend (obj, dbContext) {
|
extend (obj, dbContext) {
|
||||||
obj.$any = (query, tables, variables) => extendedQueries.any(obj, dbContext, query, tables, variables)
|
obj.taskEx = function () {
|
||||||
obj.$one = (query, tables, variables) => extendedQueries.one(obj, dbContext, query, tables, variables)
|
const args = pgp.utils.taskArgs(arguments)
|
||||||
obj.$oneOrNone = (query, tables, variables) => extendedQueries.oneOrNone(obj, dbContext, query, tables, variables)
|
const { schema } = args.options
|
||||||
obj.$many = (query, tables, variables) => extendedQueries.many(obj, dbContext, query, tables, variables)
|
if ('schema' in args.options) {
|
||||||
obj.$manyOrNone = (query, tables, variables) => extendedQueries.manyOrNone(obj, dbContext, query, tables, variables)
|
delete args.options.schema
|
||||||
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)
|
if (schema) {
|
||||||
|
return obj.task.call(this, args.options, t => {
|
||||||
|
return t.none('SET search_path to $1:name', [schema])
|
||||||
|
.then(args.cb.bind(this, t))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error('No schema selected, cannot complete query'))
|
||||||
|
}
|
||||||
|
obj.$query = (query, values, qrm) => extendedQueries.query(obj, query, values, qrm)
|
||||||
|
obj.$result = (query, variables, cb, thisArg) => extendedQueries.result(obj, query, variables, cb, thisArg)
|
||||||
|
obj.$many = (query, variables) => extendedQueries.many(obj, query, variables)
|
||||||
|
obj.$manyOrNone = (query, variables) => extendedQueries.manyOrNone(obj, query, variables)
|
||||||
|
obj.$oneOrNone = (query, variables) => extendedQueries.oneOrNone(obj, query, variables)
|
||||||
|
obj.$one = (query, variables) => extendedQueries.one(obj, query, variables)
|
||||||
|
obj.$none = (query, variables) => extendedQueries.none(obj, query, variables)
|
||||||
|
obj.$any = (query, variables) => extendedQueries.any(obj, query, variables)
|
||||||
},
|
},
|
||||||
error: (err, e) => {
|
error: (err, e) => {
|
||||||
if (e.cn) logger.error('Database not reachable.')
|
if (e.cn) logger.error('Database not reachable.')
|
||||||
|
|
|
||||||
|
|
@ -1,47 +1,92 @@
|
||||||
const _ = require('lodash/fp')
|
const getSchema = () => 'public'
|
||||||
|
|
||||||
const concatSchema = (qry, tables) => {
|
const getDefaultSchema = () => 'public2'
|
||||||
const schemaName = 'public' // fetch schema name from Async Local Storage here
|
|
||||||
let query = qry
|
const any = (obj, query, variables) => {
|
||||||
_.forEach(tableName => { query = query.replace(tableName, `${schemaName}.${tableName}`) }, tables)
|
const schema = getSchema()
|
||||||
return query
|
return obj.taskEx({ schema }, t => {
|
||||||
|
return t.any(query, variables).then(res => {
|
||||||
|
return t.none('set search_path to $1~', [getDefaultSchema()]).then(() => {
|
||||||
|
return res
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const any = (db, dbContext, qry, tables, variables) => {
|
const none = (obj, query, variables) => {
|
||||||
const query = concatSchema(qry, tables)
|
const schema = getSchema()
|
||||||
return db.any(query, variables)
|
return obj.taskEx({ schema }, t => {
|
||||||
|
return t.none(query, variables).then(res => {
|
||||||
|
return t.none('set search_path to $1~', [getDefaultSchema()]).then(() => {
|
||||||
|
return res
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const manyOrNone = (db, dbContext, qry, tables, variables) => {
|
const one = (obj, query, variables) => {
|
||||||
const query = concatSchema(qry, tables)
|
const schema = getSchema()
|
||||||
return db.manyOrNone(query, variables)
|
return obj.taskEx({ schema }, t => {
|
||||||
|
return t.one(query, variables).then(res => {
|
||||||
|
return t.none('set search_path to $1~', [getDefaultSchema()]).then(() => {
|
||||||
|
return res
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const none = (db, dbContext, qry, tables, variables) => {
|
const oneOrNone = (obj, query, variables) => {
|
||||||
const query = concatSchema(qry, tables)
|
const schema = getSchema()
|
||||||
return db.none(query, variables)
|
return obj.taskEx({ schema }, t => {
|
||||||
|
return t.oneOrNone(query, variables).then(res => {
|
||||||
|
return t.none('set search_path to $1~', [getDefaultSchema()]).then(() => {
|
||||||
|
return res
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const many = (db, dbContext, qry, tables, variables) => {
|
const manyOrNone = (obj, query, variables) => {
|
||||||
const query = concatSchema(qry, tables)
|
const schema = getSchema()
|
||||||
return db.many(query, variables)
|
return obj.taskEx({ schema }, t => {
|
||||||
|
return t.manyOrNone(query, variables).then(res => {
|
||||||
|
return t.none('set search_path to $1~', [getDefaultSchema()]).then(() => {
|
||||||
|
return res
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const oneOrNone = (db, dbContext, qry, tables, variables) => {
|
const many = (obj, query, variables) => {
|
||||||
const query = concatSchema(qry, tables)
|
const schema = getSchema()
|
||||||
return db.oneOrNone(query, variables)
|
return obj.taskEx({ schema }, t => {
|
||||||
|
return t.many(query, variables).then(res => {
|
||||||
|
return t.none('set search_path to $1~', [getDefaultSchema()]).then(() => {
|
||||||
|
return res
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const one = (db, dbContext, qry, tables, variables) => {
|
const result = (obj, query, variables, cb, thisArg) => {
|
||||||
const query = concatSchema(qry, tables)
|
const schema = getSchema()
|
||||||
return db.one(query, variables)
|
return obj.taskEx({ schema }, t => {
|
||||||
|
return t.result(query, variables, cb, thisArg).then(res => {
|
||||||
|
return t.none('set search_path to $1~', [getDefaultSchema()]).then(() => {
|
||||||
|
return res
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const result = (db, dbContext, qry, tables, variables, cb) => {
|
const query = (obj, query, values, qrm) => {
|
||||||
const query = concatSchema(qry, tables)
|
const schema = getSchema()
|
||||||
console.log(query)
|
return obj.taskEx({ schema }, t => {
|
||||||
return db.result(query, variables).then(r => {
|
return t.query(query, values, qrm).then(res => {
|
||||||
return cb ? cb(r) : r
|
return t.none('set search_path to $1~', [getDefaultSchema()]).then(() => {
|
||||||
|
return res
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -52,5 +97,6 @@ module.exports = {
|
||||||
many,
|
many,
|
||||||
oneOrNone,
|
oneOrNone,
|
||||||
one,
|
one,
|
||||||
result
|
result,
|
||||||
|
query
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue