import { NamedTableInterceptor } from '../interceptor/NamedTableInterceptor';
import { SQLModule } from '../SQLModule';
import Where from './Where';
export default class NamedTable {
    tableName: string;
    sqlModule: SQLModule;
    _primary: string;
    logicDeleteColumn: string;
    logicDeleteValue: any;
    _columns: Record<string, any>;
    fields: string[];
    groups: string[];
    orders: string[];
    excludeColumns: Set<string>;
    defaultPrimaryValue: any;
    useLogic: boolean;
    _withBlank: boolean;
    namedTableInterceptors: NamedTableInterceptor[];
    _where: Where;
    constructor({ tableName, sqlModule, namedTableInterceptors, }: {
        tableName: string;
        sqlModule: SQLModule;
        rowMapColumnMapper?: (str: string) => string;
        namedTableInterceptors: NamedTableInterceptor[];
    });
    /**
     * 克隆
     */
    clone(): NamedTable;
    /**
     * 使用逻辑删除
     */
    logic(): this;
    /**
     * 更新空值
     */
    withBlank(): this;
    /**
     * 设置主键名，update时使用
     * 设置主键名，并设置默认主键值(主要用于insert)
     * @param primary 主键列
     * @param defaultPrimaryValue 默认值
     */
    primary(primary: string, defaultPrimaryValue?: any | Function): this;
    /**
     * 拼接where
     */
    where(): Where;
    /**
     * 设置单列的值
     * @param property
     * @param value
     */
    column(property: string, value?: any): this;
    /**
     * 设置查询的列，如`columns('a','b','c')`
     * @param properties 各项列
     */
    columns(...properties: string[]): this;
    /**
     * 设置要排除的列
     * @param property
     */
    exclude(property: string): this;
    /**
     * 设置查询的列，如`columns('a','b','c')`
     * @param properties 各项列
     */
    excludes(...properties: string[]): this;
    /**
     * 拼接`order by xxx asc/desc`
     * @param property 要排序的列
     * @param sort `asc`或`desc`
     */
    orderBy(property: string, sort?: 'asc' | 'desc'): this;
    /**
     * 拼接`order by xxx desc`
     * @param property 要排序的列
     */
    orderByDesc(property: string): this;
    /**
     * 拼接`group by`
     * @param properties 要分组的列
     */
    groupBy(...properties: string[]): this;
    /**
     * 执行插入,返回主键
     * @param data 各项列和值
     */
    insert(data: Record<string, any>): Promise<any>;
    /**
     * 执行delete语句
     */
    delete(): Promise<number>;
    /**
     * 保存到表中，当主键有值时则修改，否则插入
     * @param data 各项列和值
     * @param beforeQuery 是否根据id查询有没有数据
     */
    save(data?: Record<string, any> | boolean, beforeQuery?: boolean): Promise<any>;
    /**
     * 执行分页查询，分页条件手动传入
     * @param limit 限制条数
     * @param offset 跳过条数
     */
    page(limit: number, offset: number): Promise<import("../model/PageResult").default<Record<string, any>[]>>;
    /**
     * 执行update语句
     * @param data 各项列和值
     * @param isUpdateBlank 是否更新空值字段
     */
    update(data: Record<string, any>, isUpdateBlank?: boolean): Promise<number>;
    /**
     * 查询条数
     */
    count(): Promise<number>;
    /**
     * 判断是否存在
     */
    exists(): Promise<boolean>;
    /**
     * 查询List，并传入变量信息
     */
    select(): Promise<any[]>;
    /**
     * 执行`selectOne`查询
     */
    selectOne(): Promise<Record<string, any>>;
    /**
     * 批量插入
     * @param collection 对象数据
     * @param batchSize 批量
     */
    batchInsert(collection: Record<string, any>[], batchSize?: number): Promise<number>;
    private buildSelect;
    private buildWhere;
    private filterNotBlanks;
    private preHandle;
}
