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
JavaScript
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;
;