@jakub.knejzlik/ts-query
Version:
TypeScript implementation of SQL builder
55 lines (54 loc) • 2.22 kB
JavaScript
;
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;