UNPKG

@jakub.knejzlik/ts-query

Version:

TypeScript implementation of SQL builder

55 lines (54 loc) 2.22 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AWSTimestreamFlavor = void 0; const dayjs_1 = __importDefault(require("dayjs")); const Expression_1 = require("../Expression"); const default_1 = require("./default"); class AWSTimestreamFlavor extends default_1.DefaultFlavor { constructor() { super(...arguments); this.columnQuotes = `"`; this.stringQuotes = `'`; } escapeValue(value) { var _a; if (value instanceof Date) { const formatted = (0, dayjs_1.default)(value) .tz((_a = this.options) === null || _a === void 0 ? void 0 : _a.timezone) .format("YYYY-MM-DD HH:mm:ss"); return `TIMESTAMP '${formatted}'`; } return super.escapeValue(value); } escapeLimitAndOffset(limit, offset) { let str = ""; if (offset !== undefined) { str += ` OFFSET ${offset}`; } if (limit !== undefined) { str += ` LIMIT ${limit}`; } return str; } escapeFunction(fn) { const args = fn.value.map((arg) => Expression_1.ExpressionBase.deserialize(arg).toSQL(this)); 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(); const validIntervalTypes = ['year', 'month', 'day', 'hour', 'minute', 'second', 'week', 'quarter']; if (!validIntervalTypes.includes(intervalType)) { throw new Error(`Invalid DATEADD interval type: ${intervalType}`); } return `date_add('${intervalType}', ${interval}, ${args[0]})`; } return super.escapeFunction(fn); } } exports.AWSTimestreamFlavor = AWSTimestreamFlavor;