refql
Version:
A Node.js and Deno library for composing and running SQL queries.
70 lines (69 loc) • 2.38 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.isDeleteRQLTag = void 0;
exports.createDeleteRQLTag = createDeleteRQLTag;
const consts_1 = require("../common/consts");
const Prop_1 = __importDefault(require("../Prop"));
const SQLProp_1 = __importDefault(require("../Prop/SQLProp"));
const SQLTag_1 = require("../SQLTag");
const Raw_1 = __importDefault(require("../SQLTag/Raw"));
const sql_1 = require("../SQLTag/sql");
const CUD_1 = require("./CUD");
const getStandardProps_1 = __importDefault(require("./getStandardProps"));
const type = "refql/DeleteRQLTag";
let prototype = Object.assign({}, CUD_1.CUDPrototype, {
constructor: createDeleteRQLTag,
[consts_1.refqlType]: type,
interpret
});
function createDeleteRQLTag(table, nodes, options) {
const tag = ((params) => {
return options.runner(tag, params);
});
Object.setPrototypeOf(tag, Object.assign(Object.create(Function.prototype), prototype, {
table,
nodes,
options
}));
return tag;
}
function interpret() {
const { nodes, table } = this;
let filters = (0, sql_1.sqlX) ``;
let returning;
for (const node of nodes) {
if (Prop_1.default.isProp(node) || SQLProp_1.default.isSQLProp(node)) {
const col = node.interpret();
for (const op of node.operations) {
filters = filters.join(" ", op.interpret(col, true));
}
}
else if ((0, SQLTag_1.isSQLTag)(node)) {
filters = filters.join(" ", node);
}
else {
throw new Error(`Unknown Deletable RQLNode Type: "${String(node)}"`);
}
}
const props = (0, getStandardProps_1.default)(table);
const deleteTable = (0, sql_1.sqlX) `
delete from ${(0, Raw_1.default)(table)}
where 1 = 1
`;
let tag = deleteTable
.join("", filters)
.concat((0, sql_1.sqlX) `
returning ${(0, Raw_1.default)(`${props.map(p => `${table.name}.${p.col || p.as} "${p.as}"`).join(", ")}`)}
`);
return {
tag,
returning
};
}
const isDeleteRQLTag = function (x) {
return x != null && x[consts_1.refqlType] === type;
};
exports.isDeleteRQLTag = isDeleteRQLTag;
;