import type { Table } from "../types";
import type { Client } from "./Client";
import type { Query } from "./Query";
import type { QueryAnnotation } from "./QueryAnnotation";
import type { Runner } from "./Runner";
import type { Schema } from "./Schema";
/**
 * A convenient base class for most (but not all) of the queries, where the
 * Runner instance is the same for different query input shapes. If the query
 * doesn't fit the QueryBase framework (like PgQueryUpdate for instance where we
 * have separate Runner instances for separate set of updated fields), a Query
 * is used directly instead.
 */
export declare abstract class QueryBase<TTable extends Table, TInput, TOutput, TClient extends Client> implements Query<TOutput> {
    readonly schema: Schema<TTable>;
    readonly input: TInput;
    /** @ignore */
    abstract readonly RUNNER_CLASS: {
        readonly IS_WRITE: boolean;
        new (schema: Schema<TTable>, client: TClient): Runner<TInput, TOutput>;
    };
    constructor(schema: Schema<TTable>, input: TInput);
    get IS_WRITE(): boolean;
    run(client: TClient, annotation: QueryAnnotation): Promise<TOutput>;
}
//# sourceMappingURL=QueryBase.d.ts.map