slonik-utilities
Version:
Utilities for manipulating data in PostgreSQL database using Slonik.
52 lines (51 loc) • 1.91 kB
JavaScript
;
/* eslint-disable @typescript-eslint/no-explicit-any */
Object.defineProperty(exports, "__esModule", { value: true });
exports.update = void 0;
const lodash_1 = require("lodash");
const slonik_1 = require("slonik");
const utilities_1 = require("../utilities");
const update = async (connection, tableName, namedAssignmentPayload, booleanExpressionValues = {}) => {
if (Object.keys(booleanExpressionValues).length) {
const nonOverlappingNamedAssignmentBindings = (0, lodash_1.pickBy)(namedAssignmentPayload, (value, key) => {
return value !== booleanExpressionValues[key];
});
if (Object.keys(nonOverlappingNamedAssignmentBindings).length === 0) {
return {
rowCount: 0,
};
}
const booleanExpression = slonik_1.sql.join(Object.entries(booleanExpressionValues).map(([key, value,]) => {
return slonik_1.sql.fragment `${slonik_1.sql.identifier([
(0, utilities_1.normalizeIdentifier)(key),
])} = ${value}`;
}), slonik_1.sql.fragment ` AND `);
const result = await connection.query(slonik_1.sql.unsafe `
UPDATE ${slonik_1.sql.identifier([
tableName,
])}
SET ${(0, utilities_1.assignmentList)(nonOverlappingNamedAssignmentBindings)}
WHERE ${booleanExpression}
`);
return {
rowCount: result.rowCount,
};
}
else {
if (Object.keys(namedAssignmentPayload).length === 0) {
return {
rowCount: 0,
};
}
const result = await connection.query(slonik_1.sql.unsafe `
UPDATE ${slonik_1.sql.identifier([
tableName,
])}
SET ${(0, utilities_1.assignmentList)(namedAssignmentPayload)}
`);
return {
rowCount: result.rowCount,
};
}
};
exports.update = update;