UNPKG

@dpapejs/emysql

Version:

🛠️ Based on the basic secondary package of `mysql`, the pursuit of creating a simple and easy to use `mysql-ORM` library.

633 lines (632 loc) 13.8 kB
import mysql, { Pool } from 'mysql2/promise'; /** * table d.ts */ /** * mysql 存储引擎 */ export type TABLE_ENGINE = 'InnoDB' | 'MyISAM' | 'MEMORY' | 'PERFORMANCE_SCHEMA' | 'MRG_MYISAM' | 'BLACKHOLE' | 'CSV' | 'ARCHIVE'; /** * 批量更新类型 * @DUPLICATE 唯一索引批量更新 * @CASE_WHEN CASE WHEN THEN 语句批量更新 * @TEMPORARY 临时表批量更新 */ export type BATCH_TYPE = 'DUPLICATE' | 'CASE_WHEN' | 'TEMPORARY'; /** * 批量唯一索引批量更新参数 */ export interface BATCH_DUPLICATE { type: 'DUPLICATE'; params: DuplicateUpdateParam; } /** * CASE WHEN THEN 语句批量更新 */ export interface BATCH_CASE_WHEN { type: 'CASE_WHEN'; params: BatchUpdateParam; } /** * CASE WHEN THEN 语句批量更新参数 */ export interface BatchUpdateParam extends BaseChangeParam { /** * 条件字段 */ conditionField: string; /** * 数据 */ data: IAnyObject[]; } /** * 临时表批量更新 */ export interface BATCH_TEMPORARY { type: 'TEMPORARY'; params: BatchUpdateParam; } /** * 批量更新数据参数 */ export type BATCH_UPDATE_PARAMS = BATCH_DUPLICATE | BATCH_CASE_WHEN | BATCH_TEMPORARY; /** * 表配置 */ export interface TableOption { /** * 表名 */ tableName: string; /** * 表字段 */ columns: ColumnOption[]; /** * 定义存储文本数据时使用的编码. default: utf8mb4 */ charset?: string; /** * 定义字符排序和比较规则的关键字. default: utf8mb4_0900_bin */ collate?: string; /** * 存储引擎. default: InnoDB */ engine?: TABLE_ENGINE; } /** * 表字段类型 */ export type COLUMN_DATA_TYPE = 'INT' | 'BINARY' | 'BIGINT' | 'BIT' | 'BLOB' | 'CHAR' | 'DATE' | 'DATETIME' | 'DECIMAL' | 'DOUBLE' | 'ENUM' | 'FLOAT' | 'GEOMETRY' | 'GEOMETRYCOLLECTION' | 'INTEGER' | 'JSON' | 'LINESTRING' | 'LONGBLOB' | 'LONGTEXT' | 'MEDIUMBLOB' | 'MEDIUMINT' | 'MEDIUMTEXT' | 'MULTILINESTRING' | 'MULTIPOINT' | 'MULTIPOLYGON' | 'NUMERIC' | 'POINT' | 'POLYGON' | 'REAL' | 'SET' | 'SMALLINT' | 'TEXT' | 'TIME' | 'TIMESTAMP' | 'TINYBLOB' | 'TINYINT' | 'TINYTEXT' | 'VARBINARY' | 'VARCHAR' | 'YEAR'; /** * 表字段配置信息 */ export interface ColumnOption { name: string; dataType: COLUMN_DATA_TYPE; length?: number; point?: number; primaryKey?: boolean; notNull?: boolean; unique?: boolean; unsigned?: boolean; zeroFill?: boolean; autoIncrement?: boolean; comments?: string; defaultValue?: any; } /** * 日志类型,debug:开发,error:只有错误才抛出日志。none:关闭日志 */ export type LOG_TYPE = 'debug' | 'error' | 'none'; /** * 连接数据配置参数 */ export interface ConnOption { /** * 数据库服务host. 默认:127.0.0.1 */ host?: string; /** * 数据库连接端口。 默认:3306 */ port?: number; /** * 数据库连接登录用户名 */ user: string; /** * 数据库连接登录密码 */ password: string; /** * 数据库最大连接数 */ connectionLimit?: number; /** * 数据库名称 */ database: string; /** * 日志输出类型 */ log?: LOG_TYPE; } /** * 表参数配置 */ export interface TableConfig { /** * 表名 */ name: string; /** * 表别名 */ alias?: string; } export interface TransactionChange { /** * 执行数据插入语句 * * Execute the data insert statement */ insert(v: InsertParam): Promise<mysql.QueryResult>; /** * 执行数据批量更新语句 * * Execute data batch update statements */ batchUpdate(v: BATCH_UPDATE_PARAMS): Promise<mysql.QueryResult>; /** * 执行数据删除语句 * * Execute a data delete statement */ delete(v: DeleteParam): Promise<mysql.QueryResult>; /** * 执行数据更新语句 * * Execute the data update statement */ update(v: UpdateParam): Promise<mysql.QueryResult>; } export interface TransactionParams { /** * 执行原SQL语句 * * Execute query statement * @param param 参数值 * @returns */ sql(sql: string, param?: any[]): Promise<mysql.QueryResult>; /** * 执行查询语句 * * Execute query statement * @param v 配置参数信息 * @returns */ query(v: QueryOption): Promise<IAnyObject[]>; /** * 执行查询数据详情语句 * * Execute the statement to query data details * @param v 参数信息 */ detail(v: QueryOption): Promise<IAnyObject | undefined>; /** * 获取数据总数 * @param v 参数信息 */ count(v: QueryCountOption): Promise<number>; /** * 数据更新函数 */ change: TransactionChange; } /** * 执行事务函数 */ export type ExecTransactionFunction = (v: TransactionParams) => Promise<any>; /** * 值类型 */ export type VALUE_TYPE = string | number | Date | boolean | undefined | null | any[]; /** * 查询等式类型 */ export type CONDITION_EQUATION_TYPE = 'EQUAL' | 'TO_DAYS' | 'IN' | 'NOT_IN' | 'LIKE' | 'LIKE_UPPER' | 'LIKE_LOWER' | 'NOT' | 'IS_NOT_NULL' | 'IS_NULL' | 'GREATER_THAN_OR_EQUAL' | 'GREATER_THAN' | 'LESS_THAN_OR_EQUAL' | 'LESS_THAN' | 'LESS_THAN'; /** * 数据变更基础参数 */ export interface BaseChangeParam { /** * 表名 */ t: TABLE_TYPE; } /** * 数据插入新增参数 */ export interface InsertParam extends BaseChangeParam { params: IAnyObject | IAnyObject[]; } /** * 插入唯一约束更新 */ export interface DuplicateUpdateParam extends BaseChangeParam { /** * 配置参数 */ data: IAnyObject[]; /** * 唯一索引字段名 */ unique?: string; /** * 不更新字段 */ excludeField?: string | string[]; } /** * 数据删除参数 */ export interface DeleteParam extends BaseChangeParam { condition: CONDITION_TYPE; } /** * 数据更新参数 */ export interface UpdateParam extends BaseChangeParam { /** * 更新数据 */ params: IAnyObject; /** * 更新条件 */ condition: CONDITION_TYPE; } /** * WHERE 查询条件等式值 */ export declare enum CONDITION_EQUATION_VALUE { EQUAL = "=", IN = "IN", NOT_IN = "NOT IN", LIKE = "LIKE", LIKE_UPPER = "LIKE", LIKE_LOWER = "LIKE", NOT = "!=", IS_NOT_NULL = "IS NOT NULL", IS_NULL = "IS NULL", GREATER_THAN_OR_EQUAL = ">=", GREATER_THAN = ">", LESS_THAN_OR_EQUAL = "<=", LESS_THAN = "<" } /** * 表单值占位符 */ export declare enum CONDITION_EQUATION_PLACEHOLDER { '=' = "?", 'IN' = "(?)", 'NOT IN' = "(?)", 'LIKE' = "?", 'NOT' = "?", '>=' = "?", '>' = "?", '<=' = "?", '<' = "?" } /** * 查询条件配置项 */ export interface ConditionOption { /** * 匹配值 */ value?: VALUE_TYPE; /** * 等式类型 */ type?: CONDITION_EQUATION_TYPE; /** * 是否为或语句 */ or?: boolean; /** * 表名或表别名 */ t?: string; /** * 子查询 */ subquery?: QueryOption; } /** * 查询数据总数 */ export interface QueryCountOption { /** * 表信息 */ t: TABLE_OPTION; /** * 查询条件 */ condition?: CONDITION_TYPE; /** * 统计字段 */ fields?: string | COUNT_FIELD_OPTION; /** * 表连接查询配置信息 */ join?: JOIN_PARAM_TYPE | JOIN_PARAM_TYPE[]; } /** * 查询字段配置 */ export interface FIELD_OPTION { /** * 字段名 */ name: string; /**z * 字段别名 */ alias?: string; /** * 表名或表别名 */ t?: string; } /** * 查询字段配置 */ export interface COUNT_FIELD_OPTION { /** * 字段名 */ name: string; /** * 表名或表别名 */ t?: string; } /** * 查询字段配置类型 */ export type FIELDS_OPTION = string | FIELD_OPTION | Array<FIELD_OPTION | string>; export type TABLE_TYPE = string | TableConfig; export type TABLE_OPTION = TABLE_TYPE | Array<TableConfig | string>; export type CONDITION_TYPE = Record<string, VALUE_TYPE | ConditionOption | ConditionOption[]>; export type INSERT_PARAM_TYPE = IAnyObject | IAnyObject[]; export interface JOIN_ON_TYPE { /** * 连接字段名 */ joinField: string; /** * 主表字段名 */ mainField: string; /** * 主表表名或表别名 */ mainTable: string; } export interface JOIN_PARAM_TYPE { /** * 连接方式,默认:INNER JOIN */ type?: 'LEFT' | 'RIGHT'; /** * 连接表配置信息 */ t: TABLE_TYPE; /** * 连接条件配置信息 */ on: JOIN_ON_TYPE; } export interface OrderByOption { /** * 数据库字段名 */ field: string; /** * 排序类型 * ASC | 升序 * DESC | 降序 */ type?: 'ASC' | 'DESC'; } export interface LIMIT_PARAM { /** * 开始位置 */ start: number; /** * 查询数量 */ length: number; } /** * 查询语句配置项 */ export interface QueryOption { /** * 表信息 */ t: TABLE_OPTION; /** * 查询条件 */ condition?: CONDITION_TYPE; /** * 查询字段 */ fields?: FIELDS_OPTION; /** * 查询条目区间 */ limit?: LIMIT_PARAM; /** * 表连接查询配置信息 */ join?: JOIN_PARAM_TYPE | JOIN_PARAM_TYPE[]; /** * 排序 */ orderBy?: OrderByOption; } type IAnyObject = Record<string, any>; declare class emysql { /** * 连接数据库配置 */ connConfig?: ConnOption; /** * 连接池 */ pool?: Pool; /** * 构造函数 */ constructor(v: ConnOption); /** * 创建数据库连接池 */ private createPool; /** * 获取当前连接池连接 (使用后一定要释放资源-connection.release()) * @returns mysql.PoolConnection */ private getConnection; /** * 执行查询语句 * * Execute query statement * @param v 配置参数信息 * @returns */ private execQuery; /** * 获取连接配置项 */ private getConfig; private _sql_query; private _query; private _detail; private _count; private _insert; private _delete; private _update; private _batch_update; private getTransactionFns; /** * 执行原SQL语句 * * Execute query statement * @param param 参数值 * @returns */ sql: (sql: string, param?: any[]) => Promise<mysql.QueryResult>; /** * 执行查询数据语句 * * Execute the query data statement * @param v 参数信息 */ query: (v: QueryOption) => Promise<IAnyObject[]>; /** * 执行查询数据详情语句 * * Execute the statement to query data details * @param v 参数信息 */ detail: (v: QueryOption) => Promise<IAnyObject | undefined>; /** * 获取数据总数 * @param v 参数信息 */ count: (v: QueryCountOption) => Promise<number>; /** * 数据更新函数 */ change: { /** * 执行数据插入语句 * * Execute the data insert statement */ insert: (v: InsertParam) => Promise<mysql.QueryResult>; /** * 执行数据删除语句 * * Execute a data delete statement */ delete: (v: DeleteParam) => Promise<mysql.QueryResult>; /** * 执行数据更新语句 * * Execute the data update statement */ update: (v: UpdateParam) => Promise<mysql.QueryResult>; /** * 执行数据批量更新语句 * * Execute data batch update statements */ batchUpdate: (v: BATCH_UPDATE_PARAMS) => Promise<mysql.QueryResult>; }; /** * 执行事务 * @param conn 连接 * @returns */ private execTransaction; /** * 事务执行函数 * * Transaction executive function */ transaction(fn: ExecTransactionFunction): Promise<any>; /** * 创建存储过程 * * Create stored procedure */ createStoredProcedure(): Promise<void>; /** * 调用存储过程 * * Call stored procedure */ callStoredProcedure(): Promise<void>; /** * 表操作函数 * * Table manipulation function */ table: { /** * 创建表结构数据 * * Create table structure data * @param v 配置参数 * @returns */ create: (v: TableOption | TableOption[]) => Promise<undefined>; /** * 清空表数据不记录mysql日志,不可以恢复数据。 * * Clearing table data does not record mysql logs, and data cannot be restored. * @param name 表名 * @returns */ truncate: (name: string) => Promise<undefined>; /** * 删除表结构 * * Delete table structure * @param name 表名 * @returns */ drop: (name: string) => Promise<undefined>; /** * 查询表是否存在 * * Check whether the table exists * @param name 表名 * @returns */ exist: (name: string) => Promise<boolean>; }; } export default emysql;