import { LambdaExpression } from "lambda-expression";
import { ExpressionOrColumn, ExpressionProjection, ParamType, ValueTypeToParse, ExpressionQuery } from "../core/utils";
import { WhereCompiled } from "./where-compiled";
import { Condition } from "./enums/condition";
import { WhereBaseBuilderContract } from "./where-base-builder-contract";
import { ColumnParams } from "../core/column-params";
import { ColumnRef } from "../core/column-ref";
import { ProjectionsHelper } from "../core/projections-helper";
import { SqlCompilable } from "./sql-compilable";
export declare abstract class WhereBaseBuilder<T, TExpression, TWhere extends WhereBaseBuilder<T, TExpression, TWhere>> implements WhereBaseBuilderContract<T, TExpression, TWhere> {
    private _typeT;
    private _alias;
    private static readonly AND;
    private static readonly OR;
    private _where;
    private _params;
    private _pendingConditions;
    private _pendingAndOr;
    private readonly _databaseHelper;
    constructor(_typeT: new () => T, _alias: string);
    proj(): ProjectionsHelper<T>;
    concat(...projections: Array<ExpressionProjection<any, T>>): ProjectionsHelper<T>;
    coalesce<TExpressionReturn>(expression: ExpressionQuery<TExpressionReturn, T>, argumentsCoalesce: any[], alias?: string, args?: any[]): ProjectionsHelper<T>;
    ref<TExpressionReturn>(expression: ExpressionOrColumn<TExpressionReturn, T>, alias?: string): ColumnRef;
    not(): TWhere;
    and(): TWhere;
    or(): TWhere;
    scope(scopeCallback: (scope: TWhere) => void): TWhere;
    /**
     * @deprecated Use `equal`
     * @param expression
     * @param column
     */
    equalColumn(expression: TExpression, column: string): TWhere;
    /**
     * @deprecated use `equal`
     */
    equalValue(expression: TExpression, value: ValueTypeToParse): TWhere;
    equal(expression1: TExpression, expression2: TExpression): TWhere;
    /**
     * @deprecated use `like`
     */
    likeValue(expression: TExpression, value: string): TWhere;
    like(expression1: TExpression, expression2: TExpression): TWhere;
    multiColumnLike(like: string, separator: string, ...columns: TExpression[]): TWhere;
    contains(expression: TExpression, value: string): TWhere;
    startsWith(expression: TExpression, value: string): TWhere;
    endsWith(expression: TExpression, value: string): TWhere;
    isNull(expression1: TExpression): TWhere;
    /**
     * @deprecated use `great`
     */
    greatValue(expression: TExpression, value: ValueTypeToParse): TWhere;
    great(expression1: TExpression, expression2: TExpression): TWhere;
    /**
     * @deprecated use `greatAndEqual`
     */
    greatAndEqualValue(expression: TExpression, value: ValueTypeToParse): TWhere;
    greatAndEqual(expression1: TExpression, expression2: TExpression): TWhere;
    /**
     * @deprecated use `less`
     */
    lessValue(expression: TExpression, value: ValueTypeToParse): TWhere;
    less(expression1: TExpression, expression2: TExpression): TWhere;
    /**
     * @deprecated use `lessAndEqual`
     */
    lessAndEqualValue(expression: TExpression, value: ValueTypeToParse): TWhere;
    lessAndEqual(expression1: TExpression, expression2: TExpression): TWhere;
    /**
     * @deprecated use `between`
     */
    betweenValue(expression: TExpression, value1: ValueTypeToParse, value2: ValueTypeToParse): TWhere;
    between(expression: TExpression, startExpression: TExpression, endExpression: TExpression): TWhere;
    /**
     * @deprecated use `in`
     */
    inValues(expression: TExpression, values: ValueTypeToParse[]): TWhere;
    in(expression: TExpression, valuesOrQuery: ValueTypeToParse[] | SqlCompilable): TWhere;
    /**
     * @deprecated use `in`
     */
    inSelect(expression: TExpression, query: SqlCompilable): TWhere;
    compile(): WhereCompiled;
    expression(expression: LambdaExpression<T>): TWhere;
    _addParams(params: ParamType[]): TWhere;
    protected abstract _getInstance(): TWhere;
    protected abstract _create(typeT: new () => T, alias: string): TWhere;
    protected abstract getColumnParams(expression: TExpression): ColumnParams;
    protected buildWhereWithExpressionOrValue(condition: Condition[], expression1: TExpression, expression2: TExpression): void;
    protected buildWhereColumn(condition: Condition[], ...valuesOrColumns: Array<ColumnParams | string | ValueTypeToParse[]>): void;
    protected buildWhereParams(condition: Condition[], columns: string[], params: ValueTypeToParse[]): void;
    protected buildWhere(conditions: Condition[], columns: string[]): void;
    protected addParam(param: ValueTypeToParse | ValueTypeToParse[]): void;
    private processParam;
    private buildWhereMetadata;
    private addValueParam;
    private createWhere;
    private conditionIsNull;
    private buildConditions;
    private builderConditions;
    private checkWhere;
    private compileScope;
}
