UNPKG

@jakub.knejzlik/ts-query

Version:

TypeScript implementation of SQL builder

44 lines (43 loc) 1.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SQLiteFlavor = void 0; const Expression_1 = require("../Expression"); const mysql_1 = require("./mysql"); class SQLiteFlavor extends mysql_1.MySQLFlavor { constructor() { super(...arguments); // protected columnQuotes: string = "'" this.stringQuotes = "'"; } escapeFunction(fn) { const args = fn.value.map((arg) => Expression_1.ExpressionBase.deserialize(arg).toSQL(this)); if (fn.name === "MONTH") { return `strftime('%m', ${args.join(", ")}, 'localtime')`; } if (fn.name === "YEAR") { return `strftime('%Y', ${args.join(", ")}, 'localtime')`; } if (fn.name === "IF") { return `IIF(${args.join(", ")})`; } if (fn.name === "DATEADD") { const argsValues = fn.value.map((x) => Expression_1.ExpressionBase.deserializeValue(x)); const interval = parseInt(argsValues[1].value.toString(), 10); if (isNaN(interval)) { throw new Error(`Invalid DATEADD interval: ${argsValues[1].value}`); } const intervalType = argsValues[2].value.toString().toLowerCase(); // SQLite supports: years, months, days, hours, minutes, seconds const validIntervalTypes = ['year', 'month', 'day', 'hour', 'minute', 'second', 'years', 'months', 'days', 'hours', 'minutes', 'seconds']; if (!validIntervalTypes.includes(intervalType)) { throw new Error(`Invalid DATEADD interval type: ${intervalType}`); } return `DateTime(${args[0]}, '${interval >= 0 ? "+" + interval : interval} ${intervalType}')`; } return super.escapeFunction(fn); } escapeTable(table) { return super.escapeTable(table.substring(table.indexOf("@") + 1)); } } exports.SQLiteFlavor = SQLiteFlavor;