import type { Type, QueryOptions, QueryUpdateResult, QuerySearch, Query, QueryConflictPaths } from '../type/index.js';
import type { AbstractSqlDialect } from '../dialect/index.js';
import { AbstractQuerier } from './abstractQuerier.js';
export declare abstract class AbstractSqlQuerier extends AbstractQuerier {
    readonly dialect: AbstractSqlDialect;
    private hasPendingTransaction?;
    constructor(dialect: AbstractSqlDialect);
    /**
     * read query.
     * @param query the query
     */
    abstract all<T>(query: string): Promise<T[]>;
    /**
     * insert/update/delete/ddl query.
     * @param query the query
     */
    abstract run(query: string): Promise<QueryUpdateResult>;
    findMany<E>(entity: Type<E>, q: Query<E>): Promise<E[]>;
    count<E>(entity: Type<E>, q?: QuerySearch<E>): Promise<number>;
    insertMany<E>(entity: Type<E>, payload: E[]): Promise<E[import("../type/entity.js").IdKey<E>][]>;
    updateMany<E>(entity: Type<E>, q: QuerySearch<E>, payload: E): Promise<number>;
    upsertOne<E>(entity: Type<E>, conflictPaths: QueryConflictPaths<E>, payload: E): Promise<QueryUpdateResult>;
    deleteMany<E>(entity: Type<E>, q: QuerySearch<E>, opts?: QueryOptions): Promise<number>;
    get hasOpenTransaction(): boolean;
    beginTransaction(): Promise<void>;
    commitTransaction(): Promise<void>;
    rollbackTransaction(): Promise<void>;
}
