UNPKG

slonik-utilities

Version:

Utilities for manipulating data in PostgreSQL database using Slonik.

52 lines (51 loc) 1.91 kB
"use strict"; /* 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;