type ResultCollection = "last_statement_all_rows" | "last_statement_first_row" | "last_statement_all_rows_scalar" | "last_statement_first_row_scalar" | "all_statements_all_rows" | "all_statements_first_row" | "all_statements_all_rows_scalar" | "all_statements_first_row_scalar" | "legacy"; type FetchParams = { resultCollection?: ResultCollectionT; }; type SqlResult = ResultCollectionT extends "last_statement_first_row" ? T | null : ResultCollectionT extends "all_statements_first_row" ? T[] : ResultCollectionT extends "last_statement_all_rows" ? T[] : ResultCollectionT extends "all_statements_all_rows" ? T[][] : ResultCollectionT extends "last_statement_all_rows_scalar" ? T[keyof T][] : ResultCollectionT extends "all_statements_all_rows_scalar" ? T[keyof T][][] : ResultCollectionT extends "last_statement_first_row_scalar" ? T[keyof T] | null : ResultCollectionT extends "all_statements_first_row_scalar" ? T[keyof T][] : unknown; /** * SQL statement object with query content, arguments, and execution methods */ export type SqlStatement = { /** Raw SQL content with formatted arguments */ content: string; /** Argument values keyed by parameter name */ args: Record; /** * Execute the SQL query and return results * @param params - Optional parameters including result collection mode * @returns Query results based on the result collection mode */ fetch(params?: FetchParams): Promise>; /** * Execute the SQL query and return only the first row * @param params - Optional parameters * @returns First row of the query result */ fetchOne(params?: Omit, "resultCollection">): Promise>; /** * Execute the SQL query and return only the first row as a scalar value * @param params - Optional parameters * @returns First row of the query result */ fetchOneScalar(params?: Omit, "resultCollection">): Promise>; /** * Execute the SQL query without fetching rows * @param params - Optional parameters */ execute(params?: Omit, "resultCollection">): Promise; }; /** * Template tag function for creating SQL statements with parameterized values */ export interface SqlTemplateFunction { (strings: TemplateStringsArray, ...values: any[]): SqlStatement; } export interface DatatableSqlTemplateFunction extends SqlTemplateFunction { query(sql: string, ...params: any[]): SqlStatement; } /** * Create a SQL template function for PostgreSQL/datatable queries * @param name - Database/datatable name (default: "main") * @returns SQL template function for building parameterized queries * @example * let sql = wmill.datatable() * let name = 'Robin' * let age = 21 * await sql` * SELECT * FROM friends * WHERE name = ${name} AND age = ${age}::int * `.fetch() */ export declare function datatable(name?: string): DatatableSqlTemplateFunction; /** * Create a SQL template function for DuckDB/ducklake queries * @param name - DuckDB database name (default: "main") * @returns SQL template function for building parameterized queries * @example * let sql = wmill.ducklake() * let name = 'Robin' * let age = 21 * await sql` * SELECT * FROM friends * WHERE name = ${name} AND age = ${age} * `.fetch() */ export declare function ducklake(name?: string): SqlTemplateFunction; export {};