import type { DatabaseAdapter, DatabaseResult, ColumnInfo, FieldDefinition } from "../types.js"; export interface MssqlConfig { host?: string; port?: number; user?: string; password?: string; database?: string; connectionString?: string; options?: Record; } export declare class MssqlAdapter implements DatabaseAdapter { private config; /** * Postgres, MySQL and MSSQL all REQUIRE a name for a derived table, so * the COUNT probe in Database.countProbe wraps as * `FROM (sql) AS _count_query`. SQLite and Firebird leave this unset and * get no alias - Firebird rejects `AS` in that position. */ readonly countSubqueryAlias = "_count_query"; private connection; private _lastInsertId; private _inTransaction; constructor(config: MssqlConfig | string); /** Connect to MSSQL. Must be called before using the adapter. */ /** ADR-0044 required adapter capability. */ getDatabaseType(): string; /** ADR-0044: readable/writable native boolean. */ autocommit: boolean; /** * ADR-0044 / DBA-P02: every built-in adapter can guarantee an atomic * multi-row batch by default. A test-only deployment representing one * that cannot sets this false so executeMany rejects BEFORE the first * write rather than risking partial durability. */ supportsAtomicBatch: boolean; connect(): Promise; private parseUrl; private ensureConnected; /** Translate SQL for MSSQL dialect. */ translateSql(sql: string): string; private execSqlPromise; /** * Convert ? placeholders to @p0, @p1, ... for tedious. * * `startAt` lets a caller that has already consumed N placeholders (an UPDATE * whose SET values are @p0..@p{N-1}) continue the numbering into a raw WHERE * fragment instead of restarting at @p0. */ private convertPlaceholders; execute(sql: string, params?: unknown[]): unknown; executeMany(sql: string, paramsList: unknown[][]): { totalAffected: number; lastId?: number | bigint; }; executeManyAsync(sql: string, paramsList: unknown[][]): Promise<{ totalAffected: number; lastId?: number | bigint; }>; executeAsync(sql: string, params?: unknown[]): Promise; query>(sql: string, params?: unknown[]): T[]; queryAsync>(sql: string, params?: unknown[]): Promise; fetch>(sql: string, params?: unknown[], limit?: number, skip?: number): T[]; fetchAsync>(sql: string, params?: unknown[], limit?: number, skip?: number): Promise; fetchOne>(sql: string, params?: unknown[]): T | null; fetchOneAsync>(sql: string, params?: unknown[]): Promise; insert(table: string, data: Record | Record[]): DatabaseResult; insertAsync(table: string, data: Record | Record[]): Promise; update(table: string, data: Record, filter: Record, params?: unknown[]): DatabaseResult; updateAsync(table: string, data: Record, filter: Record | string, params?: unknown[]): Promise; delete(table: string, filter: Record, params?: unknown[]): DatabaseResult; deleteAsync(table: string, filter: Record | string, params?: unknown[]): Promise; startTransaction(): void; startTransactionAsync(): Promise; commit(): void; commitAsync(): Promise; rollback(): void; rollbackAsync(): Promise; getTables(): string[]; tablesAsync(): Promise; getColumns(table: string): ColumnInfo[]; columnsAsync(table: string): Promise; lastInsertId(): number | bigint | null; close(): void; tableExists(name: string): boolean; tableExistsAsync(name: string): Promise; createTable(name: string, columns: Record): void; createTableAsync(name: string, columns: Record): Promise; }