plywood-mysql-requester
Version:
MySQL requester for Plywood (within node)
58 lines (57 loc) • 1.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var mysql = require("mysql");
var plywood_base_api_1 = require("plywood-base-api");
var readable_stream_1 = require("readable-stream");
function mySqlRequesterFactory(parameters) {
var locator = parameters.locator;
if (!locator) {
var host = parameters.host;
if (!host)
throw new Error("must have a `host` or a `locator`");
locator = plywood_base_api_1.basicLocator(host, 3306);
}
var user = parameters.user;
var password = parameters.password;
var database = parameters.database;
return function (request) {
var query = request.query;
var connection = null;
var stream = new readable_stream_1.Readable({
objectMode: true,
read: function () {
connection && connection.resume();
}
});
locator()
.then(function (location) {
connection = mysql.createConnection({
host: location.hostname,
port: location.port || 3306,
user: user,
password: password,
database: database,
charset: 'UTF8_BIN',
timezone: '+00:00'
});
connection.connect();
var q = connection.query(query);
q.on('result', function (row) {
if (!stream.push(row))
connection.pause();
});
q.on('error', function (err) {
stream.emit('error', err);
});
q.on('end', function () {
stream.push(null);
});
connection.end();
})
.catch(function (err) {
stream.emit('error', err);
});
return stream;
};
}
exports.mySqlRequesterFactory = mySqlRequesterFactory;