19 lines
927 B
TypeScript
19 lines
927 B
TypeScript
import { sql } from "drizzle-orm"
|
|
import type { db } from "../../db/index.js"
|
|
import type { CollectorRead } from "./signals-from-collectors.js"
|
|
|
|
/** Bind internal collector SELECTs to the caller's read-only transaction, including all values. */
|
|
export function createCollectorContextReader(context: Pick<typeof db, "execute">): CollectorRead {
|
|
return async <T extends object>(query: string, params: unknown[] = []): Promise<T[]> => {
|
|
const parts = query.split("?")
|
|
if (parts.length !== params.length + 1) throw Error("Неверные параметры запроса источников оповещений")
|
|
const statement = sql.empty()
|
|
for (let index = 0; index < parts.length; index++) {
|
|
statement.append(sql.raw(parts[index]))
|
|
if (index < params.length) statement.append(sql`${params[index]}`)
|
|
}
|
|
const result = await context.execute(statement)
|
|
return result.rows as T[]
|
|
}
|
|
}
|