sqlpad
Version:
Web app. Write SQL and visualize the results. Supports Postgres, MySQL, SQL Server, Crate, Vertica and SAP HANA.
80 lines (72 loc) • 1.89 kB
JavaScript
const fetch = require('node-fetch');
let request = require('request');
let url = require('url');
exports.version = '1.0';
let Client = (exports.Client = function(args) {
if (!args) args = {};
this.host = args.host || 'localhost';
this.port = args.port || 8047;
this.user = args.user || process.env.USER;
this.ssl = args.ssl || false;
this.protocol = 'http';
if (this.ssl) {
this.protocol = 'https';
}
});
Client.prototype.execute = function(queryString, callback) {
const href = url.format({
protocol: this.protocol,
hostname: 'localhost',
pathname: '/query.json',
port: 8047
});
let headers = {
'Content-Type': 'application/json; charset=UTF-8',
'User-Name': this.user,
Accept: 'application/json'
};
let queryOptions = {
uri: href,
method: 'POST',
headers,
json: { queryType: 'SQL', query: queryString }
};
request(queryOptions, function(error, response, body) {
if (!error && response.statusCode === 200) {
callback(null, body);
} // TODO Add error handling
});
};
Client.prototype.getSchemata = function() {
return this.query('SHOW DATABASES');
};
Client.prototype.query = function(config, query) {
const headers = {
'Content-Type': 'application/json; charset=UTF-8',
Accept: 'application/json'
};
const restURL =
this.protocol + '://' + this.host + ':' + this.port + '/query.json';
const queryInfo = {
queryType: 'SQL',
query
};
const body = JSON.stringify(queryInfo);
return fetch(restURL, {
method: 'POST',
headers,
body
})
.then(function(data) {
return data.json();
})
.then(function(jsonData) {
return jsonData;
})
.catch(function(e) {
// TODO Send error message to JSON
console.log('There was a problem with the request' + e);
return e;
});
};
module.exports = { Client };