UNPKG

refql

Version:

A Node.js and Deno library for composing and running SQL queries.

70 lines (69 loc) 2.38 kB
"use strict"; 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;