baja-lite 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +1 -0
- package/cjs/constant.d.ts +13 -0
- package/cjs/constant.js +19 -0
- package/cjs/error.d.ts +5 -0
- package/cjs/error.js +16 -0
- package/cjs/fn.d.ts +128 -0
- package/cjs/fn.js +169 -0
- package/cjs/index.d.ts +8 -0
- package/cjs/index.js +24 -0
- package/cjs/math.d.ts +69 -0
- package/cjs/math.js +435 -0
- package/cjs/now.d.ts +7 -0
- package/cjs/now.js +26 -0
- package/cjs/object.d.ts +77 -0
- package/cjs/object.js +212 -0
- package/cjs/set-ex.d.ts +171 -0
- package/cjs/set-ex.js +336 -0
- package/cjs/sql.d.ts +1216 -0
- package/cjs/sql.js +3380 -0
- package/cjs/string.d.ts +18 -0
- package/cjs/string.js +124 -0
- package/cjs/test-mysql.d.ts +1 -0
- package/cjs/test-mysql.js +108 -0
- package/cjs/test-sqlite.d.ts +1 -0
- package/cjs/test-sqlite.js +89 -0
- package/cjs/test.d.ts +1 -0
- package/cjs/test.js +4 -0
- package/es/constant.d.ts +13 -0
- package/es/constant.js +16 -0
- package/es/error.d.ts +5 -0
- package/es/error.js +13 -0
- package/es/fn.d.ts +128 -0
- package/es/fn.js +162 -0
- package/es/index.d.ts +8 -0
- package/es/index.js +8 -0
- package/es/math.d.ts +69 -0
- package/es/math.js +414 -0
- package/es/now.d.ts +7 -0
- package/es/now.js +16 -0
- package/es/object.d.ts +77 -0
- package/es/object.js +196 -0
- package/es/set-ex.d.ts +171 -0
- package/es/set-ex.js +332 -0
- package/es/sql.d.ts +1216 -0
- package/es/sql.js +3338 -0
- package/es/string.d.ts +18 -0
- package/es/string.js +109 -0
- package/es/test-mysql.d.ts +1 -0
- package/es/test-mysql.js +106 -0
- package/es/test-sqlite.d.ts +1 -0
- package/es/test-sqlite.js +87 -0
- package/es/test.d.ts +1 -0
- package/es/test.js +2 -0
- package/package.json +66 -0
package/cjs/sql.d.ts
ADDED
|
@@ -0,0 +1,1216 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
declare const _daoDBName: unique symbol;
|
|
3
|
+
declare const _tableName: unique symbol;
|
|
4
|
+
declare const _ids: unique symbol;
|
|
5
|
+
declare const _columns: unique symbol;
|
|
6
|
+
declare const _columnsNoId: unique symbol;
|
|
7
|
+
declare const _fields: unique symbol;
|
|
8
|
+
declare const _stateFileName: unique symbol;
|
|
9
|
+
declare const _deleteState: unique symbol;
|
|
10
|
+
declare const _transformer: unique symbol;
|
|
11
|
+
declare const _index: unique symbol;
|
|
12
|
+
declare const _def: unique symbol;
|
|
13
|
+
declare const _dbType: unique symbol;
|
|
14
|
+
declare const _sqlite_version: unique symbol;
|
|
15
|
+
declare const _daoConnection: unique symbol;
|
|
16
|
+
declare const _inTransaction: unique symbol;
|
|
17
|
+
declare const _daoDB: unique symbol;
|
|
18
|
+
declare const _SqlOption: unique symbol;
|
|
19
|
+
export declare enum DBType {
|
|
20
|
+
Mysql = 0,
|
|
21
|
+
Sqlite = 1,
|
|
22
|
+
Mongo = 2,
|
|
23
|
+
SqliteRemote = 3,
|
|
24
|
+
Redis = 4,
|
|
25
|
+
RedisLock = 5
|
|
26
|
+
}
|
|
27
|
+
export declare enum SqlSyncMode {
|
|
28
|
+
/** 同步执行 */
|
|
29
|
+
Sync = 0,
|
|
30
|
+
/** 异步执行 */
|
|
31
|
+
Async = 1
|
|
32
|
+
}
|
|
33
|
+
export declare enum SqlInsertMode {
|
|
34
|
+
/**
|
|
35
|
+
# 默认使用
|
|
36
|
+
** 支持单个、批量,语法 `INSERT INTO XX VALUES (第一条数据), (第二条数据);`
|
|
37
|
+
** 批量执行有性能优势,但无法利用数据库的sql预编译功能
|
|
38
|
+
*/
|
|
39
|
+
Insert = 0,
|
|
40
|
+
/**
|
|
41
|
+
# 利用临时表
|
|
42
|
+
## 执行步骤
|
|
43
|
+
1. 建立临时表(从正式表复制)
|
|
44
|
+
2. 数据全部进入临时表
|
|
45
|
+
3. 临时表数据转移到正式表: `INSERT INTO 正式表 SELECT * FROM 临时表`
|
|
46
|
+
4. 删除临时表
|
|
47
|
+
## 注意
|
|
48
|
+
1. 适用于:主键不会冲突、非自增
|
|
49
|
+
2. 临时表的结构复制正式表
|
|
50
|
+
*/
|
|
51
|
+
InsertWithTempTable = 1,
|
|
52
|
+
InsertIfNotExists = 2,
|
|
53
|
+
/**
|
|
54
|
+
# 插入或者更新
|
|
55
|
+
1. 判断依据是主键
|
|
56
|
+
*/
|
|
57
|
+
Replace = 3
|
|
58
|
+
}
|
|
59
|
+
export declare enum SqlDelMode {
|
|
60
|
+
/**
|
|
61
|
+
##常规删除 默认
|
|
62
|
+
### 例一
|
|
63
|
+
`DELETE FROM WHERE (id = 1) OR (id = 2)`
|
|
64
|
+
### 例二
|
|
65
|
+
`DELETE FROM WHERE (id = 1 AND idx = 11) OR (id = 2 AND idx = 22)`
|
|
66
|
+
*/
|
|
67
|
+
Common = 0,
|
|
68
|
+
TempTable = 1
|
|
69
|
+
}
|
|
70
|
+
export declare enum SqlSelectMode {
|
|
71
|
+
/**
|
|
72
|
+
##常规 默认
|
|
73
|
+
### 例一
|
|
74
|
+
`SELECT * FROM WHERE (id = 1) OR (id = 2)`
|
|
75
|
+
### 例二
|
|
76
|
+
`SELECT * FROM WHERE (id = 1 AND idx = 11) OR (id = 2 AND idx = 22)`
|
|
77
|
+
*/
|
|
78
|
+
Common = 0,
|
|
79
|
+
TempTable = 1
|
|
80
|
+
}
|
|
81
|
+
export declare enum SqlTemplateMode {
|
|
82
|
+
/** 确定返回一个,如果不是一个,将报错,返回类型是T */
|
|
83
|
+
AssertOne = 0,
|
|
84
|
+
/** 可能返回一个,返回类型是T|null */
|
|
85
|
+
NotSureOne = 1,
|
|
86
|
+
/** 返回多个 */
|
|
87
|
+
Many = 2,
|
|
88
|
+
/** 仅查询记录数量 */
|
|
89
|
+
Count = 3
|
|
90
|
+
}
|
|
91
|
+
export declare enum SqlQueryMode {
|
|
92
|
+
One_Row_One_Column_Assert = 0,
|
|
93
|
+
One_Row_One_Column_NotSure = 1,
|
|
94
|
+
One_Row_Many_Column_Assert = 2,
|
|
95
|
+
One_Row_Many_Column_NotSure = 3,
|
|
96
|
+
Many_Row_One_Column = 4,
|
|
97
|
+
Many_Row_Many_Column = 5
|
|
98
|
+
}
|
|
99
|
+
export declare enum SqlType {
|
|
100
|
+
bigint = 0,
|
|
101
|
+
char = 1,
|
|
102
|
+
decimal = 2,
|
|
103
|
+
int = 3,
|
|
104
|
+
longtext = 4,
|
|
105
|
+
mediumtext = 5,
|
|
106
|
+
smallint = 6,
|
|
107
|
+
text = 7,
|
|
108
|
+
tinyint = 8,
|
|
109
|
+
varchar = 9
|
|
110
|
+
}
|
|
111
|
+
export declare const SqliteMemory = ":memory:";
|
|
112
|
+
interface MethodOption {
|
|
113
|
+
tableName?: string;
|
|
114
|
+
/** 数据库、连接名称,对于MYSQL、mongo,适用于多数据源,对于sqlite,适用于不同的数据库文件 */
|
|
115
|
+
dbName?: string;
|
|
116
|
+
/** 调用时,永远不需要传
|
|
117
|
+
* @deprecated
|
|
118
|
+
* */
|
|
119
|
+
dao?: Dao;
|
|
120
|
+
/** 调用时,仅在开启事务时需要主动传入,传入方式: */
|
|
121
|
+
conn?: Connection | null;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
数据服务注解
|
|
125
|
+
*/
|
|
126
|
+
interface ServiceOption {
|
|
127
|
+
/** 增改忽略Undefined */
|
|
128
|
+
skipUndefined?: boolean;
|
|
129
|
+
/** 增改忽略NULL */
|
|
130
|
+
skipNull?: boolean;
|
|
131
|
+
/** 增改忽略空字符串 */
|
|
132
|
+
skipEmptyString?: boolean;
|
|
133
|
+
/** 批量增改时,每次执行最多处理的记录数量 */
|
|
134
|
+
maxDeal?: number;
|
|
135
|
+
tableName?: string;
|
|
136
|
+
/** 数据库、连接名称,对于MYSQL、mongo,适用于多数据源,对于sqlite,适用于不同的数据库文件 */
|
|
137
|
+
dbName?: string;
|
|
138
|
+
/** 调用时,永远不需要传
|
|
139
|
+
* @deprecated
|
|
140
|
+
* */
|
|
141
|
+
dao?: Dao;
|
|
142
|
+
/** 调用时,仅在开启事务时需要主动传入,传入方式: */
|
|
143
|
+
conn?: Connection | null;
|
|
144
|
+
/** 对应的实体类,必须是Class */
|
|
145
|
+
clz?: any;
|
|
146
|
+
/** 默认mysql */
|
|
147
|
+
dbType?: DBType;
|
|
148
|
+
/** SQLite版本以及升级为该版本时需要执行的SQL,初始版本为0.0.1,切记每个位置不要变为两位数*/
|
|
149
|
+
sqliteVersion?: string;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
# 全局行为配置文件
|
|
153
|
+
MYSQL编码: 'utf8mb4', utf8mb4_general_ci'
|
|
154
|
+
### `sqlDir?: string;` 数据库查询语句存放目录.存放格式为 export.default 的js、ts, 存放内容满足格式:
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
interface SqlModel {
|
|
158
|
+
[key: string]: string | ((params: { [k: string]: any }, context: any, isPage?: boolean) => string)
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
可以继承该接口来约束格式
|
|
162
|
+
*/
|
|
163
|
+
interface GlobalSqlOption {
|
|
164
|
+
/** 增改忽略Undefined */
|
|
165
|
+
skipUndefined?: boolean;
|
|
166
|
+
/** 增改忽略NULL */
|
|
167
|
+
skipNull?: boolean;
|
|
168
|
+
/** 增改忽略空字符串 */
|
|
169
|
+
skipEmptyString?: boolean;
|
|
170
|
+
/** 批量增改时,每次执行最多处理的记录数量 */
|
|
171
|
+
maxDeal?: number;
|
|
172
|
+
/**
|
|
173
|
+
初始化MYSQL链接 支持多数据源
|
|
174
|
+
## 单一数据源: 直接传入Mysql2的连接配置
|
|
175
|
+
[MYSQL初始化文档](https://github.com/mysqljs/mysql#connection-options)
|
|
176
|
+
```
|
|
177
|
+
Mysql: {
|
|
178
|
+
host: '127.0.0.1',
|
|
179
|
+
...
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
## 多数据源:传入多个Mysql2的连接配置
|
|
183
|
+
```
|
|
184
|
+
Mysql: {
|
|
185
|
+
db1: {
|
|
186
|
+
host: '127.0.0.1',
|
|
187
|
+
...
|
|
188
|
+
},
|
|
189
|
+
db2: {
|
|
190
|
+
host: '127.0.0.1',
|
|
191
|
+
...
|
|
192
|
+
},
|
|
193
|
+
...
|
|
194
|
+
}
|
|
195
|
+
```
|
|
196
|
+
*/
|
|
197
|
+
Mysql?: Record<string, Record<string, any>> | Record<string, any>;
|
|
198
|
+
/**
|
|
199
|
+
## 单一数据源
|
|
200
|
+
```
|
|
201
|
+
Sqlite: 'd:/1.db'
|
|
202
|
+
```
|
|
203
|
+
## 多数据源:传入多个Mysql2的连接配置
|
|
204
|
+
```
|
|
205
|
+
Sqlite: {
|
|
206
|
+
db1: 'd:/1.db',
|
|
207
|
+
db2: 'd:/2.db'
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
路径 = `SqliteMemory` 将创建内存库
|
|
211
|
+
*/
|
|
212
|
+
Sqlite?: Record<string, string> | string;
|
|
213
|
+
SqliteRemote?: {
|
|
214
|
+
/**
|
|
215
|
+
## 单一数据源
|
|
216
|
+
```
|
|
217
|
+
db: 'd:/1.db'
|
|
218
|
+
```
|
|
219
|
+
## 多数据源:传入多个Mysql2的连接配置
|
|
220
|
+
```
|
|
221
|
+
db: {
|
|
222
|
+
db1: 'd:/1.db',
|
|
223
|
+
db2: 'd:/2.db'
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
不支持 `SqliteMemory`
|
|
227
|
+
*/
|
|
228
|
+
db: Record<string, string> | string;
|
|
229
|
+
/** 远程SQLITE接口实现,适用于Electron, 采用Ipc 的handel机制实现 */
|
|
230
|
+
service: SqliteRemoteInterface;
|
|
231
|
+
};
|
|
232
|
+
/** 日志等级 */
|
|
233
|
+
log?: 'trace' | 'debug' | 'info' | 'warn';
|
|
234
|
+
/**
|
|
235
|
+
日志文件存放路径,该目录下文件名是模块名,例如有一个文件名为 `user.js`,内容为:
|
|
236
|
+
```
|
|
237
|
+
export default {
|
|
238
|
+
'sql_1': 'SELECT * FROM user WHERE username = :username',
|
|
239
|
+
'sql_2': (params: Record<string, any>, context: any, isPage?: boolean | undefined) => {
|
|
240
|
+
return `
|
|
241
|
+
SELECT * FROM user u LEFT JOIN organ o ON u.orgid = o.orgid
|
|
242
|
+
WHERE o.orgid = :orgid;
|
|
243
|
+
`;
|
|
244
|
+
}
|
|
245
|
+
} as SqlModel;
|
|
246
|
+
```
|
|
247
|
+
** 可以看到,sql语句支持直接映射一个sql语句,也可以通过函数返回
|
|
248
|
+
** 上面的文件中,将注册两个SQL:`user.sql_1` 和 `user.sql_2`.
|
|
249
|
+
** params 是用查询时传入的参数,可以指定为任意类型,可以用来生成sql,例如进行循环语句
|
|
250
|
+
** context 是框架的上下文,可以自行指定类型
|
|
251
|
+
** isPage 是保留参数
|
|
252
|
+
** 函数类型中,可以调用自己定义的通用sql
|
|
253
|
+
### 注意
|
|
254
|
+
1. 不要直接拼接参数:不安全且效率低
|
|
255
|
+
2. sqlite不支持多语句拼接
|
|
256
|
+
*/
|
|
257
|
+
sqlDir?: string;
|
|
258
|
+
/**
|
|
259
|
+
作用与sqlDir类似,不同在于sqlCache`不需要`目录,而是直接指定一个sqlModel对象,对象的格式和sqlDir的文件内容一样。
|
|
260
|
+
** 适用于简单使用
|
|
261
|
+
*/
|
|
262
|
+
sqlCache?: SqlModel;
|
|
263
|
+
/**
|
|
264
|
+
[REDIS初始化文档](https://github.com/redis/ioredis?tab=readme-ov-file#:~:text=connect%20to%20by%3A-,new%20Redis()%3B,-//%20Connect%20to%20127.0.0.1)
|
|
265
|
+
```
|
|
266
|
+
Redis: {
|
|
267
|
+
host: '127.0.0.1',
|
|
268
|
+
...
|
|
269
|
+
}
|
|
270
|
+
```
|
|
271
|
+
## 多数据源:传入多个Redis的连接配置
|
|
272
|
+
```
|
|
273
|
+
Redis: {
|
|
274
|
+
db1: {
|
|
275
|
+
host: '127.0.0.1',
|
|
276
|
+
...
|
|
277
|
+
},
|
|
278
|
+
db2: {
|
|
279
|
+
host: '127.0.0.1',
|
|
280
|
+
...
|
|
281
|
+
},
|
|
282
|
+
...
|
|
283
|
+
}
|
|
284
|
+
```
|
|
285
|
+
*/
|
|
286
|
+
Redis?: Record<string, Record<string, any>> | Record<string, any>;
|
|
287
|
+
}
|
|
288
|
+
interface FieldOption extends Object {
|
|
289
|
+
type?: SqlType;
|
|
290
|
+
name?: string;
|
|
291
|
+
length1?: number;
|
|
292
|
+
length2?: number;
|
|
293
|
+
def?: any;
|
|
294
|
+
index?: boolean;
|
|
295
|
+
id?: boolean;
|
|
296
|
+
logicDelete?: string;
|
|
297
|
+
notNull?: boolean;
|
|
298
|
+
}
|
|
299
|
+
/** sqlite electron服务端需要支持的接口 */
|
|
300
|
+
export interface SqliteRemoteInterface {
|
|
301
|
+
execute(dbName: string, sql?: string, params?: any): Promise<{
|
|
302
|
+
affectedRows: number;
|
|
303
|
+
insertId: bigint;
|
|
304
|
+
}>;
|
|
305
|
+
pluck<One_Row_Many_Column = any>(dbName: string, sql?: string, params?: any): Promise<One_Row_Many_Column | undefined>;
|
|
306
|
+
get<One_Row_Many_Column = any>(dbName: string, sql?: string, params?: any): Promise<One_Row_Many_Column | undefined>;
|
|
307
|
+
raw<Many_Row_One_Column = any>(dbName: string, sql?: string, params?: any): Promise<Many_Row_One_Column[]>;
|
|
308
|
+
query<Many_Row_Many_Column = any>(dbName: string, sql?: string, params?: any): Promise<Many_Row_Many_Column[]>;
|
|
309
|
+
initDB(dbName: string): Promise<void>;
|
|
310
|
+
backup(dbName: string, name: string): Promise<void>;
|
|
311
|
+
restore(dbName: string, name: string): Promise<void>;
|
|
312
|
+
}
|
|
313
|
+
interface Connection {
|
|
314
|
+
[_daoConnection]: any;
|
|
315
|
+
[_inTransaction]: boolean;
|
|
316
|
+
execute(sync: SqlSyncMode.Sync, sql?: string, params?: any): {
|
|
317
|
+
affectedRows: number;
|
|
318
|
+
insertId: bigint;
|
|
319
|
+
};
|
|
320
|
+
execute(sync: SqlSyncMode.Async, sql?: string, params?: any): Promise<{
|
|
321
|
+
affectedRows: number;
|
|
322
|
+
insertId: bigint;
|
|
323
|
+
}>;
|
|
324
|
+
/** 一行一列 */
|
|
325
|
+
pluck<One_Row_One_Column = any>(sync: SqlSyncMode.Sync, sql?: string, params?: any): One_Row_One_Column | null;
|
|
326
|
+
pluck<One_Row_One_Column = any>(sync: SqlSyncMode.Async, sql?: string, params?: any): Promise<One_Row_One_Column | null>;
|
|
327
|
+
/** 一行多列 */
|
|
328
|
+
get<One_Row_Many_Column = any>(sync: SqlSyncMode.Sync, sql?: string, params?: any): One_Row_Many_Column | null;
|
|
329
|
+
get<One_Row_Many_Column = any>(sync: SqlSyncMode.Async, sql?: string, params?: any): Promise<One_Row_Many_Column | null>;
|
|
330
|
+
/** 多行一列 */
|
|
331
|
+
raw<Many_Row_One_Column = any>(sync: SqlSyncMode.Sync, sql?: string, params?: any): Many_Row_One_Column[];
|
|
332
|
+
raw<Many_Row_One_Column = any>(sync: SqlSyncMode.Async, sql?: string, params?: any): Promise<Many_Row_One_Column[]>;
|
|
333
|
+
/** 多行多列 */
|
|
334
|
+
query<Many_Row_Many_Column = any>(sync: SqlSyncMode.Sync, sql?: string, params?: any): Many_Row_Many_Column[];
|
|
335
|
+
query<Many_Row_Many_Column = any>(sync: SqlSyncMode.Async, sql?: string, params?: any): Promise<Many_Row_Many_Column[]>;
|
|
336
|
+
realse(sync: SqlSyncMode.Sync): void;
|
|
337
|
+
realse(sync: SqlSyncMode.Async): Promise<void>;
|
|
338
|
+
}
|
|
339
|
+
interface Dao {
|
|
340
|
+
[_daoDB]: any;
|
|
341
|
+
transaction<T = any>(sync: SqlSyncMode.Sync, fn: (conn: Connection) => T, conn?: Connection | null): T | null;
|
|
342
|
+
transaction<T = any>(sync: SqlSyncMode.Async, fn: (conn: Connection) => Promise<T>, conn?: Connection | null): Promise<T | null>;
|
|
343
|
+
createConnection(sync: SqlSyncMode.Sync): Connection | null;
|
|
344
|
+
createConnection(sync: SqlSyncMode.Async): Promise<Connection | null>;
|
|
345
|
+
close(sync: SqlSyncMode.Sync): void;
|
|
346
|
+
close(sync: SqlSyncMode.Async): Promise<void>;
|
|
347
|
+
backup(sync: SqlSyncMode.Sync, name: string): void;
|
|
348
|
+
backup(sync: SqlSyncMode.Async, name: string): Promise<void>;
|
|
349
|
+
remove(sync: SqlSyncMode.Sync): void;
|
|
350
|
+
remove(sync: SqlSyncMode.Async): Promise<void>;
|
|
351
|
+
restore(sync: SqlSyncMode.Sync, name: string): void;
|
|
352
|
+
restore(sync: SqlSyncMode.Async, name: string): Promise<void>;
|
|
353
|
+
}
|
|
354
|
+
type SqlModel = Record<string, string | ((params: Record<string, any>, context: any, isPage?: boolean) => string)>;
|
|
355
|
+
export declare const Field: (config: FieldOption) => (object: object, propertyName: string) => void;
|
|
356
|
+
export declare const DB: (config: ServiceOption) => <C extends new (...args: any[]) => {}>(constructor: C) => {
|
|
357
|
+
new (...args: any[]): {
|
|
358
|
+
[_tableName]: string | undefined;
|
|
359
|
+
[_daoDBName]: string | undefined;
|
|
360
|
+
[_dbType]: DBType;
|
|
361
|
+
[_sqlite_version]: string | undefined;
|
|
362
|
+
[_SqlOption]: {
|
|
363
|
+
maxDeal: number;
|
|
364
|
+
skipUndefined: boolean;
|
|
365
|
+
skipNull: boolean;
|
|
366
|
+
skipEmptyString: boolean;
|
|
367
|
+
} & ServiceOption;
|
|
368
|
+
[_ids]: any;
|
|
369
|
+
[_fields]: any;
|
|
370
|
+
[_columns]: any;
|
|
371
|
+
[_columnsNoId]: any;
|
|
372
|
+
[_index]: any;
|
|
373
|
+
[_def]: any;
|
|
374
|
+
[_stateFileName]: any;
|
|
375
|
+
[_deleteState]: any;
|
|
376
|
+
[_transformer]: <L extends Object>(data: L, option?: MethodOption & {
|
|
377
|
+
finalColumns?: Set<string>;
|
|
378
|
+
tempColumns?: Array<string>;
|
|
379
|
+
def?: boolean;
|
|
380
|
+
skipId?: boolean;
|
|
381
|
+
onFieldExists?: (K: string, V: any) => void;
|
|
382
|
+
}) => any;
|
|
383
|
+
};
|
|
384
|
+
} & C;
|
|
385
|
+
/**
|
|
386
|
+
js项目中实体类注解替代品,只要确保函数被执行即可,举例:
|
|
387
|
+
```
|
|
388
|
+
// 声明一个class
|
|
389
|
+
export class AmaFuck {}
|
|
390
|
+
DeclareClass(AmaFuck, [
|
|
391
|
+
{ type: "String", name: "SellerSKU" },
|
|
392
|
+
{ type: "String", name: "SellerSKU2" },
|
|
393
|
+
{ type: "String", name: "site" }
|
|
394
|
+
]);
|
|
395
|
+
```
|
|
396
|
+
*/
|
|
397
|
+
export declare function DeclareClass(clz: any, FieldOptions: FieldOption[]): void;
|
|
398
|
+
/**
|
|
399
|
+
JS项目中,service注解代替,举例:
|
|
400
|
+
```
|
|
401
|
+
// 声明一个service,注意这里的let
|
|
402
|
+
export let AmaService = class AmaService extends SqlService {};
|
|
403
|
+
AmaService = DeclareService(AmaService, {
|
|
404
|
+
tableName: "ama_fuck2",
|
|
405
|
+
clz: AmaFuck,
|
|
406
|
+
dbType: DBType.Sqlite,
|
|
407
|
+
sqliteVersion: "0.0.3"
|
|
408
|
+
});
|
|
409
|
+
```
|
|
410
|
+
*/
|
|
411
|
+
export declare function DeclareService(clz: any, config: ServiceOption): any;
|
|
412
|
+
/**
|
|
413
|
+
## 数据库服务
|
|
414
|
+
### 注解DB
|
|
415
|
+
|
|
416
|
+
### 泛型 T,同DB注解中的clz
|
|
417
|
+
** 服务中所有方法默认以该类型为准
|
|
418
|
+
**
|
|
419
|
+
|
|
420
|
+
*/
|
|
421
|
+
export declare class SqlService<T extends object> {
|
|
422
|
+
private [_tableName]?;
|
|
423
|
+
private [_daoDBName]?;
|
|
424
|
+
private [_ids]?;
|
|
425
|
+
private [_fields]?;
|
|
426
|
+
private [_columns]?;
|
|
427
|
+
private [_columnsNoId]?;
|
|
428
|
+
private [_stateFileName]?;
|
|
429
|
+
private [_deleteState]?;
|
|
430
|
+
private [_SqlOption]?;
|
|
431
|
+
private [_dbType]?;
|
|
432
|
+
private [_sqlite_version]?;
|
|
433
|
+
private [_index]?;
|
|
434
|
+
private [_def]?;
|
|
435
|
+
private [_transformer]?;
|
|
436
|
+
private _insert;
|
|
437
|
+
/**
|
|
438
|
+
0. `sync`: 同步(sqlite)或者异步(mysql、remote),影响返回值类型,默认 `异步`
|
|
439
|
+
1. `data`:可是数组或者单对象
|
|
440
|
+
2. `skipUndefined`: boolean; 是否不处理值为undefined的字段,默认 true
|
|
441
|
+
3. `skipNull`: boolean; 是否不处理值为null的字段,默认 true
|
|
442
|
+
4. `skipEmptyString`: boolean; 是否不处理值为空字符串(`注意:多个空格也算空字符串`)的字段,默认 true
|
|
443
|
+
5. `maxDeal`: number; 批量处理时,每次处理多少个?默认500
|
|
444
|
+
6. `tableName`: 默认使用service注解的`tableName`,可以在某个方法中覆盖
|
|
445
|
+
7. `dbName`: 默认使用service注解的`dbName`,可以在某个方法中覆盖
|
|
446
|
+
8. `conn`: 仅在开启事务时需要主动传入,传入示例:
|
|
447
|
+
```
|
|
448
|
+
service.transaction(async conn => {
|
|
449
|
+
service.insert({conn});
|
|
450
|
+
});
|
|
451
|
+
```
|
|
452
|
+
9. `dao`: 永远不需要传入该值
|
|
453
|
+
10. `mode` :默认`insert`,可选如下
|
|
454
|
+
1. `insert`: 默认
|
|
455
|
+
2. `insertIfNotExists`: 通过主键或者existConditionOtherThanIds字段判断数据是否存在,不存在才插入,存在则不执行
|
|
456
|
+
3. `replace`: 只支持用主键判断, 存在更新, 不存在插入
|
|
457
|
+
11. `existConditionOtherThanIds`: insertIfNotExists时判断同一记录的字段名称,默认情况下按照ID判断,设置existConditionOtherThanIds后,不用id
|
|
458
|
+
### 返回值是最后一次插入的主键ID,对于自增ID表适用
|
|
459
|
+
1. 如果主键是自增批量操作,且期望返回所有记录的ID,那么需要设置 `option 中的 every = true`,此时效率降低
|
|
460
|
+
* @param {{[P in keyof T]?: T[P]}} data
|
|
461
|
+
* @param {MethodOption} [option]
|
|
462
|
+
* @memberof SqlServer
|
|
463
|
+
*/
|
|
464
|
+
insert(option: MethodOption & {
|
|
465
|
+
data: Partial<T>;
|
|
466
|
+
sync?: SqlSyncMode.Async;
|
|
467
|
+
mode?: SqlInsertMode;
|
|
468
|
+
existConditionOtherThanIds?: (keyof T)[];
|
|
469
|
+
every?: boolean;
|
|
470
|
+
temp?: boolean;
|
|
471
|
+
skipUndefined?: boolean;
|
|
472
|
+
skipNull?: boolean;
|
|
473
|
+
skipEmptyString?: boolean;
|
|
474
|
+
maxDeal?: number;
|
|
475
|
+
}): Promise<bigint>;
|
|
476
|
+
insert(option: MethodOption & {
|
|
477
|
+
data: Partial<T>[];
|
|
478
|
+
sync?: SqlSyncMode.Async;
|
|
479
|
+
mode?: SqlInsertMode;
|
|
480
|
+
existConditionOtherThanIds?: (keyof T)[];
|
|
481
|
+
every?: boolean;
|
|
482
|
+
temp?: boolean;
|
|
483
|
+
skipUndefined?: boolean;
|
|
484
|
+
skipNull?: boolean;
|
|
485
|
+
skipEmptyString?: boolean;
|
|
486
|
+
maxDeal?: number;
|
|
487
|
+
}): Promise<bigint[]>;
|
|
488
|
+
insert(option: MethodOption & {
|
|
489
|
+
data: Partial<T>;
|
|
490
|
+
sync: SqlSyncMode.Sync;
|
|
491
|
+
mode?: SqlInsertMode;
|
|
492
|
+
existConditionOtherThanIds?: (keyof T)[];
|
|
493
|
+
every?: boolean;
|
|
494
|
+
temp?: boolean;
|
|
495
|
+
skipUndefined?: boolean;
|
|
496
|
+
skipNull?: boolean;
|
|
497
|
+
skipEmptyString?: boolean;
|
|
498
|
+
maxDeal?: number;
|
|
499
|
+
}): bigint;
|
|
500
|
+
insert(option: MethodOption & {
|
|
501
|
+
data: Partial<T>[];
|
|
502
|
+
sync: SqlSyncMode.Sync;
|
|
503
|
+
mode?: SqlInsertMode;
|
|
504
|
+
existConditionOtherThanIds?: (keyof T)[];
|
|
505
|
+
every?: boolean;
|
|
506
|
+
temp?: boolean;
|
|
507
|
+
skipUndefined?: boolean;
|
|
508
|
+
skipNull?: boolean;
|
|
509
|
+
skipEmptyString?: boolean;
|
|
510
|
+
maxDeal?: number;
|
|
511
|
+
}): bigint[];
|
|
512
|
+
private _update;
|
|
513
|
+
/**
|
|
514
|
+
## 根据主键修改
|
|
515
|
+
0. `sync`: 同步(sqlite)或者异步(mysql、remote),影响返回值类型,默认`异步模式`
|
|
516
|
+
1. `data`:可是数组或者单对象
|
|
517
|
+
2. `skipUndefined`: boolean; 是否不处理值为undefined的字段,默认 true
|
|
518
|
+
3. `skipNull`: boolean; 是否不处理值为null的字段,默认 true
|
|
519
|
+
4. `skipEmptyString`: boolean; 是否不处理值为空字符串(`注意:多个空格也算空字符串`)的字段,默认 true
|
|
520
|
+
5. `maxDeal`: number; 批量处理时,每次处理多少个?默认500
|
|
521
|
+
6. `tableName`: 默认使用service注解的`tableName`,可以在某个方法中覆盖
|
|
522
|
+
7. `dbName`: 默认使用service注解的`dbName`,可以在某个方法中覆盖
|
|
523
|
+
8. `conn`: 仅在开启事务时需要主动传入,传入示例:
|
|
524
|
+
```
|
|
525
|
+
service.transaction(async conn => {
|
|
526
|
+
service.insert({conn});
|
|
527
|
+
});
|
|
528
|
+
```
|
|
529
|
+
9. `dao`: 永远不需要传入该值
|
|
530
|
+
*/
|
|
531
|
+
update(option: MethodOption & {
|
|
532
|
+
data: Partial<T> | Array<Partial<T>>;
|
|
533
|
+
sync?: SqlSyncMode.Async;
|
|
534
|
+
skipUndefined?: boolean;
|
|
535
|
+
skipNull?: boolean;
|
|
536
|
+
skipEmptyString?: boolean;
|
|
537
|
+
maxDeal?: number;
|
|
538
|
+
}): Promise<number>;
|
|
539
|
+
update(option: MethodOption & {
|
|
540
|
+
data: Partial<T> | Array<Partial<T>>;
|
|
541
|
+
sync: SqlSyncMode.Sync;
|
|
542
|
+
skipUndefined?: boolean;
|
|
543
|
+
skipNull?: boolean;
|
|
544
|
+
skipEmptyString?: boolean;
|
|
545
|
+
maxDeal?: number;
|
|
546
|
+
}): number;
|
|
547
|
+
/**
|
|
548
|
+
## 删除
|
|
549
|
+
0. `sync`: 同步(sqlite)或者异步(mysql、remote),影响返回值类型,默认`异步模式`
|
|
550
|
+
1. 支持按ID删除:可以单个ID或者ID数组 `需要实体类只有一个ID`
|
|
551
|
+
2. 支持实体类删除: 用于多个ID或者按实体类某些字段删除
|
|
552
|
+
3. 两种模式:`mode`=`Common` 或者 `TempTable`
|
|
553
|
+
3. 如果数据多,使用 `TempTable`模式
|
|
554
|
+
4. 当设置实体类的字段有 `logicDelete` ,将进行逻辑删除,除非设置 forceDelete = true
|
|
555
|
+
6. `tableName`: 默认使用service注解的`tableName`,可以在某个方法中覆盖
|
|
556
|
+
7. `dbName`: 默认使用service注解的`dbName`,可以在某个方法中覆盖
|
|
557
|
+
8. `conn`: 仅在开启事务时需要主动传入,传入示例:
|
|
558
|
+
```
|
|
559
|
+
service.transaction(async conn => {
|
|
560
|
+
service.insert({conn});
|
|
561
|
+
});
|
|
562
|
+
```
|
|
563
|
+
9. `dao`: 永远不需要传入该值
|
|
564
|
+
*/
|
|
565
|
+
delete(option: MethodOption & {
|
|
566
|
+
sync?: SqlSyncMode.Async;
|
|
567
|
+
id?: string | number | Array<string | number>;
|
|
568
|
+
where?: Partial<T> | Array<Partial<T>>;
|
|
569
|
+
mode?: SqlDelMode;
|
|
570
|
+
forceDelete?: boolean;
|
|
571
|
+
}): Promise<number>;
|
|
572
|
+
delete(option: MethodOption & {
|
|
573
|
+
sync: SqlSyncMode.Sync;
|
|
574
|
+
id?: string | number | Array<string | number>;
|
|
575
|
+
where?: Partial<T> | Array<Partial<T>>;
|
|
576
|
+
mode?: SqlDelMode;
|
|
577
|
+
forceDelete?: boolean;
|
|
578
|
+
}): number;
|
|
579
|
+
private _select;
|
|
580
|
+
/**
|
|
581
|
+
#根据条件查询对象
|
|
582
|
+
## 特点:快速、简单,可快速根据某些字段是否等于来查询返回,可以查询记录和记录数
|
|
583
|
+
0. `sync`: 同步(sqlite)或者异步(mysql、remote),影响返回值类型,默认`异步模式`
|
|
584
|
+
1. `resultMode`: 返回值类型断言,4种
|
|
585
|
+
1. `AssertOne` 确定返回一个,如果不是一个,将报错,返回类型是T `默认`
|
|
586
|
+
2. `NotSureOne` 可能返回一个,返回类型是T|null
|
|
587
|
+
3. `Many` 返回多个
|
|
588
|
+
4. `Count` 返回记录数
|
|
589
|
+
2. 支持按ID查询:可以单个ID或者ID数组 `需要实体类只有一个ID`
|
|
590
|
+
3. 支持实体类查询: 用于多个ID或者按实体类某些字段查询
|
|
591
|
+
4. 两种查询方式:`mode`=`Common`(默认) 或者 `TempTable`
|
|
592
|
+
5. `tableName`: 默认使用service注解的`tableName`,可以在某个方法中覆盖
|
|
593
|
+
6. `dbName`: 默认使用service注解的`dbName`,可以在某个方法中覆盖
|
|
594
|
+
7. `conn`: 仅在开启事务时需要主动传入,传入示例:
|
|
595
|
+
```
|
|
596
|
+
service.transaction(async conn => {
|
|
597
|
+
service.insert({conn});
|
|
598
|
+
});
|
|
599
|
+
```
|
|
600
|
+
8. `dao`: 永远不需要传入该值
|
|
601
|
+
|
|
602
|
+
*/
|
|
603
|
+
template(option: MethodOption & {
|
|
604
|
+
resultMode?: SqlTemplateMode.AssertOne;
|
|
605
|
+
id?: string | number | Array<string | number>;
|
|
606
|
+
where?: Partial<T> | Array<Partial<T>>;
|
|
607
|
+
mode?: SqlSelectMode;
|
|
608
|
+
error?: string;
|
|
609
|
+
columns?: (keyof T)[];
|
|
610
|
+
}): Promise<T>;
|
|
611
|
+
template(option: MethodOption & {
|
|
612
|
+
sync: SqlSyncMode.Sync;
|
|
613
|
+
resultMode?: SqlTemplateMode.AssertOne;
|
|
614
|
+
id?: string | number | Array<string | number>;
|
|
615
|
+
where?: Partial<T> | Array<Partial<T>>;
|
|
616
|
+
mode?: SqlSelectMode;
|
|
617
|
+
error?: string;
|
|
618
|
+
columns?: (keyof T)[];
|
|
619
|
+
}): T;
|
|
620
|
+
template(option: MethodOption & {
|
|
621
|
+
sync: SqlSyncMode.Async;
|
|
622
|
+
resultMode?: SqlTemplateMode.AssertOne;
|
|
623
|
+
id?: string | number | Array<string | number>;
|
|
624
|
+
where?: Partial<T> | Array<Partial<T>>;
|
|
625
|
+
mode?: SqlSelectMode;
|
|
626
|
+
error?: string;
|
|
627
|
+
columns?: (keyof T)[];
|
|
628
|
+
}): Promise<T>;
|
|
629
|
+
template(option: MethodOption & {
|
|
630
|
+
resultMode: SqlTemplateMode.Count;
|
|
631
|
+
id?: string | number | Array<string | number>;
|
|
632
|
+
where?: Partial<T> | Array<Partial<T>>;
|
|
633
|
+
mode?: SqlSelectMode;
|
|
634
|
+
error?: string;
|
|
635
|
+
columns?: (keyof T)[];
|
|
636
|
+
}): Promise<number>;
|
|
637
|
+
template(option: MethodOption & {
|
|
638
|
+
sync: SqlSyncMode.Sync;
|
|
639
|
+
resultMode: SqlTemplateMode.Count;
|
|
640
|
+
id?: string | number | Array<string | number>;
|
|
641
|
+
where?: Partial<T> | Array<Partial<T>>;
|
|
642
|
+
mode?: SqlSelectMode;
|
|
643
|
+
error?: string;
|
|
644
|
+
columns?: (keyof T)[];
|
|
645
|
+
}): number;
|
|
646
|
+
template(option: MethodOption & {
|
|
647
|
+
sync: SqlSyncMode.Async;
|
|
648
|
+
resultMode: SqlTemplateMode.Count;
|
|
649
|
+
id?: string | number | Array<string | number>;
|
|
650
|
+
where?: Partial<T> | Array<Partial<T>>;
|
|
651
|
+
mode?: SqlSelectMode;
|
|
652
|
+
error?: string;
|
|
653
|
+
columns?: (keyof T)[];
|
|
654
|
+
}): Promise<number>;
|
|
655
|
+
template(option: MethodOption & {
|
|
656
|
+
resultMode: SqlTemplateMode.NotSureOne;
|
|
657
|
+
id?: string | number | Array<string | number>;
|
|
658
|
+
where?: Partial<T> | Array<Partial<T>>;
|
|
659
|
+
mode?: SqlSelectMode;
|
|
660
|
+
error?: string;
|
|
661
|
+
columns?: (keyof T)[];
|
|
662
|
+
}): Promise<T | null>;
|
|
663
|
+
template(option: MethodOption & {
|
|
664
|
+
sync: SqlSyncMode.Sync;
|
|
665
|
+
resultMode: SqlTemplateMode.NotSureOne;
|
|
666
|
+
id?: string | number | Array<string | number>;
|
|
667
|
+
where?: Partial<T> | Array<Partial<T>>;
|
|
668
|
+
mode?: SqlSelectMode;
|
|
669
|
+
error?: string;
|
|
670
|
+
columns?: (keyof T)[];
|
|
671
|
+
}): T | null;
|
|
672
|
+
template(option: MethodOption & {
|
|
673
|
+
sync: SqlSyncMode.Async;
|
|
674
|
+
resultMode: SqlTemplateMode.NotSureOne;
|
|
675
|
+
id?: string | number | Array<string | number>;
|
|
676
|
+
where?: Partial<T> | Array<Partial<T>>;
|
|
677
|
+
mode?: SqlSelectMode;
|
|
678
|
+
error?: string;
|
|
679
|
+
columns?: (keyof T)[];
|
|
680
|
+
}): Promise<T | null>;
|
|
681
|
+
template(option: MethodOption & {
|
|
682
|
+
resultMode: SqlTemplateMode.Many;
|
|
683
|
+
id?: string | number | Array<string | number>;
|
|
684
|
+
where?: Partial<T> | Array<Partial<T>>;
|
|
685
|
+
mode?: SqlSelectMode;
|
|
686
|
+
error?: string;
|
|
687
|
+
columns?: (keyof T)[];
|
|
688
|
+
}): Promise<T[]>;
|
|
689
|
+
template(option: MethodOption & {
|
|
690
|
+
sync: SqlSyncMode.Sync;
|
|
691
|
+
resultMode: SqlTemplateMode.Many;
|
|
692
|
+
id?: string | number | Array<string | number>;
|
|
693
|
+
where?: Partial<T> | Array<Partial<T>>;
|
|
694
|
+
mode?: SqlSelectMode;
|
|
695
|
+
error?: string;
|
|
696
|
+
columns?: (keyof T)[];
|
|
697
|
+
}): T[];
|
|
698
|
+
template(option: MethodOption & {
|
|
699
|
+
sync: SqlSyncMode.Async;
|
|
700
|
+
resultMode: SqlTemplateMode.Many;
|
|
701
|
+
id?: string | number | Array<string | number>;
|
|
702
|
+
where?: Partial<T> | Array<Partial<T>>;
|
|
703
|
+
mode?: SqlSelectMode;
|
|
704
|
+
error?: string;
|
|
705
|
+
columns?: (keyof T)[];
|
|
706
|
+
}): Promise<T[]>;
|
|
707
|
+
private _query;
|
|
708
|
+
/**
|
|
709
|
+
# 自由查询
|
|
710
|
+
0. `sync`: 同步(sqlite)或者异步(mysql、remote),影响返回值类型,默认`异步模式`
|
|
711
|
+
1. `resultMode`: 返回值类型断言,三种
|
|
712
|
+
1. One_Row_One_Column_Assert,
|
|
713
|
+
2. One_Row_One_Column_NotSure,
|
|
714
|
+
3. One_Row_Many_Column_Assert,
|
|
715
|
+
4. One_Row_Many_Column_NotSure,
|
|
716
|
+
5. Many_Row_One_Column,
|
|
717
|
+
6. Many_Row_Many_Column[默认]
|
|
718
|
+
2. `sql` 或者 `sqlid`
|
|
719
|
+
3. `params`
|
|
720
|
+
4. `defValue`: One_Row_One_Column 时有效
|
|
721
|
+
5. `multiple`: = true 时表示多重sql查询,且每个sql的结果都是相同的resultMode, 此时 `One_Row_One_Column` `Many_Row_One_Column` `One_Row_Many_Column` 将按多重数组解析,`Many_Row_Many_Column` 不变,此时需要自己手动指定返回类型.
|
|
722
|
+
此时 `One_Row_One_Column` 将返回多个单值组成的数组: `[1, 'ok', 3]`
|
|
723
|
+
`One_Row_Many_Column` 将返回多个对象组成的数组: `[{ob1}, {ob2}, {ob3}]`
|
|
724
|
+
`Many_Row_One_Column` 将返回多个单值数组组成的数组: `[[1,2,3], ['a', 'b']]`
|
|
725
|
+
6. `dbName`: 默认使用service注解的`dbName`,可以在某个方法中覆盖
|
|
726
|
+
7. `conn`: 仅在开启事务时需要主动传入,传入示例:
|
|
727
|
+
```
|
|
728
|
+
service.transaction(async conn => {
|
|
729
|
+
service.insert({conn});
|
|
730
|
+
});
|
|
731
|
+
```
|
|
732
|
+
9. `dao`: 永远不需要传入该值
|
|
733
|
+
|
|
734
|
+
*/
|
|
735
|
+
select<L = T>(option: MethodOption & {
|
|
736
|
+
sync?: SqlSyncMode.Async;
|
|
737
|
+
resultMode?: SqlQueryMode.Many_Row_Many_Column | SqlQueryMode.Many_Row_One_Column;
|
|
738
|
+
sqlId?: string;
|
|
739
|
+
sql?: string;
|
|
740
|
+
params?: Record<string, any>;
|
|
741
|
+
context?: any;
|
|
742
|
+
isPage?: boolean;
|
|
743
|
+
defValue?: L | null;
|
|
744
|
+
multiple?: boolean;
|
|
745
|
+
errorMsg?: string;
|
|
746
|
+
}): Promise<L[]>;
|
|
747
|
+
select<L = T>(option: MethodOption & {
|
|
748
|
+
sync?: SqlSyncMode.Async;
|
|
749
|
+
resultMode: SqlQueryMode.One_Row_Many_Column_Assert | SqlQueryMode.One_Row_One_Column_Assert;
|
|
750
|
+
sqlId?: string;
|
|
751
|
+
sql?: string;
|
|
752
|
+
params?: Record<string, any>;
|
|
753
|
+
context?: any;
|
|
754
|
+
isPage?: boolean;
|
|
755
|
+
defValue?: L | null;
|
|
756
|
+
multiple?: boolean;
|
|
757
|
+
errorMsg?: string;
|
|
758
|
+
}): Promise<L>;
|
|
759
|
+
select<L = T>(option: MethodOption & {
|
|
760
|
+
sync?: SqlSyncMode.Async;
|
|
761
|
+
resultMode: SqlQueryMode.One_Row_Many_Column_NotSure | SqlQueryMode.One_Row_One_Column_NotSure;
|
|
762
|
+
sqlId?: string;
|
|
763
|
+
sql?: string;
|
|
764
|
+
params?: Record<string, any>;
|
|
765
|
+
context?: any;
|
|
766
|
+
isPage?: boolean;
|
|
767
|
+
defValue?: L | null;
|
|
768
|
+
multiple?: boolean;
|
|
769
|
+
errorMsg?: string;
|
|
770
|
+
}): Promise<L | null>;
|
|
771
|
+
select<L = T>(option: MethodOption & {
|
|
772
|
+
sync: SqlSyncMode.Sync;
|
|
773
|
+
resultMode?: SqlQueryMode.Many_Row_Many_Column | SqlQueryMode.Many_Row_One_Column;
|
|
774
|
+
sqlId?: string;
|
|
775
|
+
sql?: string;
|
|
776
|
+
params?: Record<string, any>;
|
|
777
|
+
context?: any;
|
|
778
|
+
isPage?: boolean;
|
|
779
|
+
defValue?: L | null;
|
|
780
|
+
multiple?: boolean;
|
|
781
|
+
errorMsg?: string;
|
|
782
|
+
}): L[];
|
|
783
|
+
select<L = T>(option: MethodOption & {
|
|
784
|
+
sync: SqlSyncMode.Sync;
|
|
785
|
+
resultMode: SqlQueryMode.One_Row_Many_Column_Assert | SqlQueryMode.One_Row_One_Column_Assert;
|
|
786
|
+
sqlId?: string;
|
|
787
|
+
sql?: string;
|
|
788
|
+
params?: Record<string, any>;
|
|
789
|
+
context?: any;
|
|
790
|
+
isPage?: boolean;
|
|
791
|
+
defValue?: L | null;
|
|
792
|
+
multiple?: boolean;
|
|
793
|
+
errorMsg?: string;
|
|
794
|
+
}): L;
|
|
795
|
+
select<L = T>(option: MethodOption & {
|
|
796
|
+
sync: SqlSyncMode.Sync;
|
|
797
|
+
resultMode: SqlQueryMode.One_Row_Many_Column_NotSure | SqlQueryMode.One_Row_One_Column_NotSure;
|
|
798
|
+
sqlId?: string;
|
|
799
|
+
sql?: string;
|
|
800
|
+
params?: Record<string, any>;
|
|
801
|
+
context?: any;
|
|
802
|
+
isPage?: boolean;
|
|
803
|
+
defValue?: L | null;
|
|
804
|
+
multiple?: boolean;
|
|
805
|
+
errorMsg?: string;
|
|
806
|
+
}): L | null;
|
|
807
|
+
/**
|
|
808
|
+
# 自由执行sql
|
|
809
|
+
0. `sync`: 同步(sqlite)或者异步(mysql、remote),影响返回值类型,默认`异步模式`
|
|
810
|
+
1. `sql` 或者 `sqlid`
|
|
811
|
+
2. `params`
|
|
812
|
+
3. `dbName`: 默认使用service注解的`dbName`,可以在某个方法中覆盖
|
|
813
|
+
4. `conn`: 仅在开启事务时需要主动传入,传入示例:
|
|
814
|
+
```
|
|
815
|
+
service.transaction(async conn => {
|
|
816
|
+
service.insert({conn});
|
|
817
|
+
});
|
|
818
|
+
```
|
|
819
|
+
5. `dao`: 永远不需要传入该值
|
|
820
|
+
|
|
821
|
+
*/
|
|
822
|
+
excute<L = T>(option: MethodOption & {
|
|
823
|
+
sync?: SqlSyncMode.Async;
|
|
824
|
+
sqlId?: string;
|
|
825
|
+
sql?: string;
|
|
826
|
+
params?: Record<string, any>;
|
|
827
|
+
context?: any;
|
|
828
|
+
}): Promise<number>;
|
|
829
|
+
excute<L = T>(option: MethodOption & {
|
|
830
|
+
sync: SqlSyncMode.Sync;
|
|
831
|
+
sqlId?: string;
|
|
832
|
+
sql?: string;
|
|
833
|
+
params?: Record<string, any>;
|
|
834
|
+
context?: any;
|
|
835
|
+
}): number;
|
|
836
|
+
/**
|
|
837
|
+
### 开启事务
|
|
838
|
+
### 这里面的所有数据方法,都必须传递CONN,否则会引起
|
|
839
|
+
# 死锁
|
|
840
|
+
### 举例说明:
|
|
841
|
+
#### 假设有两条代码,都操作同一个表A,其中代码1传了conn,但代码2没有传
|
|
842
|
+
#### 代码1:插入数据,代码2:更新数据
|
|
843
|
+
#### 二者操作的是不同的数据
|
|
844
|
+
#### 以上为前提,开始分析:
|
|
845
|
+
** 当事务打开后,会创建一个连接1,开始执行代码1
|
|
846
|
+
** 代码1执行完毕,由于`transaction`方法尚未结束,所以不会提交事务。
|
|
847
|
+
** 代码1是插入数据,因此会导致全表锁
|
|
848
|
+
** 代码2开始执行,由于没有传入conn,所以会创建一个新的连接2
|
|
849
|
+
** 代码2执行时,会等待连接1的锁释放
|
|
850
|
+
** 但是连接1的锁是在`transaction`方法执行完后才会提交并释放锁,这导致死循环,开启死锁
|
|
851
|
+
**
|
|
852
|
+
*/
|
|
853
|
+
transaction<L = T>(option: MethodOption & {
|
|
854
|
+
sync?: SqlSyncMode.Async;
|
|
855
|
+
fn: (conn: Connection) => Promise<L>;
|
|
856
|
+
}): Promise<L | null>;
|
|
857
|
+
transaction<L = T>(option: MethodOption & {
|
|
858
|
+
sync: SqlSyncMode.Sync;
|
|
859
|
+
fn: (conn: Connection) => L;
|
|
860
|
+
}): L | null;
|
|
861
|
+
stream(option?: MethodOption): StreamQuery<T>;
|
|
862
|
+
/**
|
|
863
|
+
#创建表
|
|
864
|
+
** `tableName` 表名称
|
|
865
|
+
** `temp` 是否是临时表,默认true
|
|
866
|
+
** `columns` 字符串数组,默认是当前实体类全部字段,通过`columns` 可以创建部分字段临时表
|
|
867
|
+
** `id` 表的主键设置 4种:
|
|
868
|
+
1. `auto`: `columns`中已经在当前实体类配置的ID作为主键 `默认`
|
|
869
|
+
2. `all`: `columns`中所有字段全部当主键
|
|
870
|
+
3. `none`: 没有主键
|
|
871
|
+
4. 自定义字段名称:字符串数组
|
|
872
|
+
** `index` 表的索引,设置方式同ID
|
|
873
|
+
*/
|
|
874
|
+
private _createTable;
|
|
875
|
+
}
|
|
876
|
+
declare class StreamCondition<T extends object> {
|
|
877
|
+
protected _prefix: number;
|
|
878
|
+
protected _index: number;
|
|
879
|
+
protected _wheres: string[];
|
|
880
|
+
protected _andQuerys: StreamCondition<T>[];
|
|
881
|
+
protected _orQuerys: StreamCondition<T>[];
|
|
882
|
+
protected _paramKeys: Record<string, string[] | Record<string, string> | string>;
|
|
883
|
+
protected _param: Record<string, any>;
|
|
884
|
+
if_proceed: boolean;
|
|
885
|
+
if_exec: boolean;
|
|
886
|
+
constructor();
|
|
887
|
+
/** 将当前stream重置 */
|
|
888
|
+
reset(): this;
|
|
889
|
+
/** 为下次链条执行提供条件判断:非异步方法跳过,异步方法不执行并返回默认值 */
|
|
890
|
+
if(condition: boolean): this;
|
|
891
|
+
eq(key: keyof T, value: string | number, { name }?: {
|
|
892
|
+
name?: string;
|
|
893
|
+
}): this;
|
|
894
|
+
eqT(t: Partial<T>, { name }?: {
|
|
895
|
+
name?: string;
|
|
896
|
+
}): this;
|
|
897
|
+
notEq(key: keyof T, value: string | number, { name }?: {
|
|
898
|
+
name?: string;
|
|
899
|
+
}): this;
|
|
900
|
+
eqWith(key1: keyof T, key2: keyof T): this;
|
|
901
|
+
notEqWith(key1: keyof T, key2: keyof T): this;
|
|
902
|
+
regexp(key: keyof T, regexp: string, { name }?: {
|
|
903
|
+
name?: string;
|
|
904
|
+
}): this;
|
|
905
|
+
notRegexp(key: keyof T, regexp: string, { name }?: {
|
|
906
|
+
name?: string;
|
|
907
|
+
}): this;
|
|
908
|
+
/** (key1 << 8) + key2 = value */
|
|
909
|
+
shiftEq(key1: keyof T, key2: keyof T, value: number, { name }?: {
|
|
910
|
+
name?: string;
|
|
911
|
+
}): this;
|
|
912
|
+
/** (key1 << 8) + key2 <> value */
|
|
913
|
+
shiftNotEq(key1: keyof T, key2: keyof T, value: number, { name }?: {
|
|
914
|
+
name?: string;
|
|
915
|
+
}): this;
|
|
916
|
+
grate(key: keyof T, value: string | number, { name }?: {
|
|
917
|
+
name?: string;
|
|
918
|
+
}): this;
|
|
919
|
+
grateEq(key: keyof T, value: string | number, { name }?: {
|
|
920
|
+
name?: string;
|
|
921
|
+
}): this;
|
|
922
|
+
grateWith(key1: keyof T, key2: keyof T): this;
|
|
923
|
+
grateEqWith(key1: keyof T, key2: keyof T): this;
|
|
924
|
+
less(key: keyof T, value: string | number, { name }?: {
|
|
925
|
+
name?: string;
|
|
926
|
+
}): this;
|
|
927
|
+
lessEq(key: keyof T, value: string | number, { name }?: {
|
|
928
|
+
name?: string;
|
|
929
|
+
}): this;
|
|
930
|
+
lessWith(key1: keyof T, key2: keyof T): this;
|
|
931
|
+
lessEqWith(key1: keyof T, key2: keyof T): this;
|
|
932
|
+
like(key: keyof T, value: string | number, { name, force }?: {
|
|
933
|
+
name?: string;
|
|
934
|
+
force?: boolean;
|
|
935
|
+
}): this;
|
|
936
|
+
notLike(key: keyof T, value: string | number, { name, force }?: {
|
|
937
|
+
name?: string;
|
|
938
|
+
force?: boolean;
|
|
939
|
+
}): this;
|
|
940
|
+
leftLike(key: keyof T, value: string | number, { name, force }?: {
|
|
941
|
+
name?: string;
|
|
942
|
+
force?: boolean;
|
|
943
|
+
}): this;
|
|
944
|
+
notLeftLike(key: keyof T, value: string | number, { name, force }?: {
|
|
945
|
+
name?: string;
|
|
946
|
+
force?: boolean;
|
|
947
|
+
}): this;
|
|
948
|
+
rightLike(key: keyof T, value: string | number, { name, force }?: {
|
|
949
|
+
name?: string;
|
|
950
|
+
force?: boolean;
|
|
951
|
+
}): this;
|
|
952
|
+
notRightLike(key: keyof T, value: string | number, { name, force }?: {
|
|
953
|
+
name?: string;
|
|
954
|
+
force?: boolean;
|
|
955
|
+
}): this;
|
|
956
|
+
PreciseLike(key: keyof T, value: string | number, { name, force }?: {
|
|
957
|
+
name?: string;
|
|
958
|
+
force?: boolean;
|
|
959
|
+
}): this;
|
|
960
|
+
notPreciseLike(key: keyof T, value: string | number, { name, force }?: {
|
|
961
|
+
name?: string;
|
|
962
|
+
force?: boolean;
|
|
963
|
+
}): this;
|
|
964
|
+
glob(key: keyof T, value: string | number, { name, force }?: {
|
|
965
|
+
name?: string;
|
|
966
|
+
force?: boolean;
|
|
967
|
+
}): this;
|
|
968
|
+
notGlob(key: keyof T, value: string | number, { name, force }?: {
|
|
969
|
+
name?: string;
|
|
970
|
+
force?: boolean;
|
|
971
|
+
}): this;
|
|
972
|
+
leftGlob(key: keyof T, value: string | number, { name, force }?: {
|
|
973
|
+
name?: string;
|
|
974
|
+
force?: boolean;
|
|
975
|
+
}): this;
|
|
976
|
+
notLeftGlob(key: keyof T, value: string | number, { name, force }?: {
|
|
977
|
+
name?: string;
|
|
978
|
+
force?: boolean;
|
|
979
|
+
}): this;
|
|
980
|
+
rightGlob(key: keyof T, value: string | number, { name, force }?: {
|
|
981
|
+
name?: string;
|
|
982
|
+
force?: boolean;
|
|
983
|
+
}): this;
|
|
984
|
+
notRightGlob(key: keyof T, value: string | number, { name, force }?: {
|
|
985
|
+
name?: string;
|
|
986
|
+
force?: boolean;
|
|
987
|
+
}): this;
|
|
988
|
+
PreciseGlob(key: keyof T, value: string | number, { name, force }?: {
|
|
989
|
+
name?: string;
|
|
990
|
+
force?: boolean;
|
|
991
|
+
}): this;
|
|
992
|
+
notPreciseGlob(key: keyof T, value: string | number, { name, force }?: {
|
|
993
|
+
name?: string;
|
|
994
|
+
force?: boolean;
|
|
995
|
+
}): this;
|
|
996
|
+
in(key: keyof T, value: Array<string | number>, { name, force }?: {
|
|
997
|
+
name?: string;
|
|
998
|
+
force?: boolean;
|
|
999
|
+
}): this;
|
|
1000
|
+
notIn(key: keyof T, value: Array<string | number>, { name, force }?: {
|
|
1001
|
+
name?: string;
|
|
1002
|
+
force?: boolean;
|
|
1003
|
+
}): this;
|
|
1004
|
+
isNULL(key: keyof T): this;
|
|
1005
|
+
isNotNULL(key: keyof T): this;
|
|
1006
|
+
between(key: keyof T, value1: string | number, value2: string | number, { name }?: {
|
|
1007
|
+
name?: string;
|
|
1008
|
+
}): this;
|
|
1009
|
+
notBetween(key: keyof T, value1: string | number, value2: string | number, { name }?: {
|
|
1010
|
+
name?: string;
|
|
1011
|
+
}): this;
|
|
1012
|
+
pow(key: keyof T, value: number, { name }?: {
|
|
1013
|
+
name?: string;
|
|
1014
|
+
}): this;
|
|
1015
|
+
notPow(key: keyof T, value: number, { name }?: {
|
|
1016
|
+
name?: string;
|
|
1017
|
+
}): this;
|
|
1018
|
+
powWith(key: keyof T, values: Array<number | string>, { name }?: {
|
|
1019
|
+
name?: string;
|
|
1020
|
+
}): this;
|
|
1021
|
+
notPowWith(key: keyof T, values: Array<number | string>, { name }?: {
|
|
1022
|
+
name?: string;
|
|
1023
|
+
}): this;
|
|
1024
|
+
/** MATCH(key1, key2, key3) AGAINST (value) */
|
|
1025
|
+
match(value: string, keys: (keyof T)[], { name }?: {
|
|
1026
|
+
name?: string;
|
|
1027
|
+
}): this;
|
|
1028
|
+
/** NOT MATCH(key1, key2, key3) AGAINST (value) */
|
|
1029
|
+
notMatch(value: string, keys: (keyof T)[], { name }?: {
|
|
1030
|
+
name?: string;
|
|
1031
|
+
}): this;
|
|
1032
|
+
/** MATCH(key1, key2, key3) AGAINST (value) IN BOOLEAN MODE*/
|
|
1033
|
+
matchBoolean(value: string, keys: (keyof T)[], { name }?: {
|
|
1034
|
+
name?: string;
|
|
1035
|
+
}): this;
|
|
1036
|
+
/** NOT MATCH(key1, key2, key3) AGAINST (value) IN BOOLEAN MODE */
|
|
1037
|
+
notMatchBoolean(value: string, keys: (keyof T)[], { name }?: {
|
|
1038
|
+
name?: string;
|
|
1039
|
+
}): this;
|
|
1040
|
+
/** MATCH(key1, key2, key3) AGAINST (value) WITH QUERY EXPANSION*/
|
|
1041
|
+
matchQuery(value: string, keys: (keyof T)[], { name }?: {
|
|
1042
|
+
name?: string;
|
|
1043
|
+
}): this;
|
|
1044
|
+
/** NOT MATCH(key1, key2, key3) AGAINST (value) WITH QUERY EXPANSION*/
|
|
1045
|
+
notMatchQuery(value: string, keys: (keyof T)[], { name }?: {
|
|
1046
|
+
name?: string;
|
|
1047
|
+
}): this;
|
|
1048
|
+
includes(key: keyof T, value: string | number, { name }?: {
|
|
1049
|
+
name?: string;
|
|
1050
|
+
}): this;
|
|
1051
|
+
notIncludes(key: keyof T, value: string | number, { name }?: {
|
|
1052
|
+
name?: string;
|
|
1053
|
+
}): this;
|
|
1054
|
+
and(fn: (stream: StreamCondition<T>) => boolean | void): this;
|
|
1055
|
+
or(fn: (stream: StreamCondition<T>) => boolean | void): this;
|
|
1056
|
+
protected where(): {
|
|
1057
|
+
where: string;
|
|
1058
|
+
params: Record<string, any>;
|
|
1059
|
+
};
|
|
1060
|
+
private _;
|
|
1061
|
+
private _null;
|
|
1062
|
+
private _key;
|
|
1063
|
+
private _between;
|
|
1064
|
+
private _in;
|
|
1065
|
+
private _shift;
|
|
1066
|
+
private _match;
|
|
1067
|
+
private _pow;
|
|
1068
|
+
private _like;
|
|
1069
|
+
private _includes;
|
|
1070
|
+
}
|
|
1071
|
+
declare class StreamBuild<T extends object> extends StreamCondition<T> {
|
|
1072
|
+
protected _table: string;
|
|
1073
|
+
protected _distinct: boolean;
|
|
1074
|
+
protected _columns: string[];
|
|
1075
|
+
protected _updates?: Partial<T>;
|
|
1076
|
+
protected _updateColumns: string[];
|
|
1077
|
+
protected _groups: (keyof T)[];
|
|
1078
|
+
protected _orders: string[];
|
|
1079
|
+
protected _startRow: number;
|
|
1080
|
+
protected _pageSize: number;
|
|
1081
|
+
constructor(table: string);
|
|
1082
|
+
/** 将当前stream重置 */
|
|
1083
|
+
reset(): this;
|
|
1084
|
+
groupBy(key: keyof T): this;
|
|
1085
|
+
asc(...keys: (keyof T)[]): this;
|
|
1086
|
+
desc(...keys: (keyof T)[]): this;
|
|
1087
|
+
limit(startRow: number, pageSize: number): this;
|
|
1088
|
+
page(pageNumber: number, pageSize: number): this;
|
|
1089
|
+
table(_table: string): this;
|
|
1090
|
+
distinct(on?: boolean): this;
|
|
1091
|
+
count(key: keyof T, countName?: string, distinct?: boolean): this;
|
|
1092
|
+
sum(key: keyof T, legName?: string, distinct?: boolean): this;
|
|
1093
|
+
avg(key: keyof T, legName?: string, distinct?: boolean): this;
|
|
1094
|
+
max(key: keyof T, legName?: string, distinct?: boolean): this;
|
|
1095
|
+
min(key: keyof T, legName?: string, distinct?: boolean): this;
|
|
1096
|
+
groupConcat(key: keyof T, param?: {
|
|
1097
|
+
distinct?: boolean;
|
|
1098
|
+
separator?: string;
|
|
1099
|
+
asc?: (keyof T)[];
|
|
1100
|
+
desc?: (keyof T)[];
|
|
1101
|
+
groupName?: string;
|
|
1102
|
+
}): this;
|
|
1103
|
+
selectColumn(...key: (keyof T)[]): this;
|
|
1104
|
+
updateColumn(key: keyof T, value: T[keyof T]): this;
|
|
1105
|
+
updateT(t: Partial<T>): this;
|
|
1106
|
+
replace(key: keyof T, valueToFind: T[keyof T], valueToReplace: T[keyof T]): this;
|
|
1107
|
+
}
|
|
1108
|
+
declare class StreamQuery<T extends object> extends StreamBuild<T> {
|
|
1109
|
+
private _service;
|
|
1110
|
+
constructor(table: string, service: SqlService<T>);
|
|
1111
|
+
select<L = T>(option: {
|
|
1112
|
+
sync?: SqlSyncMode.Async;
|
|
1113
|
+
resultMode: SqlQueryMode.Many_Row_Many_Column | SqlQueryMode.Many_Row_One_Column;
|
|
1114
|
+
}): Promise<L[]>;
|
|
1115
|
+
select<L = T>(option: {
|
|
1116
|
+
sync?: SqlSyncMode.Async;
|
|
1117
|
+
resultMode: SqlQueryMode.One_Row_Many_Column_Assert | SqlQueryMode.One_Row_One_Column_Assert;
|
|
1118
|
+
errorMsg?: string;
|
|
1119
|
+
}): Promise<L>;
|
|
1120
|
+
select<L = T>(option: {
|
|
1121
|
+
sync?: SqlSyncMode.Async;
|
|
1122
|
+
resultMode: SqlQueryMode.One_Row_Many_Column_NotSure | SqlQueryMode.One_Row_One_Column_NotSure;
|
|
1123
|
+
}): Promise<L | null>;
|
|
1124
|
+
select<L = T>(option: {
|
|
1125
|
+
sync: SqlSyncMode.Sync;
|
|
1126
|
+
resultMode: SqlQueryMode.Many_Row_Many_Column | SqlQueryMode.Many_Row_One_Column;
|
|
1127
|
+
}): L[];
|
|
1128
|
+
select<L = T>(option: {
|
|
1129
|
+
sync: SqlSyncMode.Sync;
|
|
1130
|
+
resultMode: SqlQueryMode.One_Row_Many_Column_Assert | SqlQueryMode.One_Row_One_Column_Assert;
|
|
1131
|
+
errorMsg?: string;
|
|
1132
|
+
}): L;
|
|
1133
|
+
select<L = T>(option: {
|
|
1134
|
+
sync: SqlSyncMode.Sync;
|
|
1135
|
+
resultMode: SqlQueryMode.One_Row_Many_Column_NotSure | SqlQueryMode.One_Row_One_Column_NotSure;
|
|
1136
|
+
}): L | null;
|
|
1137
|
+
update(option: {
|
|
1138
|
+
sync?: SqlSyncMode.Async;
|
|
1139
|
+
}): Promise<number>;
|
|
1140
|
+
update(option: {
|
|
1141
|
+
sync: SqlSyncMode.Sync;
|
|
1142
|
+
}): number;
|
|
1143
|
+
delete(option: {
|
|
1144
|
+
sync?: SqlSyncMode.Async;
|
|
1145
|
+
}): Promise<number>;
|
|
1146
|
+
delete(option: {
|
|
1147
|
+
sync: SqlSyncMode.Sync;
|
|
1148
|
+
}): number;
|
|
1149
|
+
}
|
|
1150
|
+
/**
|
|
1151
|
+
获取REDIS客户端,
|
|
1152
|
+
# [查看库的API](https://github.com/redis/ioredis?tab=readme-ov-file)
|
|
1153
|
+
# [REDIS API](http://doc.redisfans.com/)
|
|
1154
|
+
REDIS 的API 可以直接用,将方法名转为小写
|
|
1155
|
+
*/
|
|
1156
|
+
export declare function getRedisDB(db?: string): any;
|
|
1157
|
+
/**
|
|
1158
|
+
redlock
|
|
1159
|
+
*/
|
|
1160
|
+
export declare function GetRedisLock(key: string, lockMaxActive?: number): Promise<boolean>;
|
|
1161
|
+
export declare function excuteWithLock<T>(config: {
|
|
1162
|
+
/** 返回缓存key,参数=方法的参数+当前用户对象,可以用来清空缓存。 */
|
|
1163
|
+
key: ((...args: any[]) => string) | string;
|
|
1164
|
+
/** 被锁定线程是否sleep直到解锁为止? 默认true */
|
|
1165
|
+
lockWait?: boolean;
|
|
1166
|
+
/** 当设置了lockWait=true时,等待多少【毫秒】进行一次锁查询? 默认:100MS */
|
|
1167
|
+
lockRetryInterval?: number;
|
|
1168
|
+
/** 当设置了lockWait=true时,等待多少【毫秒】即视为超时,放弃本次访问?默认:永不放弃 */
|
|
1169
|
+
lockMaxWaitTime?: number;
|
|
1170
|
+
/** 错误信息 */
|
|
1171
|
+
errorMessage?: string;
|
|
1172
|
+
/** 允许的并发数,默认:1 */
|
|
1173
|
+
lockMaxActive?: number;
|
|
1174
|
+
/** 单个锁多少【毫秒】后自动释放?默认:60*1000MS */
|
|
1175
|
+
lockMaxTime?: number;
|
|
1176
|
+
}, fn__: () => Promise<T>): Promise<any>;
|
|
1177
|
+
/** 与缓存共用时,需要在缓存之前:有缓存则返回缓存,否则加锁执行并缓存,后续队列全部返回缓存,跳过执行 */
|
|
1178
|
+
export declare function MethodLock<T = any>(config: {
|
|
1179
|
+
/** 返回缓存key,参数=方法的参数[注意:必须和主方法的参数数量、完全一致,同时会追加一个当前用户对象]+当前用户对象,可以用来清空缓存。 */
|
|
1180
|
+
key: ((this: T, ...args: any[]) => string) | string;
|
|
1181
|
+
/** 被锁定线程是否sleep直到解锁为止? 默认true */
|
|
1182
|
+
lockWait?: boolean;
|
|
1183
|
+
/** 当设置了lockWait=true时,等待多少【毫秒】进行一次锁查询? 默认100ms */
|
|
1184
|
+
lockRetryInterval?: number;
|
|
1185
|
+
/** 当设置了lockWait=true时,等待多少【毫秒】即视为超时,放弃本次访问?默认永不放弃 */
|
|
1186
|
+
lockMaxWaitTime?: number;
|
|
1187
|
+
/** 错误信息 */
|
|
1188
|
+
errorMessage?: string;
|
|
1189
|
+
/** 允许的并发数,默认=1 */
|
|
1190
|
+
lockMaxActive?: number;
|
|
1191
|
+
/** 单个锁多少【毫秒】后自动释放?即时任务没有执行完毕或者没有主动释放锁? */
|
|
1192
|
+
lockMaxTime?: number;
|
|
1193
|
+
}): (target: T, _propertyKey: string, descriptor: PropertyDescriptor) => void;
|
|
1194
|
+
export declare function clearMethodCache(key: string): Promise<void>;
|
|
1195
|
+
export declare function excuteWithCache<T>(config: {
|
|
1196
|
+
/** 返回缓存key,参数=方法的参数+当前用户对象,可以用来清空缓存。 */
|
|
1197
|
+
key: string;
|
|
1198
|
+
/** 返回缓存清除key,参数=方法的参数+当前用户对象,可以用来批量清空缓存 */
|
|
1199
|
+
clearKey?: string[];
|
|
1200
|
+
/** 自动清空缓存的时间,单位分钟 */
|
|
1201
|
+
autoClearTime?: number;
|
|
1202
|
+
/** 随着当前用户sesion的清空而一起清空 */
|
|
1203
|
+
clearWithSession?: boolean;
|
|
1204
|
+
}, fn: () => Promise<T>): Promise<any>;
|
|
1205
|
+
export declare function MethodCache<T = any>(config: {
|
|
1206
|
+
/** 返回缓存key,参数=方法的参数[注意:必须和主方法的参数数量、完全一致,同时会追加一个当前用户对象]+当前用户对象,可以用来清空缓存。 */
|
|
1207
|
+
key: ((this: T, ...args: any[]) => string) | string;
|
|
1208
|
+
/** 返回缓存清除key,参数=方法的参数[注意:必须和主方法的参数数量、完全一致,同时会追加一个当前用户对象]+当前用户对象,可以用来批量清空缓存 */
|
|
1209
|
+
clearKey?: ((this: T, ...args: any[]) => string[]) | string[];
|
|
1210
|
+
/** 自动清空缓存的时间,单位分钟 */
|
|
1211
|
+
autoClearTime?: number;
|
|
1212
|
+
/** 随着当前用户sesion的清空而一起清空 */
|
|
1213
|
+
clearWithSession?: boolean;
|
|
1214
|
+
}): (target: T, _propertyKey: string, descriptor: PropertyDescriptor) => void;
|
|
1215
|
+
export declare const LetsGo: (options: GlobalSqlOption) => Promise<void>;
|
|
1216
|
+
export {};
|