import { HasIsValue, ITableOrView, IWithView, __ITableOrViewPrivate } from "../utils/ITableOrView";
import type { AliasedTableOrView, OuterJoinSourceOf, WITH_VIEW } from "../utils/tableOrViewUtils";
import type { AnyDB } from "../databases";
import type { SelectData, SqlBuilder, WithSelectData } from "../sqlBuilders/SqlBuilder";
import { database, tableOrViewRef, type } from "../utils/symbols";
import { RawFragment } from "../utils/RawFragment";
import { Column } from "../utils/Column";
export declare class WithViewImpl<NAME extends string, REF extends WITH_VIEW<AnyDB, NAME>> implements IWithView<REF>, WithSelectData, __ITableOrViewPrivate {
    [database]: REF[typeof database];
    [type]: 'with';
    [tableOrViewRef]: REF;
    __sqlBuilder: SqlBuilder;
    __name: string;
    __as?: string;
    __forUseInLeftJoin?: boolean;
    __type: 'with';
    __selectData: SelectData;
    __originalWith?: WithViewImpl<any, any>;
    __ignoreWith?: boolean;
    __recursive?: boolean;
    __template?: RawFragment<any>;
    __hasExternalDependencies?: boolean;
    constructor(sqlBuilder: SqlBuilder, name: string, selectData: SelectData);
    [type]: "with";
    [tableOrViewRef]: REF;
    [database]: REF[typeof database];
    as<ALIAS extends string>(as: ALIAS): AliasedTableOrView<this, ALIAS>;
    forUseInLeftJoin(): OuterJoinSourceOf<this, ''>;
    forUseInLeftJoinAs<ALIAS extends string>(as: ALIAS): OuterJoinSourceOf<this, ALIAS>;
    __addWiths(sqlBuilder: HasIsValue, withs: Array<IWithView<any>>): void;
    __registerTableOrView(sqlBuilder: HasIsValue, requiredTablesOrViews: Set<ITableOrView<any>>): void;
    __registerRequiredColumn(sqlBuilder: HasIsValue, requiredColumns: Set<Column>, onlyForTablesOrViews: Set<ITableOrView<any>>): void;
    __getOldValues(_sqlBuilder: HasIsValue): ITableOrView<any> | undefined;
    __getValuesForInsert(_sqlBuilder: HasIsValue): ITableOrView<any> | undefined;
    __isAllowed(_sqlBuilder: HasIsValue): boolean;
}
