plyql
Version:
A SQL-like interface for Plywood
55 lines (54 loc) • 1.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var plywood_1 = require("plywood");
var json_server_1 = require("./json-server");
var plyql_executor_1 = require("./plyql-executor");
function plyqlJSONServer(port, context, timezone) {
json_server_1.createJSONServer(port, function (parameters, res) {
var sql = parameters.sql, expression = parameters.expression;
var resultPromise;
if (expression) {
var ex = void 0;
try {
ex = plywood_1.Expression.fromJSLoose(expression);
}
catch (e) {
res.status(400).send({ error: e.message });
return;
}
resultPromise = plyql_executor_1.executePlywood(ex, context, timezone);
}
else {
var sqlParse = void 0;
try {
sqlParse = plywood_1.Expression.parseSQL(sql);
}
catch (e) {
res.status(400).send({ error: e.message });
return;
}
if (sqlParse.verb && sqlParse.verb !== 'SELECT') {
res.status(400).send({ error: "Unsupported SQL verb " + sqlParse.verb + " must be SELECT, DESCRIBE, SHOW, or a raw expression" });
return;
}
resultPromise = plyql_executor_1.executeSQLParse(sqlParse, context, timezone);
}
resultPromise
.then(function (value) {
if (plywood_1.Dataset.isDataset(value)) {
res.json({
result: value.toJS()
});
}
else {
res.json({
result: value
});
}
})
.catch(function (e) {
res.status(500).send({ error: e.message });
});
});
}
exports.plyqlJSONServer = plyqlJSONServer;