mirror of
https://github.com/hcengineering/platform.git
synced 2026-09-26 11:34:58 +02:00
30 lines
870 B
TypeScript
30 lines
870 B
TypeScript
import type postgres from 'postgres'
|
|
import type { ParameterOrJSON } from 'postgres'
|
|
import { convertArrayParams, doFetchTypes, getPrepare } from './utils'
|
|
|
|
export type DBResult = any[] & { count: number }
|
|
export interface DBClient {
|
|
execute: (query: string, parameters?: ParameterOrJSON<any>[] | undefined) => Promise<DBResult>
|
|
|
|
release: () => void
|
|
|
|
reserve: () => Promise<DBClient>
|
|
|
|
raw: () => postgres.Sql
|
|
}
|
|
|
|
export function createDBClient (client: postgres.Sql, release: () => void = () => {}): DBClient {
|
|
return {
|
|
execute: (query, parameters) =>
|
|
client.unsafe(query, doFetchTypes ? parameters : convertArrayParams(parameters), getPrepare()),
|
|
release,
|
|
reserve: async () => {
|
|
const reserved = await client.reserve()
|
|
return createDBClient(reserved, () => {
|
|
reserved.release()
|
|
})
|
|
},
|
|
raw: () => client
|
|
}
|
|
}
|