import { DeleteQueryBuilder, DeleteResult, InsertQueryBuilder, InsertResult, Selectable, SelectQueryBuilder, UpdateQueryBuilder, UpdateResult } from 'kysely';
import { PoolConnection, ResultSetHeader } from 'mysql2/promise';
import { Subscriber } from './logging';
declare type QueryType<Result, Database> = SelectQueryBuilder<Database, keyof Database, Result>;
declare type ExecuteType = InsertQueryBuilder<never, never, InsertResult> | UpdateQueryBuilder<never, never, never, UpdateResult> | DeleteQueryBuilder<never, never, DeleteResult>;
export interface Query<Database> {
    query<Result>(kyselyQb: QueryType<Result, Database>): Promise<Array<Selectable<Result>>>;
    execute(kyselyQb: ExecuteType): Promise<ResultSetHeader>;
}
export declare const queryWithSubscribers: (subscribers: Subscriber[]) => <Database>(connection: PoolConnection) => Query<Database>;
export {};
