@opengis/fastify-table
Version:
core-plugins
51 lines (35 loc) • 1.6 kB
JavaScript
import getPG from '../../plugins/pg/funcs/getPG.js';
import getSelect from '../../plugins/table/funcs/getSelect.js';
const pg = getPG();
// todo: remove dupe from npm/admin?
export default async function select(ids, options) {
if (!ids || (Array.isArray(ids) && ids.length === 0) || ids === '') {
return '';
}
const data = options.hash?.data;
if (!data && data !== false && data !== 0) return '';
try {
const idsArray = Array.isArray(ids) ? ids : [ids];
const classifier = await getSelect(data);
if (!classifier) return `Не знайдено класифікатор ${data}`;
const arr = classifier.arr || []
if (classifier.sql && typeof classifier.sql === 'string') {
const metaQuery = `SELECT * FROM (${classifier.sql})q LIMIT 0`;
const meta = await pg.query(metaQuery);
const idColumn = meta.fields[0].name;
const textColumn = meta.fields[1].name;
const q = `SELECT "${idColumn}" AS id, "${textColumn}" AS text FROM (${classifier.sql}) q WHERE "${idColumn}"::text = ANY($1::text[])`;
const values = [idsArray.map(id => String(id))];
const { rows } = await pg.query(q, values);
Object.assign(arr, rows);
}
if (!arr.length) return idsArray;
const results = idsArray.map(id => {
const result = arr.find(el => String(el.id) == String(id));
return result ? result.text : '';
});
return results.filter(Boolean).join(', ');
} catch (err) {
return `Сталася помилка.<!-- err: ${err.toString()} -->`;
}
}