import { FromItem } from './SelectFromStep';
import { Artifacts, BaseStep } from '../BaseStep';
import { All } from '../../singletoneConstants';
import { LimitStep } from './LimitStep';
import { OffsetStep } from './OffsetStep';
import { Column } from '../../database';
import { ItemInfo } from '../../ItemInfo';
import { Condition, PrimitiveType } from '../../models';
import { LogicalOperator } from '../../operators';
import { OrderByArgsElement } from '../../orderBy';
import { ReturningItem } from '../../ReturningItemInfo';
import { SelectWhereStep } from './SelectConditionStep';
import { ReturningStep } from '../ReturningStep';
import { FullOuterJoinStep, InnerJoinStep, JoinStep, LeftJoinStep, RightJoinStep } from './BaseJoinStep';
import { OrderByStep } from './OrderByStep';
import { GroupByStep } from './GroupByStep';
export declare abstract class AfterFromStep extends BaseStep {
    crossJoin(fromItem: FromItem): CrossJoinStep;
    leftJoin(fromItem: FromItem): LeftJoinStep;
    rightJoin(fromItem: FromItem): RightJoinStep;
    fullOuterJoin(fromItem: FromItem): FullOuterJoinStep;
    innerJoin(fromItem: FromItem): InnerJoinStep;
    join(fromItem: FromItem): JoinStep;
    where(condition: Condition): SelectWhereStep;
    where(left: Condition, operator: LogicalOperator, right: Condition): SelectWhereStep;
    where(left: Condition, operator1: LogicalOperator, middle: Condition, operator2: LogicalOperator, right: Condition): SelectWhereStep;
    groupBy(...groupByItems: Column[]): GroupByStep;
    limit(n: number | All | null): LimitStep;
    limit$(n: number | null): LimitStep;
    offset(n: number): OffsetStep;
    offset$(n: number): OffsetStep;
    orderBy(...orderByItems: OrderByArgsElement[]): OrderByStep;
    returning(...items: (ItemInfo | ReturningItem | PrimitiveType)[]): ReturningStep;
}
export declare class CrossJoinStep extends AfterFromStep {
    private readonly fromItem;
    constructor(prevStep: BaseStep, fromItem: FromItem);
    getStepStatement(artifacts?: Artifacts): string;
    getStepArtifacts(): Artifacts;
}
export declare class OnStep extends AfterFromStep {
    protected readonly condition: Condition;
    constructor(prevStep: BaseStep, condition: Condition);
    getStepStatement(artifacts?: Artifacts): string;
    getStepArtifacts(): Artifacts;
    or(condition: Condition): OnOrStep;
    and(condition: Condition): OnAndStep;
}
export declare class OnAndStep extends OnStep {
    getStepStatement(artifacts?: Artifacts): string;
}
export declare class OnOrStep extends OnStep {
    getStepStatement(artifacts?: Artifacts): string;
}
