import { type DuckDBConnection, type DuckDBInstance } from '@duckdb/node-api'; import { type PreparedStatementCacheConfig } from './options.ts'; import type { PgDuckClient } from './pgduck.ts'; export type DuckDBExecutionClient = DuckDBConnection | PgDuckClient; export type DuckDBClientLike = DuckDBExecutionClient | DuckDBConnectionPool; export type RowData = Record; export interface DuckDBConnectionPool { acquire(): Promise; release(connection: DuckDBExecutionClient): void | Promise; close?(): Promise | void; } export declare function isPool(client: DuckDBClientLike): client is DuckDBConnectionPool; export interface ExecuteClientOptions { /** Return DECIMAL values as exact strings, including nested values. */ decimalMode?: 'number' | 'string'; prepareCache?: PreparedStatementCacheConfig; /** * Read top-level DECIMAL columns as exact strings instead of doubles. The * result lists those columns in `exactDecimalColumns`. */ exactDecimals?: boolean; } export type ExecuteArraysResult = { columns: string[]; rows: unknown[][]; /** Indexes of DECIMAL columns read as exact strings (see exactDecimals). */ exactDecimalColumns?: number[]; }; export interface PrepareParamsOptions { rejectStringArrayLiterals?: boolean; warnOnStringArrayLiteral?: () => void; /** Indexes of params bound to non-array columns. They are never coerced. */ scalarParamIndexes?: ReadonlySet; } export declare function prepareParams(params: unknown[], options?: PrepareParamsOptions): unknown[]; /** * Close a connection. A query still running on a node-api connection is * interrupted first, because disconnecting under it leaves its promise * pending forever. `drainTimeoutMs` bounds the wait for it to settle. */ export declare function closeClientConnection(connection: DuckDBExecutionClient, drainTimeoutMs?: number): Promise; export declare function closeDuckDbInstance(instance: DuckDBInstance): Promise; export declare function executeOnClient(client: DuckDBClientLike, query: string, params: unknown[], options?: ExecuteClientOptions): Promise; export declare function executeArraysOnClient(client: DuckDBClientLike, query: string, params: unknown[], options?: ExecuteClientOptions): Promise; export interface ExecuteInBatchesOptions { rowsPerChunk?: number; decimalMode?: 'number' | 'string'; } export interface ExecuteBatchesRawChunk { columns: string[]; rows: unknown[][]; } /** * Stream results from DuckDB in batches to avoid fully materializing rows in JS. */ export declare function executeInBatches(client: DuckDBClientLike, query: string, params: unknown[], options?: ExecuteInBatchesOptions): AsyncGenerator; export declare function executeInBatchesRaw(client: DuckDBClientLike, query: string, params: unknown[], options?: ExecuteInBatchesOptions): AsyncGenerator; /** * Return columnar results when the underlying node-api exposes an Arrow/columnar API. * Falls back to column-major JS arrays when Arrow is unavailable. */ export declare function executeArrowOnClient(client: DuckDBClientLike, query: string, params: unknown[], options?: Pick): Promise;