diff options
| author | Ruben Beltran del Rio <jj@r.bdr.sh> | 2025-12-03 21:54:29 +0100 |
|---|---|---|
| committer | Ruben Beltran del Rio <jj@r.bdr.sh> | 2025-12-03 21:55:07 +0100 |
| commit | 89eeeb9075acec512111c9f78ed8158a556e06e4 (patch) | |
| tree | 23ab351a1a6d09255bd12f7866908761f8a473bd /src/lib/db.js | |
| parent | 587d8fe65d61b8f7217b4e8850b44e43159c16fb (diff) | |
Diffstat (limited to 'src/lib/db.js')
| -rw-r--r-- | src/lib/db.js | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/lib/db.js b/src/lib/db.js new file mode 100644 index 0000000..d6adcdf --- /dev/null +++ b/src/lib/db.js @@ -0,0 +1,51 @@ +import pg from 'pg'; +import { database } from '$lib/config'; + +const { Pool } = pg; + +const pool = new Pool(database); + +export async function query(text, params) { + const client = await pool.connect(); + try { + const result = await client.query(text, params); + return result; + } finally { + client.release(); + } +} + +export async function queryWithAbort(text, params, signal) { + if (signal?.aborted) { + throw new Error('Query aborted'); + } + + const client = await pool.connect(); + + const queryPromise = client.query(text, params); + + if (signal) { + const abortPromise = new Promise((_, reject) => { + signal.addEventListener('abort', () => { + client.release(); + reject(new Error('Query aborted')); + }, { once: true }); + }); + + try { + const result = await Promise.race([queryPromise, abortPromise]); + return result; + } finally { + client.release(); + } + } + + try { + const result = await queryPromise; + return result; + } finally { + client.release(); + } +} + +export default pool;
\ No newline at end of file |