import { DuckDBInstance } from '@duckdb/node-api'; import { entityKind } from 'drizzle-orm/entity'; import type { Logger } from 'drizzle-orm/logger'; import { PgDatabase } from 'drizzle-orm/pg-core/db'; import type { PgSelectBuilder, SelectedFields } from 'drizzle-orm/pg-core/query-builders'; import type { PgColumn, PgTransactionConfig } from 'drizzle-orm/pg-core'; import { type ExtractTablesWithRelations, type RelationalSchemaConfig, type TablesRelationalConfig } from 'drizzle-orm/relations'; import { type DrizzleConfig } from 'drizzle-orm/utils'; import type { SQL, SQLWrapper } from 'drizzle-orm/sql/sql'; import type { WithSubquery } from 'drizzle-orm/subquery'; import type { DuckDBClientLike, DuckDBQueryResultHKT, DuckDBTransaction } from './session.ts'; import { DuckDBSession } from './session.ts'; import { DuckDBDialect } from './dialect.ts'; import { type DuckDBSelectBuilder } from './select-builder.ts'; import type { ExecuteBatchesRawChunk, ExecuteInBatchesOptions, RowData } from './client.ts'; import { type DuckDBPoolConfig, type PoolPreset } from './pool.ts'; import { type PreparedStatementCacheConfig, type PrepareCacheOption } from './options.ts'; import { type DuckLakeConfig } from './ducklake.ts'; export interface PgDriverOptions { decimalMode?: 'number' | 'string'; logger?: Logger; rejectStringArrayLiterals?: boolean; arrayLiteralWarning?: (query: string) => void; prepareCache?: PreparedStatementCacheConfig; } export declare class DuckDBDriver { private client; private dialect; private options; static readonly [entityKind]: string; constructor(client: DuckDBClientLike, dialect: DuckDBDialect, options?: PgDriverOptions); createSession(schema: RelationalSchemaConfig | undefined): DuckDBSession, TablesRelationalConfig>; } /** Connection configuration when using path-based connection */ export interface DuckDBConnectionConfig { /** Database path: ':memory:', './file.duckdb', 'md:', 'md:database' */ path: string; /** DuckDB instance options (e.g., motherduck_token) */ options?: Record; } export interface DuckDBDrizzleConfig = Record> extends DrizzleConfig { rejectStringArrayLiterals?: boolean; arrayLiteralWarning?: (query: string) => void; prepareCache?: PrepareCacheOption; /** Opt into legacy heuristic qualification of raw SQL join operands. */ qualifyRawJoinColumns?: boolean; /** Opt into exact DECIMAL strings across execution paths. */ decimalMode?: 'number' | 'string'; /** Pool configuration. Use preset name, size config, or false to disable. */ pool?: DuckDBPoolConfig | PoolPreset | false; /** Optional DuckLake configuration */ ducklake?: DuckLakeConfig; } export interface DuckDBDrizzleConfigWithConnection = Record> extends DuckDBDrizzleConfig { /** Connection string or config object */ connection: string | DuckDBConnectionConfig; } export interface DuckDBDrizzleConfigWithClient = Record> extends DuckDBDrizzleConfig { /** Explicit client (connection or pool) */ client: DuckDBClientLike; } export declare function drizzle = Record>(connectionString: string): Promise>>; export declare function drizzle = Record>(connectionString: string, config: DuckDBDrizzleConfig): Promise>>; export declare function drizzle = Record>(config: DuckDBDrizzleConfigWithConnection): Promise>>; export declare function drizzle = Record>(config: DuckDBDrizzleConfigWithClient): DuckDBDatabase>; export declare function drizzle = Record>(client: DuckDBClientLike, config?: DuckDBDrizzleConfig): DuckDBDatabase>; export declare class DuckDBDatabase = Record, TSchema extends TablesRelationalConfig = ExtractTablesWithRelations> extends PgDatabase { readonly dialect: DuckDBDialect; readonly session: DuckDBSession; static readonly [entityKind]: string; /** The underlying connection or pool */ readonly $client: DuckDBClientLike; /** The DuckDB instance (when created from connection string) */ readonly $instance?: DuckDBInstance; constructor(dialect: DuckDBDialect, session: DuckDBSession, schema: RelationalSchemaConfig | undefined, client: DuckDBClientLike, instance?: DuckDBInstance); /** * Close the database connection pool and instance. * Should be called when shutting down the application. */ close(): Promise; private selectMethods; with(...queries: WithSubquery[]): ReturnType['with']>; select(): DuckDBSelectBuilder; select(fields: TSelection): DuckDBSelectBuilder; selectDistinct(): PgSelectBuilder; selectDistinct(fields: TSelection): PgSelectBuilder; selectDistinctOn(on: (PgColumn | SQLWrapper)[]): PgSelectBuilder; selectDistinctOn(on: (PgColumn | SQLWrapper)[], fields: TSelection): PgSelectBuilder; executeBatches(query: SQL, options?: ExecuteInBatchesOptions): AsyncGenerator; executeBatchesRaw(query: SQL, options?: ExecuteInBatchesOptions): AsyncGenerator; executeArrow(query: SQL): Promise; /** * Run a transaction. The `config` argument is deprecated: DuckDB has no * SET TRANSACTION statement, so it is ignored with a one-time warning. */ transaction(transaction: (tx: DuckDBTransaction) => Promise, config?: PgTransactionConfig): Promise; }