@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
TypeScript
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;