import type { Connection } from "../../data/connection";
import type { Compilable, CompiledQuery, QueryResult as KyselyQueryResult } from "kysely";
export type ResultHydrator<T = any> = (rows: T[]) => any;
export type ResultOptions<T = any> = {
    hydrator?: ResultHydrator<T>;
    beforeExecute?: (compiled: CompiledQuery) => void | Promise<void>;
    onError?: (error: Error) => void | Promise<void>;
    single?: boolean;
};
export type ResultJSON<T = any> = {
    data: T;
    meta: {
        items: number;
        time: number;
        sql?: string;
        parameters?: any[];
        [key: string]: any;
    };
};
export interface QueryResult<T = any> extends Omit<KyselyQueryResult<T>, "rows"> {
    time: number;
    items: number;
    data: T;
    rows: unknown[];
    sql: string;
    parameters: any[];
    count?: number;
    total?: number;
}
export declare class Result<T = unknown> {
    protected conn: Connection;
    protected options: ResultOptions<T>;
    results: QueryResult<T>[];
    time: number;
    constructor(conn: Connection, options?: ResultOptions<T>);
    get(): QueryResult<T>;
    first(): QueryResult<T>;
    get sql(): string;
    get parameters(): any[];
    get data(): T;
    execute(qb: Compilable | Compilable[]): Promise<this>;
    protected additionalMetaKeys(): string[];
    toJSON(): ResultJSON<T>;
}
