import { SpecialWhere, SpecialWhereAnd } from '../misc/classes/specialWhere';
import { Settings } from '../misc/utils/settings';
export type SelectResult<T, S extends SelectFields<T>[]> = {
    [U in S[number] as U['alias'] extends string ? U['alias'] : U['field']]: U['field'] extends keyof T ? T[U['field']] : U['field'] extends string ? unknown : never;
} & object;
export type SelectFields<T> = {
    field: keyof {
        [K in keyof T as T[K] extends (...args: any[]) => any ? never : K]: T[K];
    } | string;
    alias?: string;
};
export type OrderByFields<T> = {
    field: keyof {
        [K in keyof T as T[K] extends (...args: any[]) => any ? never : K]: T[K];
    } | string;
    dir: 'ASC' | 'DESC';
}[];
export type WhereFields<T> = {
    [K in keyof T as T[K] extends (...args: any[]) => any ? never : K]?: T[K] | SpecialWhere | SpecialWhereAnd;
} & {
    [key: string]: unknown | SpecialWhere | SpecialWhereAnd;
};
export declare class QueryFactory<T> {
    private tableName;
    private settings;
    constructor(tableName: string, settings: Settings);
    createCountQuery(whereFields: WhereFields<T>): string;
    createQuery(selectFields: SelectFields<T>[], whereFields: WhereFields<T>, limit?: number, orderBy?: OrderByFields<T>, allowFiltering?: boolean): string;
    private selectFieldsFactory;
    private whereFieldsFactory;
}
