UNPKG

@opengis/bi

Version:

BI data visualization module

47 lines (37 loc) 1.5 kB
import { pgClients } from '@opengis/fastify-table/utils.js'; import insertDataQuery from './insertDataQuery.js'; const insertDataset = `insert into bi.dataset (name, table_name, dataset_file_path, column_list, pk, data_source, uid) values($1,$2,$3,$4,$5,$6,$7) returning dataset_id`; const updateAppeal = 'update datasets_appeal.appeal set dataset_id=$1, data_key=$2 where ap_id=$3'; export default async function executeQuery({ pg = pgClients.client, sql, data, name, id, table, relPath, columns, pkey, source, user, url, dataKey, }) { const client = await pg.connect(); try { await client.query('BEGIN'); // create table await client.query(sql); // insert data if (data) { const insertData = insertDataQuery(columns, data, table); await client.query(insertData); } // create dataset const args = [name || id, table, relPath, columns ? JSON.stringify(columns) : null, pkey, JSON.stringify({ type: source, appeal: id, url }), user?.uid]; const datasetId = await client.query(insertDataset, args).then(el => el.rows?.[0]?.dataset_id); if (id) { // update appeal for public only, admin w/o appeal await client.query(updateAppeal, [datasetId, dataKey, id]); } await client.query('COMMIT'); return { datasetId }; } catch (err) { await client.query('ROLLBACK'); return { error: err.toString(), status: 500 }; } finally { client.release(); } }