import { QueryOptions } from './interfaces';
import { WhereCondition, JoinCondition, OrderDirection } from './types';
interface QueryState {
    type: 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE';
    table: string;
    columns: string[];
    values: any[];
    where: WhereCondition[];
    joins: JoinCondition[];
    groupBy: string[];
    having: WhereCondition[];
    orderBy: {
        column: string;
        direction: OrderDirection;
    }[];
    limit?: number;
    offset?: number;
    updateValues?: Record<string, any>;
}
export declare class QueryBuilder {
    protected state: QueryState;
    protected options: QueryOptions;
    constructor(options?: QueryOptions);
    protected reset(keepTable?: boolean): void;
    table(tableName: string): this;
    select(...columns: string[]): this;
    where(column: string, operator: string, value: any): this;
    orWhere(column: string, operator: string, value: any): this;
    join(table: string, leftColumn: string, operator: string, rightColumn: string): this;
    leftJoin(table: string, leftColumn: string, operator: string, rightColumn: string): this;
    orderBy(column: string, direction?: OrderDirection): this;
    groupBy(...columns: string[]): this;
    having(column: string, operator: string, value: any): this;
    limit(limit: number): this;
    offset(offset: number): this;
    insert(data: Record<string, any>): this;
    insertMany(records: Record<string, any>[]): this;
    update(data: Record<string, any>): this;
    delete(): this;
    getState(): QueryState;
    protected buildQuery(): string;
    protected buildParameters(): any[];
    execute<T = any>(): Promise<T[]>;
}
export {};
