import { splitMultiStatementsSql } from "../../sql/helper.ts" import type { AnyRelations, AnySchemas } from "../orm/index.ts" import type { WithPgUnionDatabase } from "./database.ts" import { autoPgDatabaseTransaction } from "./database.ts" export interface ExecuteRawSqlOptions< Schemas extends AnySchemas, Relations extends AnyRelations, > extends WithPgUnionDatabase { sql: string } export type ExecuteRawSql = ( options: ExecuteRawSqlOptions, ) => Promise export const executeRawSql: ExecuteRawSql = async < Result, Schemas extends AnySchemas, Relations extends AnyRelations, >( options: ExecuteRawSqlOptions, ): Promise => { const { database, sql } = options const result = await autoPgDatabaseTransaction(database, async (tx) => { const sqls = splitMultiStatementsSql(sql) let result for (const sql of sqls) { result = await tx.execute(sql) } return result }) return result as Result } export type GetExecuteRawSql = ( options: ExecuteRawSqlOptions, ) => Promise export const getExecuteRawSql = () => { return async (options: ExecuteRawSqlOptions): Promise => { return await executeRawSql(options) } }