export interface MssqlDialectConfig { /** * This dialect uses the `tarn` package to manage the connection pool to your * database. To use it as a peer dependency and not bundle it with Kysely's code, * you need to pass the `tarn` package itself. You also need to pass some pool options * (excluding `create`, `destroy` and `validate` functions which are controlled by this dialect), * `min` & `max` connections at the very least. * * Example: * * ```ts * import * as Tarn from 'tarn' * * const dialect = new MssqlDialect({ * // ... * tarn: { * ...Tarn, * options: { * // ... * min: 0, * max: 10, * }, * }, * }) * ``` */ tarn: Tarn; /** * This dialect uses the `tedious` package to communicate with your MS SQL Server * database. To use it as a peer dependency and not bundle it with Kysely's code, * you need to pass the `tedious` package itself. You also need to pass a factory * function that creates new `tedious` `Connection` instances on demand. * * Example: * * ```ts * import * as Tedious from 'tedious' * * const dialect = new MssqlDialect({ * // ... * tedious: { * ...Tedious, * connectionFactory: () => new Tedious.Connection({ ... }), * }, * }) * ``` */ tedious: Tedious; } export interface Tedious { connectionFactory: () => TediousConnection | Promise; ISOLATION_LEVEL: TediousIsolationLevel; Request: typeof TediousRequest; TYPES: TediousTypes; } export type TediousIsolationLevel = Record<'NO_CHANGE' | 'READ_UNCOMMITTED' | 'READ_COMMITTED' | 'REPEATABLE_READ' | 'SERIALIZABLE' | 'SNAPSHOT', number>; export type TediousTypes = Record<'BigInt' | 'Binary' | 'Bit' | 'Char' | 'Date' | 'DateTime' | 'DateTime2' | 'DateTimeOffset' | 'Decimal' | 'Float' | 'Image' | 'Int' | 'Money' | 'NChar' | 'NText' | 'Null' | 'Numeric' | 'NVarChar' | 'Real' | 'SmallDateTime' | 'SmallInt' | 'SmallMoney' | 'Text' | 'Time' | 'TinyInt' | 'TVP' | 'UDT' | 'UniqueIdentifier' | 'VarBinary' | 'VarChar' | 'Xml', { name: string; type: string; }>; export interface TediousType { name: string; type: string; } export interface TediousConnection { beginTransaction(callback: (error?: Error) => void, transactionId?: string | undefined, isolationLevel?: number | undefined): void; cancel(): void; close(): void; commitTransaction(callback: (error?: Error) => void): void; connect(callback: (error?: Error) => void): void; execSql(request: TediousRequest): void; reset(callback: (error?: Error) => void): void; rollbackTransaction(callback: (error?: Error) => void): void; once(event: 'end', listener: () => void): void; } export declare class TediousRequest { constructor(sql: string, callback: (error: Error, rowCount: number, rows: any[]) => void); addParameter(name: string, type: TediousType, value: any, options?: { length?: number | 'max' | undefined; precision?: number | undefined; scale?: number | undefined; }): void; off(event: 'row', listener: (...args: any[]) => void): void; on(event: 'row', listener: (columns: TediousColumnValue[]) => void): void; once(event: 'requestCompleted', listener: (...args: any[]) => void): void; } export interface TediousColumnValue { metadata: { colName: string; }; value: any; } export interface Tarn { /** * Tarn.js' pool options, excluding `create`, `destroy` and `validate` functions, * which must be implemented by this dialect. */ options: Omit, 'create' | 'destroy' | 'validate'>; /** * Tarn.js' Pool class. * * Example: * * ```ts * import { Pool } from 'tarn' * * const dialect = new MssqlDialect({ * // ... * tarn: { * // ... * Pool, * }, * }) * ``` */ Pool: typeof TarnPool; } export declare class TarnPool { constructor(opt: TarnPoolOptions); acquire(): TarnPendingRequest; destroy(): any; release(resource: R): void; } export interface TarnPoolOptions { acquireTimeoutMillis?: number; create(cb: (err: Error | null, resource: R) => void): any | (() => Promise); createRetryIntervalMillis?: number; createTimeoutMillis?: number; destroy(resource: R): any; destroyTimeoutMillis?: number; idleTimeoutMillis?: number; log?(msg: string): any; max: number; min: number; propagateCreateError?: boolean; reapIntervalMillis?: number; validate(resource: R): boolean; } export interface TarnPendingRequest { promise: Promise; resolve: (resource: R) => void; reject: (err: Error) => void; }