UNPKG

yoyomysql

Version:

一个链式连接mysql数据库的扩展包

304 lines (303 loc) 8.65 kB
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 {};