import type { CompiledQuery } from '../query-compiler/compiled-query.js'; import type { AbortableOperationOptions } from '../util/abort.js'; /** * A single connection to the database engine. * * These are created by an instance of {@link Driver}. */ export interface DatabaseConnection { /** * Used by executors to cancel the inflight query on the database side. */ cancelQuery?(controlConnectionProvider: ControlConnectionProvider): Promise; /** * Used by executors to prepare the connection for operations on the database side. */ collectSessionInfo?(): Promise; executeQuery(compiledQuery: CompiledQuery, options?: AbortableOperationOptions): Promise>; /** * Used by executors to kill the session on the database side. */ killSession?(controlConnectionProvider: ControlConnectionProvider): Promise; streamQuery(compiledQuery: CompiledQuery, chunkSize: number, options?: AbortableOperationOptions): AsyncIterableIterator>; } export type ControlConnectionProvider = (consumer: (connection: DatabaseConnection) => Promise) => Promise; export interface QueryResult { /** * This is defined for insert, update, delete and merge queries and contains * the number of rows the query inserted/updated/deleted. */ readonly numAffectedRows?: bigint; /** * This is defined for update queries and contains the number of rows * the query changed. * * This is **optional** and only provided in dialects such as MySQL. * You would probably use {@link numAffectedRows} in most cases. */ readonly numChangedRows?: bigint; /** * This is defined for insert queries on dialects that return * the auto incrementing primary key from an insert. */ readonly insertId?: bigint; /** * The rows returned by the query. This is always defined and is * empty if the query returned no rows. */ readonly rows: O[]; }