import type { Connection } from './Connection'; import type { AbstractBean } from './AbstractBean'; import type { Filter } from './QueryBuilder'; export interface BeanCtor { new (): B; /** Set by code generator. */ tableName: string; /** Set by code generator. */ schemaName: string; /** Set by code generator. */ primaryKey: readonly string[]; /** Set by code generator. Columns whose value is generated server-side (e.g. auto-increment / DEFAULT). */ generatedColumns: readonly string[]; } export interface FindOptions { orderBy?: string; limit?: number; offset?: number; } export declare abstract class AbstractDao { readonly connection: Connection; protected abstract beanClass: BeanCtor; constructor(connection: Connection); protected get qb(): import("./QueryBuilder").QueryBuilder; protected get driver(): import("..").Driver; findAll(opts?: FindOptions): Promise; find(filter?: Filter, opts?: FindOptions): Promise; findOne(filter: Filter): Promise; findById(...pkValues: unknown[]): Promise; count(filter?: Filter): Promise; /** Create a new (unsaved) bean. */ create(): B; save(bean: B): Promise; delete(bean: B): Promise; protected _insert(bean: B): Promise; protected _update(bean: B): Promise; protected _extractPk(bean: B): Record; /** Hydrate (or return cached) bean from a raw DB row. */ _materialize(row: Record): B; }