@opengis/fastify-table
Version:
core-plugins
46 lines (45 loc) • 1.33 kB
JavaScript
/* eslint-disable no-console */
function init(client) {
if (!client) {
return;
}
const rows = client.prepare(`WITH tables AS (
SELECT name AS table_name
FROM sqlite_master
WHERE type = 'table' AND name NOT LIKE 'sqlite_%'
),
pk_columns AS (
SELECT
m.name AS table_name,
ti.name AS column_name,
ti.pk
FROM sqlite_master m
JOIN pragma_table_info(m.name) AS ti
WHERE ti.pk = 1
)
SELECT table_name, column_name
FROM pk_columns
WHERE table_name IN (
SELECT table_name
FROM pk_columns
GROUP BY table_name
HAVING COUNT(*) = 1
)
ORDER BY table_name;`).all();
const pk = Object.fromEntries(rows.map((row) => [row.table_name, row.column_name]));
const tlist = client.prepare('SELECT name FROM sqlite_master WHERE type=\'table\' AND name NOT LIKE \'sqlite_%\';').all().reduce((acc, curr) => {
acc.push(curr.name);
return acc;
}, []);
async function query(q, args = []) {
const data = client.prepare(q.replace(/\$\d+/g, '?')).all(...args);
return Promise.resolve({ rows: data, rowCount: data.length });
}
Object.assign(client, {
query,
pk,
tlist,
});
console.log('sqlite db connected', client.name || ':memory:');
}
export default init;