import { ConditionStep } from '../ConditionStep';
import { BooleanColumn } from '../../database';
import { BaseStep, Parenthesis } from '../BaseStep';
import { Condition } from '../../models';
import { OrderByArgsElement } from '../../orderBy';
import { All } from '../../singletoneConstants';
import { LogicalOperator } from '../../operators';
import { OffsetStep } from './OffsetStep';
import { LimitStep } from './LimitStep';
import { OrderByStep } from './OrderByStep';
declare abstract class HavingConditionStep extends ConditionStep {
    and(condition: Condition): HavingAndStep;
    and(left: Condition, operator: LogicalOperator, right: Condition): HavingAndStep;
    and(left: Condition, operator1: LogicalOperator, middle: Condition, operator2: LogicalOperator, right: Condition): HavingAndStep;
    or(condition: Condition): HavingOrStep;
    or(left: Condition, operator: LogicalOperator, right: Condition): HavingOrStep;
    or(left: Condition, operator1: LogicalOperator, middle: Condition, operator2: LogicalOperator, right: Condition): HavingOrStep;
    orderBy(...orderByItems: OrderByArgsElement[]): OrderByStep;
    limit(n: null | number | All): LimitStep;
    limit$(n: null | number): LimitStep;
    offset(n: number): OffsetStep;
    offset$(n: number): OffsetStep;
}
export declare class HavingStep extends HavingConditionStep {
    constructor(step: BaseStep, havingParts: (Condition | LogicalOperator | BooleanColumn | Parenthesis)[]);
}
export declare class HavingAndStep extends HavingConditionStep {
    constructor(step: BaseStep, havingParts: (Condition | LogicalOperator | BooleanColumn | Parenthesis)[]);
}
export declare class HavingOrStep extends HavingConditionStep {
    constructor(step: BaseStep, havingParts: (Condition | LogicalOperator | BooleanColumn | Parenthesis)[]);
}
export {};
