2015-04-27 18:48:34 +08:00
|
|
|
var PSQL = require('cartodb-psql');
|
|
|
|
|
|
|
|
function PgQueryRunner(pgConnection) {
|
|
|
|
this.pgConnection = pgConnection;
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = PgQueryRunner;
|
|
|
|
|
2015-12-31 00:44:49 +08:00
|
|
|
/**
|
|
|
|
* Runs `query` with `username`'s PostgreSQL role, callback receives error and rows array.
|
|
|
|
*
|
|
|
|
* @param {String} username
|
|
|
|
* @param {String} query
|
|
|
|
* @param {Function} callback function({Error}, {Array}) second argument is guaranteed to be an array
|
|
|
|
*/
|
|
|
|
PgQueryRunner.prototype.run = function(username, query, callback) {
|
2015-04-27 18:48:34 +08:00
|
|
|
|
2018-02-08 19:04:03 +08:00
|
|
|
this.pgConnection.getDatabaseParams(username, (err, databaseParams) => {
|
|
|
|
if (err) {
|
|
|
|
return callback(err);
|
2015-04-27 18:48:34 +08:00
|
|
|
}
|
2018-02-08 19:04:03 +08:00
|
|
|
|
|
|
|
const psql = new PSQL({
|
|
|
|
user: databaseParams.dbuser,
|
|
|
|
pass: databaseParams.dbpass,
|
|
|
|
host: databaseParams.dbhost,
|
|
|
|
port: databaseParams.dbport,
|
|
|
|
dbname: databaseParams.dbname
|
|
|
|
});
|
|
|
|
|
|
|
|
psql.query(query, function (err, resultSet) {
|
|
|
|
resultSet = resultSet || {};
|
|
|
|
return callback(err, resultSet.rows || []);
|
|
|
|
});
|
|
|
|
});
|
2015-04-27 18:48:34 +08:00
|
|
|
};
|