import { type ReceiveType, type Type } from '../reflection'; import { SqlInput, type Dialect } from './sql'; import type { DatabaseDriver, ExecuteResult } from './driver'; import { EntityClass, type EntityMetadata } from './metadata'; import { QueryBuilder } from './query'; import { DatabaseSchemaBuilder } from './schema'; import { DatabaseSession } from './session'; import type { DatabaseMutationInterceptor } from './mutation'; export type MutexKey = any; export interface BaseDatabaseOptions { enableLocksTable?: boolean; lockTableName?: string; } export interface DatabaseQueryObservation { id: string; phase: 'start' | 'finish'; db: BaseDatabase; sql: string; bindings: unknown[]; dialect: Dialect; operation: 'query' | 'execute'; startedAt: number; durationMs: number; error?: unknown; } export type DatabaseQueryObserver = (entry: DatabaseQueryObservation) => void; export declare function registerDatabaseQueryObserver(observer: DatabaseQueryObserver): () => void; export declare class BaseDatabase { readonly driver: DatabaseDriver; readonly entityRegistry: EntityClass[]; readonly options: Required; readonly schema: DatabaseSchemaBuilder; private readonly mutationInterceptors; constructor(driver: DatabaseDriver, entities?: EntityClass[], options?: BaseDatabaseOptions); query(Entity: EntityClass, session?: DatabaseSession): QueryBuilder; transaction(worker: (session: DatabaseSession) => Promise): Promise; withTransaction(session: DatabaseSession | undefined, worker: (session: DatabaseSession) => Promise): Promise; registerMutationInterceptor(interceptor: DatabaseMutationInterceptor): () => void; hasMutationInterceptorFor(metadata: EntityMetadata): boolean; getMutationQuerySnapshotFields(metadata: EntityMetadata): string[]; private runMutationInterceptors; withConnection(worker: (db: this) => Promise | T): Promise; rawQuery>(input: SqlInput, session?: DatabaseSession): Promise; rawFind>(input: SqlInput, session?: DatabaseSession): Promise; rawFindTyped(input: SqlInput, session: DatabaseSession | undefined, type: Type): Promise; rawFindOne>(input: SqlInput, session?: DatabaseSession): Promise; createSqlQuery(text: string, bindings?: unknown[]): import("./sql").SqlQuery; rawExecute(input: SqlInput, session?: DatabaseSession): Promise; rawFindUnsafe>(text: string, bindings?: unknown[], session?: DatabaseSession, type?: ReceiveType): Promise; rawFindOneUnsafe>(text: string, bindings?: unknown[], session?: DatabaseSession, type?: ReceiveType): Promise; rawExecuteUnsafe(text: string, bindings?: unknown[], session?: DatabaseSession, _type?: unknown): Promise; acquireSessionLock(key: MutexKey | MutexKey[], session: DatabaseSession): Promise; persist(entity: object, session?: DatabaseSession): Promise; saveEntity(entity: object, session?: DatabaseSession): Promise; deleteEntity(entity: object, session?: DatabaseSession): Promise; private loadEntitySnapshotForUpdate; } export declare function ensureMySQLLocksTable(db: BaseDatabase): Promise; export declare function flattenMutexKey(key: MutexKey | MutexKey[]): string; export declare function logSql(text: string, bindings?: unknown[]): void; //# sourceMappingURL=database.d.ts.map