import mysql from 'mysql2/promise';
/**排序规则 */
type Order = 'ASC' | 'DESC';
type whereArr = Array<[string, operator, any]>;
/**查询结果集 */
type resultSet = {
    data: any[];
    count: number;
    maxCount: number;
    fields: mysql.FieldPacket[];
};
/**查询结果集分页 */
type resultSetPages = {
    data: any[];
    count: number;
    maxCount: number;
    fields: mysql.FieldPacket[];
    maxPage?: number;
};
/**运算符 */
type operator = '=' | '<>' | '<' | '<=' | '>' | '>=' | 'LIKE' | 'IN' | 'NOT IN' | 'IS NULL' | 'IS NOT NULL' | 'BETWEEN' | 'NOT BETWEEN' | 'REGEXP' | 'NOT REGEXP' | 'NOT LIKE';
/**事务连接 */
type TransactionConn = {
    table: (table: string) => YoyoMysqlClass;
    /**
     * 执行sql语句
     * @param sql sql语句
     * @param values 参数
     * @returns
     */
    execute: (sql: string, values?: any) => Promise<[Array<{
        [key: string]: any;
    }>, mysql.FieldPacket[]] | mysql.ResultSetHeader>;
    /**
     * 执行sql查询语句
     * @param sql sql语句
     * @param values 参数
     * @returns
     */
    query: (sql: string, values?: any) => Promise<[Array<{
        [key: string]: any;
    }>, mysql.FieldPacket[]]>;
};
export default class YoyoMysql {
    private static _POOL;
    /** 是否显示sql语句 */
    static isShowSql: boolean;
    /**
     * 设置打印sql语句的方法
     * @param sql sql语句
     * @param highlightSQL 高亮sql方法
     */
    static printMethod: (sql: string, highlightSQL: (sql: string) => void) => void;
    /**
     * 创建连接池
     * @param config mysql.PoolOptions
     * @returns
     */
    static createPool(config: mysql.PoolOptions): typeof YoyoMysql;
    /**
     * 设置表名
     * @param table 表名
     * @returns
     */
    static table(table: string): YoyoMysqlClass;
    /**
     * 开启事务（在(执行结束-提交)或者(报错时-回滚)自动释放连接）
     * @param callback 回调函数
     * @param isError 是否开启错误信息抛出（勾选后错误将直接抛出，需要外围拦截）
     */
    static beginTransaction(callback: (conn: TransactionConn) => Promise<any>, isError?: boolean): Promise<boolean>;
    /**
     * 获取一条连接（在执行结束或者报错时自动释放连接）
     * @param callback 回调函数
     */
    static getOneConnection(callback: (conn: TransactionConn) => Promise<any>): Promise<any>;
    static query(sql: string, values?: any): Promise<[Array<{
        [key: string]: any;
    }>, mysql.FieldPacket[]]>;
    static execute(sql: string, values?: any): Promise<[Array<{
        [key: string]: any;
    }>, mysql.FieldPacket[]]>;
    /**
     * 设置额外指定连接池
     * @param pool 连接池
     */
    static setPool(pool: mysql.Pool): void;
}
/**
 * YoyoMysql 连接方式默认采用 mysql2连接池方式处理
 */
declare class YoyoMysqlClass {
    private _link;
    private _table?;
    private _fields;
    private _clogic;
    private _where;
    private _group;
    private _having;
    private _order;
    private _join;
    private _limit;
    constructor(link: mysql.PoolConnection | mysql.Pool);
    /**
     * 设置表名
     * @param table 表名
     * @returns
     */
    table(table: string): this;
    /**
     * 添加查询字段
     * @param field 字段名
     */
    field(field: string): this;
    /**
     * 添加多个查询字段
     * @param fields 字段名数组
     */
    field(fields: Array<string>): this;
    /**
     * 对查询结果集进行排序
     * @param field 字段名
     * @param order 排序方式 (ASC|DESC)
     */
    order(field: string, order?: Order): this;
    /**
     * 对查询结果集进行排序
     * @param field 字段名
     * @param order 排序方式 (ASC|DESC)
     * @returns
     */
    order(fields: Record<string, Order> | string): this;
    /**
     * 添加多个字段分组
     * @param fieldArr 字段数组
     */
    group(fieldArr: Array<string>): this;
    /**
     * 添加一个字段分组
     * @param field 字段名
     * @returns
     */
    group(field: string): this;
    /**
     * 过滤由 GROUP BY 产生的结果集中的重复记录
     * @param where 条件(字符串自行组合)
     * @returns
     */
    having(where: string): this;
    /**
     * 添加结果集返回数量限制
     * @param limit 返回数量
     * @param offset 偏移量
     */
    limit(limit: number, offset?: number): this;
    /**
     * 多表联查[左查询](LEFT JOIN)
     * @param table 表名
     * @param where 条件(字符串自行组合)
     * @returns
     */
    leftJoin(table: string, where: string): this;
    /**
     * 多表联查[右查询](RIGHT JOIN)
     * @param table 表名
     * @param where 条件(字符串自行组合)
     * @returns
     */
    rightJoin(table: string, where: string): this;
    /**
     * 多表联查[等值查询](INNER JOIN)
     * @param {string} table 表
     * @param {string} where 条件
     */
    join(table: string, where: string): this;
    /**
     * 多表联查[一个匹配填充null返回](FULL JOIN)
     * @param {string} table 表
     * @param {string} where 条件
     */
    fullJoin(table: string, where: string): this;
    /**
     * where集合处理方法(包含where的AND和OR)
     * @param field 字段名
     * @param args 参数
     * @returns
     */
    private _whereComposite;
    /**
     * 添加一条IN条件(子查询)
     * @param field 字段名
     * @param callback 回调函数
     * @returns
     */
    whereIn(field: string, callback: () => this): this;
    /**
     * 添加一条AND条件
     * @param field 字段名
     * @param operator 操作符
     * @param value 值
     */
    where(field: string, operator: operator, value: any): this;
    /**
     * 添加一条AND条件(默认操作符是 =)
     * @param field 字段名
     * @param value 值
     */
    where(field: string, value: (string | number) | Record<string, (string | number)>): this;
    /**
     * 添加一条AND条件(子查询)
     * @param field 字段名
     * @param callback 回调函数
     * @returns
     */
    where(field: string, callback: () => this): this;
    where(whereArr: whereArr): this;
    /**
    * 添加一条OR条件
    * @param field 字段名
    * @param operator 操作符
    * @param value 值
    */
    whereOr(field: string, operator: operator, value: any): this;
    /**
     * 添加一条OR条件(默认操作符是 =)
     * @param field 字段名
     * @param value 值
     */
    whereOr(field: string, value: (string | number) | Record<string, (string | number)>): this;
    /**
     * 添加一条OR条件(子查询)
     * @param field 字段名
     * @param callback 回调函数
     * @returns
     */
    whereOr(field: string, callback: () => this): this;
    whereOr(whereArr: whereArr): this;
    /**
     * 查询指定条件的单条数据
     */
    find(): Promise<Record<string, any> | null>;
    /**
     * 查询指定条件的数据
     * @returns 返回resultSet对象
     */
    select(): Promise<resultSet>;
    /**
     * 查询指定条件的数据
     * @param page 访问的页数
     * @param count 每页显示的条数
     * @returns 返回resultSet对象
     */
    pages(page?: number, count?: number): Promise<resultSetPages>;
    /**
     * 删除指定条件的数据
     * @returns 返回ResultSetHeader对象
     */
    delete(): Promise<mysql.ResultSetHeader>;
    /**
     * 插入一条或者多条数据
     * @param data 数据
     */
    insert(data: any[][] | Record<string, any> | Record<string, any>[] | any[]): Promise<mysql.ResultSetHeader>;
    /**
     * 修改指定条件的所有数据
     * @param data 数据
     */
    update(data: Record<string, (number | string)> | [string, string][] | [string, string]): Promise<mysql.ResultSetHeader>;
    /**
     * 构建where条件
     * @returns {where: string;params: any[]}
     */
    private buildWhere;
    /**
     * 构建Select类型的语句
     */
    private buildSelect;
    /**
     * 构建Delete类型的语句
     */
    private buildDelete;
    /**
     * 构建Insert类型的语句
     * @param data 数据
     * @returns
     */
    private buildInsert;
    /**
     * 构建Update类型的语句
     */
    private buildUpdate;
    /**
     * 构建sql语句
     * @param type 类型
     * @param data 数据(insert数据结构和|update数据结构)
     * @returns
     */
    buildSql(type?: 'select' | 'insert' | 'update' | 'delete', data?: any): {
        sql: string;
        params: any[];
    };
}
export {};
