@opengis/bi
Version:
BI data visualization module
47 lines (37 loc) • 1.5 kB
JavaScript
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();
}
}