You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.3 KiB
80 lines
2.3 KiB
/*
|
|
* Copyright (c) 2015-present, Vitaly Tomilov
|
|
*
|
|
* See the LICENSE file at the top-level directory of this distribution
|
|
* for licensing information.
|
|
*
|
|
* Removal or modification of this copyright notice is prohibited.
|
|
*/
|
|
|
|
const {ColumnSet} = require(`../column-set`);
|
|
|
|
const npm = {
|
|
format: require(`../../formatting`).as.format,
|
|
utils: require(`../../utils`)
|
|
};
|
|
|
|
/**
|
|
* @method helpers.sets
|
|
* @description
|
|
* Generates a string of comma-separated value-set statements from a single object: `col1=val1, col2=val2, ...`,
|
|
* to be used as part of a query.
|
|
*
|
|
* Since it is to be used as part of `UPDATE` queries, {@link helpers.Column Column} properties `cnd` and `skip` apply.
|
|
*
|
|
* @param {object} data
|
|
* A simple, non-null and non-array source object.
|
|
*
|
|
* If it is anything else, the method will throw {@link external:TypeError TypeError} = `Invalid parameter 'data' specified.`
|
|
*
|
|
* @param {array|helpers.Column|helpers.ColumnSet} [columns]
|
|
* Columns for which to set values.
|
|
*
|
|
* When not specified, properties of the `data` object are used.
|
|
*
|
|
* When no effective columns are found, an empty string is returned.
|
|
*
|
|
* @returns {string}
|
|
* - comma-separated value-set statements for the `data` object
|
|
* - an empty string, if no effective columns found
|
|
*
|
|
* @see
|
|
* {@link helpers.Column Column},
|
|
* {@link helpers.ColumnSet ColumnSet}
|
|
*
|
|
* @example
|
|
*
|
|
* const pgp = require('pg-promise')();
|
|
*
|
|
* const data = {id: 1, val: 123, msg: 'hello'};
|
|
*
|
|
* // Properties can be pulled automatically from the object:
|
|
*
|
|
* pgp.helpers.sets(data);
|
|
* //=> "id"=1,"val"=123,"msg"='hello'
|
|
*
|
|
* @example
|
|
*
|
|
* // Column details from a reusable ColumnSet (recommended for performance);
|
|
* // NOTE: Conditional columns (start with '?') are skipped:
|
|
*
|
|
* const cs = new pgp.helpers.ColumnSet(['?id','val', 'msg']);
|
|
*
|
|
* pgp.helpers.sets(data, cs);
|
|
* //=> "val"=123,"msg"='hello'
|
|
*
|
|
*/
|
|
function sets(data, columns, capSQL) {
|
|
|
|
if (!data || typeof data !== `object` || Array.isArray(data)) {
|
|
throw new TypeError(`Invalid parameter 'data' specified.`);
|
|
}
|
|
|
|
if (!(columns instanceof ColumnSet)) {
|
|
columns = new ColumnSet(columns || data);
|
|
}
|
|
|
|
return npm.format(columns.assign({source: data}), columns.prepare(data), {capSQL});
|
|
}
|
|
|
|
module.exports = {sets};
|
|
|