slonik-utilities
Version:
Utilities for manipulating data in PostgreSQL database using Slonik.
34 lines (33 loc) • 1.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.updateDistinct = void 0;
const slonik_1 = require("slonik");
const utilities_1 = require("../utilities");
const updateDistinct = async (connection, tableName, namedAssignmentPayload, booleanExpressionValues = {}) => {
let booleanExpression = slonik_1.sql.join(Object.entries(namedAssignmentPayload).map(([key, value,]) => {
return slonik_1.sql.fragment `${slonik_1.sql.identifier([
(0, utilities_1.normalizeIdentifier)(key),
])} IS DISTINCT FROM ${value}`;
}), slonik_1.sql.fragment ` OR `);
if (Object.keys(booleanExpressionValues).length) {
booleanExpression = slonik_1.sql.join([
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 `),
], 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)(namedAssignmentPayload)}
WHERE ${booleanExpression}
`);
return {
rowCount: result.rowCount,
};
};
exports.updateDistinct = updateDistinct;