Files
Elite-Gaming-FiveM-Old/resources/mysql-async/src/server/utils.js
T
2021-12-03 01:05:09 +00:00

81 lines
2.1 KiB
JavaScript

const mysql = require('mysql');
function safeInvoke(callback, args) {
if (typeof callback === 'function') {
setImmediate(() => {
callback(args);
});
}
}
function mysqlEscape(parameters, text, key) {
let result = text;
if (Object.prototype.hasOwnProperty.call(parameters, key)) {
result = mysql.escape(parameters[key]);
} else if (Object.prototype.hasOwnProperty.call(parameters, text)) {
result = mysql.escape(parameters[text]);
}
return result;
}
function prepareQuery(query, parameters) {
let sql = query;
if (parameters !== null && typeof parameters === 'object') {
sql = query.replace(/@(\w+)/g, (txt, key) => mysqlEscape(parameters, txt, key));
}
return sql;
}
function typeCast(field, next) {
let dateString = '';
switch (field.type) {
case 'DATETIME':
case 'DATETIME2':
case 'TIMESTAMP':
case 'TIMESTAMP2':
case 'NEWDATE':
case 'DATE':
dateString = field.string();
if (field.type === 'DATE') dateString += ' 00:00:00';
return (new Date(dateString)).getTime();
case 'TINY':
if (field.length === 1) {
return (field.string() !== '0');
}
return next();
case 'BIT':
return Number(field.buffer()[0]);
default:
return next();
}
}
function prepareTransactionLegacyQuery(querys) {
const sqls = querys;
sqls.forEach((element, index) => {
const query = prepareQuery(element.query, element.parameters);
sqls[index] = query;
});
return sqls;
}
function sanitizeTransactionInput(querys, params, callback) {
let sqls = [];
let cb = callback;
// if every query is a string we are dealing with syntax type a
if (!querys.every(element => typeof element === 'string')) sqls = querys;
else {
const values = (typeof params === 'function') ? [] : params;
querys.forEach((element) => {
sqls.push({ query: element, parameters: values });
});
}
if (typeof params === 'function') cb = params;
sqls = prepareTransactionLegacyQuery(sqls);
return [sqls, cb];
}
module.exports = {
safeInvoke, prepareQuery, typeCast, sanitizeTransactionInput,
};