dogmaql.driver.redis
Version:
Redis driver for DogmaQL (Dogma Query Language).
125 lines (123 loc) • 5.55 kB
JavaScript
"use strict";
var _dogmalang = require("dogmalang");
const $LuaTrans = class LuaTrans {
constructor() {
{}
}
};
const LuaTrans = new Proxy($LuaTrans, { apply(receiver, self, args) {
return new $LuaTrans(...args);
} });module.exports = exports = LuaTrans;
LuaTrans.prototype.transform = function (exp) {
_dogmalang.dogma.paramExpected("exp", exp, null);{
return this._transNode(exp.root);
}
};
LuaTrans.prototype.transformSet = function (exp) {
_dogmalang.dogma.paramExpected("exp", exp, null);{
return this._transNode(exp.root);
}
};
LuaTrans.prototype._transNode = function (node) {
let code = "";_dogmalang.dogma.paramExpected("node", node, null);{
const $aux15187793585715 = (0, _dogmalang.typename)(node);if ($aux15187793585715 == "UnaryOp") {
code = this._transUnaryOp(node);
} else if ($aux15187793585715 == "BinOp") {
code = this._transBinOp(node);
} else if ($aux15187793585715 == "TernaryOp") {
code = this._transTernaryOp(node);
} else if ($aux15187793585715 == "Name") {
code = this._transName(node);
} else if ($aux15187793585715 == "NaryOp") {
code = this._transNaryOp(node);
} else if ($aux15187793585715 == "SubExp") {
code = this._transNode(node.value.root);
} else {
/* istanbul ignore else */if (_dogmalang.dogma.is(node, "Literal")) {
code = this._transLiteral(node);
} else {
_dogmalang.dogma.raise("'%s' node type not processed.", (0, _dogmalang.typename)(node));
}
}
}return code;
};
LuaTrans.prototype._transName = function (node) {
_dogmalang.dogma.paramExpected("node", node, null);{
return node.value;
}
};
LuaTrans.prototype._transLiteral = function (node) {
let code = "";_dogmalang.dogma.paramExpected("node", node, null);{
const val = node.value;const $aux15187793584596 = (0, _dogmalang.typename)(val);if ($aux15187793584596 == "text") {
code = (0, _dogmalang.fmt)("\"%s\"", val);
} else if ($aux15187793584596 == "bool") {
code = (0, _dogmalang.text)(val);
} else if ($aux15187793584596 == "num") {
code = (0, _dogmalang.text)(val);
} else {
code = "nil";
}
}return code;
};
LuaTrans.prototype._transUnaryOp = function (node) {
_dogmalang.dogma.paramExpected("node", node, null);{
return (0, _dogmalang.fmt)("(not %s)", this._transNode(node.child));
}
};
LuaTrans.prototype._transBinOp = function (node) {
let code = "";_dogmalang.dogma.paramExpected("node", node, null);{
/* istanbul ignore else */if (_dogmalang.dogma.includes(["==", "<", "<=", ">", ">=", "+", "-", ".", "and", "or"], node.op)) {
code = (0, _dogmalang.fmt)("(%s %s %s)", this._transNode(node.left), node.op, this._transNode(node.right));
} else if (node.op == "!=") {
code = (0, _dogmalang.fmt)("(%s ~= %s)", this._transNode(node.left), this._transNode(node.right));
} else if (_dogmalang.dogma.includes(["like", "notlike"], node.op)) {
code = this._transLikeOp(node);
} else if (_dogmalang.dogma.includes(["in", "notin"], node.op)) {
code = this._transInOp(node);
} else if (node.op == "[]") {
code = this._transIndexOp(node);
} else if (node.op == "=") {
code = this._transSetOp(node);
} else if (node.op == "+=") {
code = this._transIncOp(node);
} else {
_dogmalang.dogma.raise("invalid operator: '%s'.", node.op);
}
}return code;
};
LuaTrans.prototype._transSetOp = function (node) {
_dogmalang.dogma.paramExpected("node", node, null);{
return (0, _dogmalang.fmt)("%s = %s", this._transNode(node.left), this._transNode(node.right));
}
};
LuaTrans.prototype._transIncOp = function (node) {
_dogmalang.dogma.paramExpected("node", node, null);{
return (0, _dogmalang.fmt)("%s = (type(%s) == 'string' and %s .. %s or %s + %s)", this._transNode(node.left), this._transNode(node.left), this._transNode(node.left), this._transNode(node.right), this._transNode(node.left), this._transNode(node.right));
}
};
LuaTrans.prototype._transIndexOp = function (node) {
_dogmalang.dogma.paramExpected("node", node, null);{
return (0, _dogmalang.fmt)("(type(%s) == 'string' and %s:sub(%s+1, %s+1) or %s[%s+1])", this._transNode(node.left), this._transNode(node.left), this._transNode(node.right), this._transNode(node.right), this._transNode(node.left), this._transNode(node.right));
}
};
LuaTrans.prototype._transLikeOp = function (node) {
_dogmalang.dogma.paramExpected("node", node, null);{
return (0, _dogmalang.fmt)("(%s%s:match(%s))", node.op == "notlike" ? "not " : "", this._transNode(node.left), this._transNode(node.right));
}
};
LuaTrans.prototype._transTernaryOp = function (node) {
_dogmalang.dogma.paramExpected("node", node, null);{
return (0, _dogmalang.fmt)("(%s >= %s and %s <= %s)", this._transNode(node.left), this._transNode(node.middle), this._transNode(node.left), this._transNode(node.right));
}
};
LuaTrans.prototype._transNaryOp = function (node) {
let code = "";_dogmalang.dogma.paramExpected("node", node, null);{
const name = _dogmalang.dogma.getItem(node.children, 0).value; /* istanbul ignore else */if (name == "exists") {
code = (0, _dogmalang.fmt)("(%s ~= nil)", this.transform(_dogmalang.dogma.getItem(node.children, 1)));
} else if (name == "len") {
code = (0, _dogmalang.fmt)("#%s", this.transform(_dogmalang.dogma.getItem(node.children, 1)));
} else {
_dogmalang.dogma.raise("invalid function name: '%s'. Allowed: 'exists' and 'len'.", name);
}
}return code;
};