mysql-query-placeholders
Version:
Build prepared statements from named parameters.
54 lines • 1.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.queryBuilder = void 0;
exports.queryBuilder = (query, data, options = { useNullForMissing: true }) => {
const values = [];
if (!data) {
return {
sql: query,
values,
};
}
return {
sql: query.replace(/(::?)([\w.]+)(\.?)/g, (_, prefix, key) => {
const value = getObjectValue(data, key);
if (typeof value !== 'undefined' && value !== null) {
values.push(value);
return prefix.replace(/:/g, '?');
}
else if (options.useNullForMissing) {
values.push(null);
return prefix.replace(/:/g, '?');
}
else {
return errorMissingValue(key, query, data);
}
}),
values,
};
};
const getObjectValue = (object, keyName) => {
const keys = keyName.split('.');
if (keys.length === 1) {
if (typeof object === 'object') {
if (keys[0] in object) {
return object[keys[0]];
}
return undefined;
}
return undefined;
}
else {
const [parentKey, ...restElements] = keys;
if (!object)
return undefined;
return getObjectValue(object[parentKey], restElements.join('.'));
}
};
const errorMissingValue = (key, query, data) => {
throw new Error(`Missing value for statement.
${key} not provided for statement:
${query}
Data provided: ${JSON.stringify(data)}`);
};
//# sourceMappingURL=mqp.js.map