UNPKG

mysql-all-in-one

Version:

A package that allows you to have a complete interaction with a MYSQL database, allowing to connect to the database, retrieve data and create queries.

36 lines (35 loc) 1.56 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.sqlExpression = void 0; const types_1 = require("./types"); const utils_1 = require("./utils"); /** * * @description Tagged template literal function to create sql expressions, will automatically escape interpolated variables to valid sql values or if will escape column names if combined with `sqlCol` function, or to complete ignore a string use `sqlExp` function; * @example sqlExpression`STR_TO_DATE(${sqlCol('date')}, "%d/%m/%Y") = ${new Date(2020, 8, 30)} AND ${sqlCol('date') > ${sqlCol('another_table.date')` * >> 'STR_TO_DATE(date, "%d/%m/%Y") = "2020-8-30" AND date > ' */ const sqlExpression = ([firstStr, ...rest], ...values) => { const prepValues = []; const statement = rest.reduce((acc, cur, i) => { const curVal = values[i]; if (curVal instanceof types_1.SqlExp) { return `${acc}${curVal.expression}${cur}`; } if (curVal instanceof types_1.SqlColumn) { return `${acc}${(0, utils_1.safeApplyAlias)((0, utils_1.escapeNames)(curVal.column), "__SQL__EXPRESSION__ALIAS__")}${cur}`; } if ((0, types_1.isSqlExpressionPreparedStatement)(curVal)) { prepValues.push(...curVal.values); return `${acc}${curVal.statement}${cur}`; } prepValues.push(curVal); return `${acc}?${cur}`; }, firstStr); return { statement, values: prepValues, __is_prep_statement: true, }; }; exports.sqlExpression = sqlExpression;