import { entityKind } from "../entity.js"; import type { TablesRelationalConfig } from "../relations.js"; import type { PreparedQuery } from "../session.js"; import type { Query, SQL } from "../sql/sql.js"; import type { SQLiteAsyncDialect, SQLiteSyncDialect } from "./dialect.js"; import { QueryPromise } from "../query-promise.js"; import { BaseSQLiteDatabase } from "./db.js"; import type { SQLiteRaw } from "./query-builders/raw.js"; import type { SelectedFieldsOrdered } from "./query-builders/select.types.js"; export interface PreparedQueryConfig { type: 'sync' | 'async'; run: unknown; all: unknown; get: unknown; values: unknown; execute: unknown; } export declare class ExecuteResultSync extends QueryPromise { private resultCb; static readonly [entityKind]: string; constructor(resultCb: () => T); execute(): Promise; sync(): T; } export type ExecuteResult = TType extends 'async' ? Promise : ExecuteResultSync; export declare abstract class SQLitePreparedQuery implements PreparedQuery { private mode; private executeMethod; protected query: Query; static readonly [entityKind]: string; constructor(mode: 'sync' | 'async', executeMethod: SQLiteExecuteMethod, query: Query); getQuery(): Query; abstract run(placeholderValues?: Record): Result; mapRunResult(result: unknown, _isFromBatch?: boolean): unknown; abstract all(placeholderValues?: Record): Result; mapAllResult(_result: unknown, _isFromBatch?: boolean): unknown; abstract get(placeholderValues?: Record): Result; mapGetResult(_result: unknown, _isFromBatch?: boolean): unknown; abstract values(placeholderValues?: Record): Result; execute(placeholderValues?: Record): ExecuteResult; mapResult(response: unknown, isFromBatch?: boolean): unknown; } export interface SQLiteTransactionConfig { behavior?: 'deferred' | 'immediate' | 'exclusive'; } export type SQLiteExecuteMethod = 'run' | 'all' | 'get'; export declare abstract class SQLiteSession, TSchema extends TablesRelationalConfig> { static readonly [entityKind]: string; constructor( /** @internal */ dialect: { sync: SQLiteSyncDialect; async: SQLiteAsyncDialect; }[TResultKind]); abstract prepareQuery(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown): SQLitePreparedQuery; prepareOneTimeQuery(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, isResponseInArrayMode: boolean): SQLitePreparedQuery; abstract transaction(transaction: (tx: SQLiteTransaction) => Result, config?: SQLiteTransactionConfig): Result; run(query: SQL): Result; all(query: SQL): Result; get(query: SQL): Result; values(query: SQL): Result; count(sql: SQL): Promise; } export type Result = { sync: TResult; async: Promise; }[TKind]; export type DBResult = { sync: TResult; async: SQLiteRaw; }[TKind]; export declare abstract class SQLiteTransaction, TSchema extends TablesRelationalConfig> extends BaseSQLiteDatabase { protected schema: { fullSchema: Record; schema: TSchema; tableNamesMap: Record; } | undefined; protected readonly nestedIndex: number; static readonly [entityKind]: string; constructor(resultType: TResultType, dialect: { sync: SQLiteSyncDialect; async: SQLiteAsyncDialect; }[TResultType], session: SQLiteSession, schema: { fullSchema: Record; schema: TSchema; tableNamesMap: Record; } | undefined, nestedIndex?: number); rollback(): never; }