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< T, ResultCollectionT extends ResultCollection > = 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; export type SqlStatement = { content: string; args: Record; fetch( params?: FetchParams // The union is for auto-completion ): Promise>; 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< FetchParams<"last_statement_first_row_scalar">, "resultCollection" > ): Promise>; /** * Execute the SQL query without fetching rows * @param params - Optional parameters */ execute( params?: Omit< FetchParams<"last_statement_first_row_scalar">, "resultCollection" > ): Promise; }; export interface SqlTemplateFunction { (strings: TemplateStringsArray, ...values: any[]): SqlStatement; } export interface DatatableSqlTemplateFunction extends SqlTemplateFunction { query(sql: string, ...params: any[]): SqlStatement; } export declare function datatable(name: string): DatatableSqlTemplateFunction; export declare function ducklake(name: string): SqlTemplateFunction;