UNPKG

@opengis/fastify-table

Version:

core-plugins

40 lines (39 loc) 1.7 kB
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()} -->`; } }