import type { Database, QueryResult } from './database.js'; export async function pgFirst( db: Database, sql: string, values: readonly unknown[] = [], ): Promise { return (await db.query(sql, values)).rows[0] ?? null; } export async function pgAll( db: Database, sql: string, values: readonly unknown[] = [], ): Promise { return (await db.query(sql, values)).rows; } export async function pgRun>( db: Database, sql: string, values: readonly unknown[] = [], ): Promise> { return db.query(sql, values); } /** Atomic unconditional statements. Use a transaction callback for branching on rowCount. */ export async function pgBatch( db: Database, statements: readonly { sql: string; values?: readonly unknown[] }[], ): Promise>[]> { if (statements.length === 0) return []; return db.transaction(async (tx) => { const results: QueryResult>[] = []; for (const statement of statements) { results.push(await tx.query(statement.sql, statement.values ?? [])); } return results; }); }