baja-lite 1.6.4 → 1.6.6

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.
Files changed (73) hide show
  1. package/boot-remote.d.ts +2 -0
  2. package/{src/boot-remote.ts → boot-remote.js} +66 -64
  3. package/boot.d.ts +2 -0
  4. package/{src/boot.ts → boot.js} +166 -170
  5. package/code.d.ts +2 -0
  6. package/{src/code.ts → code.js} +405 -414
  7. package/convert-xml.d.ts +10 -0
  8. package/{src/convert-xml.ts → convert-xml.js} +410 -460
  9. package/error.d.ts +5 -0
  10. package/error.js +13 -0
  11. package/event.d.ts +10 -0
  12. package/event.js +38 -0
  13. package/fn.d.ts +128 -0
  14. package/fn.js +172 -0
  15. package/{src/index.ts → index.d.ts} +10 -11
  16. package/index.js +10 -0
  17. package/math.d.ts +83 -0
  18. package/math.js +451 -0
  19. package/object.d.ts +126 -0
  20. package/object.js +321 -0
  21. package/package.json +13 -13
  22. package/snowflake.d.ts +12 -0
  23. package/{src/snowflake.ts → snowflake.js} +108 -127
  24. package/sql.d.ts +2151 -0
  25. package/sql.js +5371 -0
  26. package/sqlite.d.ts +32 -0
  27. package/{src/sqlite.ts → sqlite.js} +156 -157
  28. package/string.d.ts +17 -0
  29. package/string.js +105 -0
  30. package/test-mysql.d.ts +2 -0
  31. package/test-mysql.js +114 -0
  32. package/test-postgresql.d.ts +2 -0
  33. package/{src/test-postgresql.ts → test-postgresql.js} +91 -80
  34. package/test-sqlite.d.ts +1 -0
  35. package/{src/test-sqlite.ts → test-sqlite.js} +90 -80
  36. package/test-xml.d.ts +1 -0
  37. package/{src/test-xml.ts → test-xml.js} +2 -2
  38. package/test.d.ts +1 -0
  39. package/{src/test.ts → test.js} +2 -3
  40. package/wx/base.d.ts +11 -0
  41. package/wx/base.js +78 -0
  42. package/wx/mini.d.ts +52 -0
  43. package/wx/mini.js +112 -0
  44. package/wx/organ.d.ts +65 -0
  45. package/wx/organ.js +171 -0
  46. package/{src/wx/types.ts → wx/types.d.ts} +560 -549
  47. package/wx/types.js +1 -0
  48. package/{src/wx.ts → wx.d.ts} +3 -3
  49. package/wx.js +3 -0
  50. package/.eslintignore +0 -7
  51. package/.eslintrc.cjs +0 -89
  52. package/.prettierrc +0 -7
  53. package/.vscode/settings.json +0 -9
  54. package/ci.js +0 -33
  55. package/package-cjs.json +0 -17
  56. package/pnpm-lock.yaml +0 -2840
  57. package/pnpm-workspace.yaml +0 -2
  58. package/src/error.ts +0 -11
  59. package/src/event.ts +0 -34
  60. package/src/fn.ts +0 -295
  61. package/src/math.ts +0 -405
  62. package/src/object.ts +0 -342
  63. package/src/sql.ts +0 -5529
  64. package/src/string.ts +0 -111
  65. package/src/test-mysql.ts +0 -148
  66. package/src/wx/base.ts +0 -77
  67. package/src/wx/mini.ts +0 -147
  68. package/src/wx/organ.ts +0 -290
  69. package/tsconfig.cjs.json +0 -42
  70. package/tsconfig.json +0 -44
  71. package/xml/event-report.xml +0 -13
  72. package/yarn.lock +0 -1977
  73. /package/{Readme.md → README.md} +0 -0
package/sql.d.ts ADDED
@@ -0,0 +1,2151 @@
1
+ import { ExtensionCodec } from "@msgpack/msgpack";
2
+ import { _columns, _columnsNoId, _def, _deleteState, _fields, _ids, _index, _logicIds, _stateFileName, AField, DBType, EnumMap, FieldOption } from 'baja-lite-field';
3
+ import pino from 'pino';
4
+ import { XML } from './convert-xml.js';
5
+ export declare const extensionCodec: ExtensionCodec<undefined>;
6
+ declare const _daoDBName: unique symbol;
7
+ declare const _tableName: unique symbol;
8
+ declare const _className: unique symbol;
9
+ declare const _ClassName: unique symbol;
10
+ declare const _vueName: unique symbol;
11
+ declare const _transformer: unique symbol;
12
+ declare const _comment: unique symbol;
13
+ export declare const _sqlCache: unique symbol;
14
+ export declare const _dao: unique symbol;
15
+ export declare const _primaryDB = "______primaryDB_______";
16
+ declare const _dbType: unique symbol;
17
+ declare const _sqlite_version: unique symbol;
18
+ declare const _daoConnection: unique symbol;
19
+ declare const _inTransaction: unique symbol;
20
+ declare const _daoDB: unique symbol;
21
+ declare const _sqliteRemoteName: unique symbol;
22
+ declare const _SqlOption: unique symbol;
23
+ export declare const _DataConvert: unique symbol;
24
+ export declare const _Context: unique symbol;
25
+ export declare const _enum: unique symbol;
26
+ export declare const _GlobalSqlOption: unique symbol;
27
+ export declare const _EventBus: unique symbol;
28
+ export declare const _path: unique symbol;
29
+ export declare const _fs: unique symbol;
30
+ export declare const logger: pino.Logger<never, boolean>;
31
+ export declare enum MapperIfUndefined {
32
+ Null = 0,
33
+ Skip = 1,
34
+ Zero = 2,
35
+ EmptyString = 3
36
+ }
37
+ export declare enum SyncMode {
38
+ /** 同步执行 */
39
+ Sync = 0,
40
+ /** 异步执行 */
41
+ Async = 1
42
+ }
43
+ export declare enum InsertMode {
44
+ /**
45
+ # 默认使用
46
+ ** 支持单个、批量,语法 `INSERT INTO XX VALUES (第一条数据), (第二条数据);`
47
+ ** 批量执行有性能优势,但无法利用数据库的sql预编译功能
48
+ */
49
+ Insert = 0,
50
+ /**
51
+ # 利用临时表
52
+ ## 执行步骤
53
+ 1. 建立临时表(从正式表复制)
54
+ 2. 数据全部进入临时表
55
+ 3. 临时表数据转移到正式表: `INSERT INTO 正式表 SELECT * FROM 临时表`
56
+ 4. 删除临时表
57
+ ## 注意
58
+ 1. 适用于:主键不会冲突、非自增
59
+ 2. 临时表的结构复制正式表
60
+ */
61
+ InsertWithTempTable = 1,
62
+ /**
63
+ * 如果不存在则插入
64
+ * 来源是数据库,根据ID或者指定字段查询
65
+ */
66
+ InsertIfNotExists = 2,
67
+ /**
68
+ # 插入或者更新
69
+ 1. 判断依据是主键,来源是从数据库查询
70
+ */
71
+ Replace = 3
72
+ }
73
+ export declare enum DeleteMode {
74
+ /**
75
+ ##常规删除 默认
76
+ ### 例一
77
+ `DELETE FROM WHERE (id = 1) OR (id = 2)`
78
+ ### 例二
79
+ `DELETE FROM WHERE (id = 1 AND idx = 11) OR (id = 2 AND idx = 22)`
80
+ */
81
+ Common = 0,
82
+ TempTable = 1
83
+ }
84
+ export declare enum SelectMode {
85
+ /**
86
+ ##常规 默认
87
+ ### 例一
88
+ `SELECT * FROM WHERE (id = 1) OR (id = 2)`
89
+ ### 例二
90
+ `SELECT * FROM WHERE (id = 1 AND idx = 11) OR (id = 2 AND idx = 22)`
91
+ */
92
+ Common = 0,
93
+ TempTable = 1
94
+ }
95
+ export declare enum TemplateResult {
96
+ /** 确定返回一条记录,如果不是一个,将报错,返回类型是T */
97
+ AssertOne = 0,
98
+ /** 可能返回一条记录,返回类型是T|null */
99
+ NotSureOne = 1,
100
+ /** 返回多条记录 */
101
+ Many = 2,
102
+ /** 仅查询记录数量 */
103
+ Count = 3
104
+ }
105
+ export declare enum SelectResult {
106
+ /** 一行一列 确定非空 */
107
+ R_C_Assert = 0,
108
+ /** 一行一列 可能空 */
109
+ R_C_NotSure = 1,
110
+ /** 一行多列 确定非空 */
111
+ R_CS_Assert = 2,
112
+ /** 一行多列 可能空 */
113
+ R_CS_NotSure = 3,
114
+ /** 多行一列 */
115
+ RS_C = 4,
116
+ /** 多行多列 */
117
+ RS_CS = 5
118
+ }
119
+ export declare enum ColumnMode {
120
+ NONE = 0,
121
+ HUMP = 1
122
+ }
123
+ export declare const SqliteMemory = ":memory:";
124
+ interface MethodOption {
125
+ tableName?: string;
126
+ /** 数据库、连接名称,对于MYSQL、mongo,适用于多数据源,对于sqlite,适用于不同的数据库文件 */
127
+ dbName?: string;
128
+ dbType?: DBType;
129
+ /** 调用时,永远不需要传
130
+ * @deprecated
131
+ * */
132
+ dao?: Dao;
133
+ /** 调用时,仅在开启事务时需要主动传入,传入方式: */
134
+ conn?: Connection | null;
135
+ }
136
+ export declare const _defOption: {
137
+ maxDeal: number;
138
+ skipUndefined: boolean;
139
+ skipNull: boolean;
140
+ skipEmptyString: boolean;
141
+ };
142
+ /**
143
+ 数据服务注解
144
+ */
145
+ interface ServiceOption {
146
+ /** 增改忽略Undefined */
147
+ skipUndefined?: boolean;
148
+ /** 增改忽略NULL */
149
+ skipNull?: boolean;
150
+ /** 增改忽略空字符串 */
151
+ skipEmptyString?: boolean;
152
+ /** 批量增改时,每次执行最多处理的记录数量 */
153
+ maxDeal?: number;
154
+ tableName?: string;
155
+ /** 数据库、连接名称,对于MYSQL、mongo,适用于多数据源,对于sqlite,适用于不同的数据库文件 */
156
+ dbName?: string;
157
+ /** 调用时,永远不需要传
158
+ * @deprecated
159
+ * */
160
+ dao?: Dao;
161
+ /** 调用时,仅在开启事务时需要主动传入,传入方式: */
162
+ conn?: Connection | null;
163
+ /** 对应的实体类,必须是Class */
164
+ clz?: any;
165
+ /** 默认mysql */
166
+ dbType?: DBType;
167
+ /** SQLite版本以及升级为该版本时需要执行的SQL,初始版本为0.0.1,切记每个位置不要变为两位数*/
168
+ sqliteVersion?: string;
169
+ /** 备注 */
170
+ comment?: string;
171
+ }
172
+ /**
173
+ # 全局行为配置文件
174
+ ### `sqlDir?: string;` 数据库查询语句存放目录.存放格式为 export.default 的js、ts, 存放内容满足格式:
175
+
176
+ ```
177
+ interface SqlModel {
178
+ [key: string]: string | ((params: { [k: string]: any }, context: any, isCount?: boolean) => string)
179
+ }
180
+ ```
181
+ 可以继承该接口来约束格式
182
+ */
183
+ export interface GlobalSqlOptionForWeb {
184
+ /** 增改忽略Undefined */
185
+ skipUndefined?: boolean;
186
+ /** 增改忽略NULL */
187
+ skipNull?: boolean;
188
+ /** 增改忽略空字符串 */
189
+ skipEmptyString?: boolean;
190
+ /** 批量增改时,每次执行最多处理的记录数量 */
191
+ maxDeal?: number;
192
+ SqliteRemote?: {
193
+ /**
194
+ ## 单一数据源
195
+ ```
196
+ db: 'd:/1.db'
197
+ ```
198
+ ## 多数据源:传入多个连接配置
199
+ ```
200
+ db: {
201
+ db1: 'd:/1.db',
202
+ db2: 'd:/2.db'
203
+ }
204
+ ```
205
+ 不支持 `SqliteMemory`
206
+ */
207
+ db?: Record<string, string> | string;
208
+ /** 远程SQLITE接口实现,适用于Electron, 采用Ipc 的handel机制实现 */
209
+ service: SqliteRemoteInterface;
210
+ };
211
+ /** 日志等级 */
212
+ log?: 'trace' | 'debug' | 'info' | 'warn';
213
+ /**
214
+ 作用与sqlDir类似,不同在于sqlMap`不需要`目录,而是直接指定一个sqlModel对象,对象的格式和sqlDir的文件内容一样。
215
+ ** 适用于简单使用
216
+ */
217
+ sqlMap?: _SqlModel;
218
+ /**
219
+ 作用与sqlFnDir类似,不同在于sqlFNMap`不需要`目录,而是直接指定一个 Record<string, string>,对象的格式和sqlFnDir的文件内容一样。
220
+ ** 适用于简单使用
221
+ */
222
+ sqlFNMap?: Record<string, string>;
223
+ /**
224
+ // 第一个元素=列名,第二个元素是属性路径,
225
+ [
226
+ ['dit_id', ['id']], // 列名ditid,对应属性id
227
+ ['event_id', ['eventMainInfo', 'id']] // 列名event_id对应属性eventMainInfo.id
228
+ ]
229
+ */
230
+ sqlMapperMap?: SqlMappers;
231
+ /** 提供的枚举MAP */
232
+ enums?: EnumMap;
233
+ /**
234
+ * `列名与属性映射` 是否自动将下划线转为驼峰,默认NONE,即不转.
235
+ * 当设置为columnMode.HUMP时,切记将代码生成器中属性名称改对
236
+ * # 自定义sql查询时,无法自动转换哦,可使用标签转换:
237
+ *```
238
+ SELECT
239
+ * {{#hump}} seller_sku2, seller_sku {{/hump}}
240
+ * ```
241
+ * 转换为
242
+ *```
243
+ SELECT
244
+ * {{#hump}} seller_sku2 sellerSku2, seller_sku sellerSku {{/hump}}
245
+ * ```
246
+ */
247
+ columnMode?: ColumnMode;
248
+ /** 对于WEB模式,默认为SqliteRemote */
249
+ dbType?: DBType;
250
+ /**
251
+ * * 数据转换器,用于service的select、page方法,以及stream查询
252
+ * * 例如
253
+ * ```
254
+ * dataConvert: {
255
+ * // 使用时,传入qiniu和列名,将根据列名对应的值生成URL
256
+ * qiniu: data => qiniuConvertUrl(data)
257
+ * }
258
+ * ```
259
+ */
260
+ dataConvert?: Record<string, (data: any) => any>;
261
+ /** 公开上下文 */
262
+ ctx?: any;
263
+ }
264
+ /**
265
+ # 全局行为配置文件
266
+ MYSQL编码: 'utf8mb4', utf8mb4_general_ci'
267
+ ### `sqlDir?: string;` 数据库查询语句存放目录.存放格式为 export.default 的js、ts, 存放内容满足格式:
268
+
269
+ ```
270
+ interface SqlModel {
271
+ [key: string]: string | ((params: { [k: string]: any }, context: any, isCount?: boolean) => string)
272
+ }
273
+ ```
274
+ 可以继承该接口来约束格式
275
+ */
276
+ export interface GlobalSqlOption extends GlobalSqlOptionForWeb {
277
+ /**
278
+ 初始化MYSQL链接 支持多数据源
279
+ ## 单一数据源: 直接传入Mysql2的连接配置
280
+ [MYSQL初始化文档](https://github.com/mysqljs/mysql#connection-options)
281
+ ```
282
+ Mysql: {
283
+ host: '127.0.0.1',
284
+ ...
285
+ }
286
+ ```
287
+ ## 多数据源:传入多个Mysql2的连接配置
288
+ ```
289
+ Mysql: {
290
+ db1: {
291
+ host: '127.0.0.1',
292
+ ...
293
+ },
294
+ db2: {
295
+ host: '127.0.0.1',
296
+ ...
297
+ },
298
+ ...
299
+ }
300
+ ```
301
+ */
302
+ Mysql?: Record<string, Record<string, any>> | Record<string, any>;
303
+ /**
304
+ 初始化postgresql链接 支持多数据源
305
+ ## 单一数据源: 直接传入postgresql的连接配置
306
+ [Postgresql初始化文档](https://github.com/brianc/node-postgres/tree/master/packages/pg-pool)
307
+ ```
308
+ Postgresql: {
309
+ database: 'postgres',
310
+ user: 'brianc',
311
+ password: 'secret!',
312
+ port: 5432,
313
+ ssl: true,
314
+ max: 20, // set pool max size to 20
315
+ idleTimeoutMillis: 1000, // close idle clients after 1 second
316
+ connectionTimeoutMillis: 1000, // return an error after 1 second if connection could not be established
317
+ maxUses: 7500, // close (and replace) a connection after it has been used 7500 times (see below for discussion)
318
+ host?: string | undefined;
319
+ connectionString?: string | undefined;
320
+ keepAlive?: boolean | undefined;
321
+ stream?: () => stream.Duplex | stream.Duplex | undefined;
322
+ statement_timeout?: false | number | undefined;
323
+ query_timeout?: number | undefined;
324
+ keepAliveInitialDelayMillis?: number | undefined;
325
+ idle_in_transaction_session_timeout?: number | undefined;
326
+ application_name?: string | undefined;
327
+ types?: CustomTypesConfig | undefined;
328
+ options?: string | undefined;
329
+ }
330
+ ```
331
+ ## 多数据源:传入多个Postgresql的连接配置
332
+ ```
333
+ Postgresql: {
334
+ db1: {
335
+ database: 'postgres',
336
+ user: 'brianc',
337
+ password: 'secret!',
338
+ port: 5432,
339
+ ssl: true,
340
+ max: 20, // set pool max size to 20
341
+ idleTimeoutMillis: 1000, // close idle clients after 1 second
342
+ connectionTimeoutMillis: 1000, // return an error after 1 second if connection could not be established
343
+ maxUses: 7500, // close (and replace) a connection after it has been used 7500 times (see below for discussion)
344
+ },
345
+ db2: {
346
+ database: 'postgres',
347
+ user: 'brianc',
348
+ password: 'secret!',
349
+ port: 5432,
350
+ ssl: true,
351
+ max: 20, // set pool max size to 20
352
+ idleTimeoutMillis: 1000, // close idle clients after 1 second
353
+ connectionTimeoutMillis: 1000, // return an error after 1 second if connection could not be established
354
+ maxUses: 7500, // close (and replace) a connection after it has been used 7500 times (see below for discussion)
355
+ },
356
+ ...
357
+ }
358
+ ```
359
+ */
360
+ Postgresql?: Record<string, Record<string, any>> | Record<string, any>;
361
+ /**
362
+ ## 单一数据源
363
+ ```
364
+ Sqlite: 'd:/1.db'
365
+ ```
366
+ ## 多数据源:传入多个连接配置
367
+ ```
368
+ Sqlite: {
369
+ db1: 'd:/1.db',
370
+ db2: 'd:/2.db'
371
+ }
372
+ ```
373
+ 路径 = `SqliteMemory` 将创建内存库
374
+ */
375
+ Sqlite?: Record<string, string> | string;
376
+ /**
377
+ ## 日志文件存放路径,该目录下文件名是模块名,例如有一个文件名为 `user.js`,内容为:
378
+ ```
379
+ export default {
380
+ 'sql_1': 'SELECT * FROM user WHERE username = :username',
381
+ 'sql_2': (options: {
382
+ ctx?: any;
383
+ isCount?: boolean;
384
+ isSum?: boolean;
385
+ limitStart?: number;
386
+ limitEnd?: number;
387
+ sortName?: string; sortType?: string;
388
+ params?: Record<string, any>;
389
+ }) => {
390
+ return `
391
+ SELECT * FROM user u LEFT JOIN organ o ON u.orgid = o.orgid
392
+ WHERE o.orgid = :orgid;
393
+ `;
394
+ }
395
+ } as SqlModel;
396
+ ```
397
+ ** 可以看到,sql语句支持直接映射一个sql语句,也可以通过函数返回,返回字符串支持[mustache](https://github.com/janl/mustache.js)
398
+ ** 上面的文件中,将注册两个SQL:`user.sql_1` 和 `user.sql_2`.
399
+ ** `[k: string]: any;` 是用查询时传入的参数,可以指定为任意类型,可以用来生成sql,例如进行循环语句
400
+ ** ctx 是框架的上下文,可以自行指定类型
401
+ ** 其他 是保留参数
402
+ ** 函数类型中,可以调用自己定义的通用sql
403
+ ### 注意
404
+ 1. 不要直接拼接参数:不安全且效率低
405
+ 2. sqlite不支持多语句拼接
406
+ ## 也支持.mu文件,格式略
407
+ */
408
+ sqlDir?: string;
409
+ /**
410
+ ## [mustache](https://mustache.github.io/) 编译时的[模板](https://github.com/janl/mustache.js#:~:text=requires%20only%20this%3A-,%7B%7B%3E%20next_more%7D%7D,-Why%3F%20Because%20the)
411
+ ## 文件名就是模板名
412
+ */
413
+ sqlFNDir?: string;
414
+ /**
415
+ * #TODO 未完成读取 sqlMapDir
416
+ * # sqlMapDir 目录定义如下,
417
+ * `test.ts`
418
+ * ```
419
+ * export const dict:SqlMappers = [
420
+ * {columnName: 'dit_id', mapNames: ['DTID'], def: 0, convert: 转换函数}, // 列名ditid,对应属性DTID,如果没有值,将返回默认值0,其中默认值0是可选的
421
+ * {columnName: 'event_id', mapNames: ['eventMainInfo', 'id'], def: 0, convert: 转换函数},// 列名event_id对应属性eventMainInfo.id,这种方式将返回嵌套的json对象,其中默认值null是可选的
422
+ * ]
423
+ * ```
424
+ * 将得到 test.dict 这个map
425
+ */
426
+ sqlMapDir?: string;
427
+ /**
428
+ ## 映射数据为对象,文件名就是模板名
429
+ ```
430
+ // 第一个元素=列名,第二个元素是属性路径,
431
+ // 该目录下可存放json文件,内容如下
432
+ //
433
+ // 可以在查询时使用,优先级高于hump
434
+ // 例如:
435
+ [
436
+ ['dit_id', ['id'], 可选的默认值], // 列名ditid,对应属性id,当未查询返回时,使用默认值
437
+ ['event_id', ['eventMainInfo', 'id']] // 列名event_id对应属性eventMainInfo.id,当未查询返回时,该属性不存在
438
+ ]
439
+ ```
440
+ */
441
+ sqlMapperDir?: string;
442
+ /**
443
+ [REDIS初始化文档](https://github.com/redis/ioredis?tab=readme-ov-file#:~:text=connect%20to%20by%3A-,new%20Redis()%3B,-//%20Connect%20to%20127.0.0.1)
444
+ ```
445
+ Redis: {
446
+ host: '127.0.0.1',
447
+ ...
448
+ }
449
+ ```
450
+ ## 多数据源:传入多个Redis的连接配置
451
+ ```
452
+ Redis: {
453
+ db1: {
454
+ host: '127.0.0.1',
455
+ ...
456
+ },
457
+ db2: {
458
+ host: '127.0.0.1',
459
+ ...
460
+ },
461
+ ...
462
+ }
463
+ ```
464
+ */
465
+ Redis?: Record<string, Record<string, any>> | Record<string, any>;
466
+ /** sqlite数据库驱动初始化函数 */
467
+ BetterSqlite3?: any;
468
+ /**
469
+ * 读取查询语句时,是否扫描JS文件?
470
+ * JS文件需要默认导出一个 SqlModel对象
471
+ */
472
+ jsMode?: boolean;
473
+ }
474
+ export interface PageQuery<L> {
475
+ sum?: Record<string, string | number>;
476
+ total?: number;
477
+ size?: number;
478
+ records?: L[];
479
+ }
480
+ /** sqlite electron服务端需要支持的接口 */
481
+ export interface SqliteRemoteInterface {
482
+ execute(inData: Uint8Array): Promise<Uint8Array>;
483
+ pluck(inData: Uint8Array): Promise<Uint8Array>;
484
+ get(inData: Uint8Array): Promise<Uint8Array>;
485
+ raw(inData: Uint8Array): Promise<Uint8Array>;
486
+ query(inData: Uint8Array): Promise<Uint8Array>;
487
+ initDB(dbName: string): void;
488
+ export(dbName: string, exportPath: string): Promise<void>;
489
+ restore(dbName: string, importPath: string): void;
490
+ close(dbName?: string): void;
491
+ }
492
+ export interface Connection {
493
+ [_daoConnection]: any;
494
+ [_inTransaction]: boolean;
495
+ execute(sync: SyncMode.Sync, sql?: string, params?: any): {
496
+ affectedRows: number;
497
+ insertId: bigint;
498
+ };
499
+ execute(sync: SyncMode.Async, sql?: string, params?: any): Promise<{
500
+ affectedRows: number;
501
+ insertId: bigint;
502
+ }>;
503
+ /** 一行一列 */
504
+ pluck<One_Row_One_Column = any>(sync: SyncMode.Sync, sql?: string, params?: any): One_Row_One_Column | null;
505
+ pluck<One_Row_One_Column = any>(sync: SyncMode.Async, sql?: string, params?: any): Promise<One_Row_One_Column | null>;
506
+ /** 一行多列 */
507
+ get<One_Row_Many_Column = any>(sync: SyncMode.Sync, sql?: string, params?: any): One_Row_Many_Column | null;
508
+ get<One_Row_Many_Column = any>(sync: SyncMode.Async, sql?: string, params?: any): Promise<One_Row_Many_Column | null>;
509
+ /** 多行一列 */
510
+ raw<Many_Row_One_Column = any>(sync: SyncMode.Sync, sql?: string, params?: any): Many_Row_One_Column[];
511
+ raw<Many_Row_One_Column = any>(sync: SyncMode.Async, sql?: string, params?: any): Promise<Many_Row_One_Column[]>;
512
+ /** 多行多列 */
513
+ query<Many_Row_Many_Column = any>(sync: SyncMode.Sync, sql?: string, params?: any): Many_Row_Many_Column[];
514
+ query<Many_Row_Many_Column = any>(sync: SyncMode.Async, sql?: string, params?: any): Promise<Many_Row_Many_Column[]>;
515
+ realse(sync: SyncMode.Sync): void;
516
+ realse(sync: SyncMode.Async): Promise<void>;
517
+ }
518
+ interface Dao {
519
+ [_daoDB]: any;
520
+ transaction<T = any>(sync: SyncMode.Sync, fn: (conn: Connection) => T, conn?: Connection | null): T | null;
521
+ transaction<T = any>(sync: SyncMode.Async, fn: (conn: Connection) => Promise<T>, conn?: Connection | null): Promise<T | null>;
522
+ createConnection(sync: SyncMode.Sync): Connection | null;
523
+ createConnection(sync: SyncMode.Async): Promise<Connection | null>;
524
+ close(sync: SyncMode.Sync): void;
525
+ close(sync: SyncMode.Async): Promise<void>;
526
+ backup(sync: SyncMode.Sync, name: string): void;
527
+ backup(sync: SyncMode.Async, name: string): Promise<void>;
528
+ remove(sync: SyncMode.Sync): void;
529
+ remove(sync: SyncMode.Async): Promise<void>;
530
+ restore(sync: SyncMode.Sync, name: string): void;
531
+ restore(sync: SyncMode.Async, name: string): Promise<void>;
532
+ }
533
+ export declare class Mysql implements Dao {
534
+ [_daoDB]: any;
535
+ constructor(pool: any);
536
+ keepAlive(): Promise<void>;
537
+ createConnection(sync: SyncMode.Sync): Connection | null;
538
+ createConnection(sync: SyncMode.Async): Promise<Connection | null>;
539
+ transaction<T = any>(sync: SyncMode.Sync, fn: (conn: Connection) => T, conn?: Connection | null): T | null;
540
+ transaction<T = any>(sync: SyncMode.Async, fn: (conn: Connection) => Promise<T>, conn?: Connection | null): Promise<T | null>;
541
+ close(sync: SyncMode.Sync): void;
542
+ close(sync: SyncMode.Async): Promise<void>;
543
+ backup(sync: SyncMode.Sync, name: string): void;
544
+ backup(sync: SyncMode.Async, name: string): Promise<void>;
545
+ remove(sync: SyncMode.Sync): void;
546
+ remove(sync: SyncMode.Async): Promise<void>;
547
+ restore(sync: SyncMode.Sync, name: string): void;
548
+ restore(sync: SyncMode.Async, name: string): Promise<void>;
549
+ }
550
+ export declare class Postgresql implements Dao {
551
+ [_daoDB]: any;
552
+ constructor(pool: any);
553
+ keepAlive(): Promise<void>;
554
+ createConnection(sync: SyncMode.Sync): Connection | null;
555
+ createConnection(sync: SyncMode.Async): Promise<Connection | null>;
556
+ transaction<T = any>(sync: SyncMode.Sync, fn: (conn: Connection) => T, conn?: Connection | null): T | null;
557
+ transaction<T = any>(sync: SyncMode.Async, fn: (conn: Connection) => Promise<T>, conn?: Connection | null): Promise<T | null>;
558
+ close(sync: SyncMode.Sync): void;
559
+ close(sync: SyncMode.Async): Promise<void>;
560
+ backup(sync: SyncMode.Sync, name: string): void;
561
+ backup(sync: SyncMode.Async, name: string): Promise<void>;
562
+ remove(sync: SyncMode.Sync): void;
563
+ remove(sync: SyncMode.Async): Promise<void>;
564
+ restore(sync: SyncMode.Sync, name: string): void;
565
+ restore(sync: SyncMode.Async, name: string): Promise<void>;
566
+ }
567
+ export declare class Sqlite implements Dao {
568
+ [_daoDB]: any;
569
+ constructor(db: any);
570
+ createConnection(sync: SyncMode.Sync): Connection | null;
571
+ createConnection(sync: SyncMode.Async): Promise<Connection | null>;
572
+ transaction<T = any>(sync: SyncMode.Sync, fn: (conn: Connection) => T, conn?: Connection | null): T | null;
573
+ transaction<T = any>(sync: SyncMode.Async, fn: (conn: Connection) => Promise<T>, conn?: Connection | null): Promise<T | null>;
574
+ close(sync: SyncMode.Sync): void;
575
+ close(sync: SyncMode.Async): Promise<void>;
576
+ backup(sync: SyncMode.Sync, name: string): void;
577
+ backup(sync: SyncMode.Async, name: string): Promise<void>;
578
+ remove(sync: SyncMode.Sync): void;
579
+ remove(sync: SyncMode.Async): Promise<void>;
580
+ restore(sync: SyncMode.Sync, name: string): void;
581
+ restore(sync: SyncMode.Async, name: string): Promise<void>;
582
+ }
583
+ export declare class SqliteRemoteConnection implements Connection {
584
+ [_daoConnection]: SqliteRemoteInterface;
585
+ [_sqliteRemoteName]: string;
586
+ [_inTransaction]: boolean;
587
+ constructor(conn: SqliteRemoteInterface, name: string);
588
+ execute(sync: SyncMode.Sync, sql?: string, params?: any): {
589
+ affectedRows: number;
590
+ insertId: bigint;
591
+ };
592
+ execute(sync: SyncMode.Async, sql?: string, params?: any): Promise<{
593
+ affectedRows: number;
594
+ insertId: bigint;
595
+ }>;
596
+ pluck<T = any>(sync: SyncMode.Sync, sql?: string, params?: any): T | null;
597
+ pluck<T = any>(sync: SyncMode.Async, sql?: string, params?: any): Promise<T | null>;
598
+ get<T = any>(sync: SyncMode.Sync, sql?: string, params?: any): T | null;
599
+ get<T = any>(sync: SyncMode.Async, sql?: string, params?: any): Promise<T | null>;
600
+ raw<T = any>(sync: SyncMode.Sync, sql?: string, params?: any): T[];
601
+ raw<T = any>(sync: SyncMode.Async, sql?: string, params?: any): Promise<T[]>;
602
+ query<T = any>(sync: SyncMode.Sync, sql?: string, params?: any): T[];
603
+ query<T = any>(sync: SyncMode.Async, sql?: string, params?: any): Promise<T[]>;
604
+ realse(sync: SyncMode.Sync): void;
605
+ realse(sync: SyncMode.Async): Promise<void>;
606
+ }
607
+ export declare class SqliteRemote implements Dao {
608
+ [_sqliteRemoteName]: string;
609
+ [_daoDB]: SqliteRemoteInterface;
610
+ private connection?;
611
+ constructor(db: SqliteRemoteInterface, name: string);
612
+ createConnection(sync: SyncMode.Sync): Connection | null;
613
+ createConnection(sync: SyncMode.Async): Promise<Connection | null>;
614
+ transaction<T = any>(sync: SyncMode.Sync, fn: (conn: Connection) => T, conn?: Connection | null): T | null;
615
+ transaction<T = any>(sync: SyncMode.Async, fn: (conn: Connection) => Promise<T>, conn?: Connection | null): Promise<T | null>;
616
+ close(sync: SyncMode.Sync): void;
617
+ close(sync: SyncMode.Async): Promise<void>;
618
+ backup(sync: SyncMode.Sync, exportPath: string): void;
619
+ backup(sync: SyncMode.Async, exportPath: string): Promise<void>;
620
+ remove(sync: SyncMode.Sync): void;
621
+ remove(sync: SyncMode.Async): Promise<void>;
622
+ restore(sync: SyncMode.Sync, importPath: string): void;
623
+ restore(sync: SyncMode.Async, importPath: string): Promise<void>;
624
+ }
625
+ export type SqlMapper = {
626
+ columnName: string;
627
+ mapNames: string[];
628
+ def?: any;
629
+ convert?: (data: any) => any;
630
+ }[];
631
+ export type SqlMappers = Record<string, SqlMapper>;
632
+ export type SqlModel = Record<string, string | ((options: {
633
+ ctx?: any;
634
+ isCount?: boolean;
635
+ isSum?: boolean;
636
+ limitStart?: number;
637
+ limitEnd?: number;
638
+ sortName?: string;
639
+ sortType?: string;
640
+ params?: any;
641
+ }) => string)>;
642
+ type _SqlModel = Record<string, string | ((options: {
643
+ ctx?: any;
644
+ isCount?: boolean;
645
+ isSum?: boolean;
646
+ limitStart?: number;
647
+ limitEnd?: number;
648
+ sortName?: string;
649
+ sortType?: string;
650
+ params?: any;
651
+ }) => string) | XML[]>;
652
+ /**
653
+ * ifUndefined默认是MapperIfUndefined.Skip
654
+ */
655
+ export declare function flatData<M>(options: {
656
+ data: any;
657
+ mapper: string | SqlMapper;
658
+ mapperIfUndefined?: MapperIfUndefined;
659
+ }): M;
660
+ export declare class SqlCache {
661
+ private sqlMap;
662
+ private sqlFNMap;
663
+ private _read;
664
+ /**
665
+ *
666
+ * ```
667
+ // 第一个元素=列名,第二个元素是属性路径,
668
+ [
669
+ ['dit_id', ['id']], // 列名ditid,对应属性id
670
+ ['event_id', ['eventMainInfo', 'id']] // 列名event_id对应属性eventMainInfo.id
671
+ ]
672
+ * ```
673
+ * @param am
674
+ * @param keys
675
+ */
676
+ private readResultMap;
677
+ init(options: {
678
+ sqlMap?: _SqlModel;
679
+ sqlDir?: string;
680
+ sqlFNMap?: Record<string, string>;
681
+ sqlFNDir?: string;
682
+ sqlMapperMap?: SqlMappers;
683
+ sqlMapperDir?: string;
684
+ jsMode?: boolean;
685
+ }): Promise<void>;
686
+ load(sqlids: string[], options: {
687
+ ctx?: any;
688
+ isCount?: boolean;
689
+ isSum?: boolean;
690
+ limitStart?: number;
691
+ limitEnd?: number;
692
+ sortName?: string;
693
+ sortType?: string;
694
+ [k: string]: any;
695
+ }): string;
696
+ }
697
+ export declare const DB: (config: ServiceOption) => <C extends {
698
+ new (...args: any[]): {};
699
+ }>(constructor: C) => {
700
+ new (...args: any[]): {
701
+ [_tableName]: string | undefined;
702
+ [_className]: string | undefined;
703
+ [_ClassName]: string | undefined;
704
+ [_vueName]: string | undefined;
705
+ [_daoDBName]: string | undefined;
706
+ [_dbType]: DBType | undefined;
707
+ [_sqlite_version]: string | undefined;
708
+ [_SqlOption]: {
709
+ maxDeal: number;
710
+ skipUndefined: boolean;
711
+ skipNull: boolean;
712
+ skipEmptyString: boolean;
713
+ } & ServiceOption;
714
+ [_ids]: any;
715
+ [_logicIds]: any;
716
+ [_fields]: any;
717
+ [_columns]: any;
718
+ [_columnsNoId]: any;
719
+ [_index]: any;
720
+ [_def]: any;
721
+ [_comment]: string | undefined;
722
+ [_stateFileName]: any;
723
+ [_deleteState]: any;
724
+ [_transformer]: <L extends Object>(data: L, option?: MethodOption & {
725
+ finalColumns?: Set<string>;
726
+ tempColumns?: Array<string>;
727
+ insert?: boolean;
728
+ skipId?: boolean;
729
+ skipNull?: boolean;
730
+ skipUndefined?: boolean;
731
+ skipEmptyString?: boolean;
732
+ onFieldExists?: (K: string, V: any) => void;
733
+ }) => any;
734
+ };
735
+ } & C;
736
+ /**
737
+ js项目中实体类注解替代品,只要确保函数被执行即可,举例:
738
+ ```
739
+ // 声明一个class
740
+ export class AmaFuck {}
741
+ DeclareClass(AmaFuck, [
742
+ { type: "String", name: "SellerSKU" },
743
+ { type: "String", name: "SellerSKU2" },
744
+ { type: "String", name: "site" }
745
+ ]);
746
+ ```
747
+ */
748
+ export declare function DeclareClass(clz: any, FieldOptions: FieldOption[]): void;
749
+ /**
750
+ JS项目中,service注解代替,举例:
751
+ ```
752
+ // 声明一个service,注意这里的let
753
+ export let AmaService = class AmaService extends SqlService {};
754
+ AmaService = DeclareService(AmaService, {
755
+ tableName: "ama_fuck2",
756
+ clz: AmaFuck,
757
+ dbType: DBType.Sqlite,
758
+ sqliteVersion: "0.0.3"
759
+ });
760
+ ```
761
+ */
762
+ export declare function DeclareService(clz: any, config: ServiceOption): any;
763
+ /**
764
+ ## 数据库服务
765
+ ### 注解DB
766
+
767
+ ### 泛型 T,同DB注解中的clz
768
+ ** 服务中所有方法默认以该类型为准
769
+ **
770
+
771
+ */
772
+ export declare class SqlService<T extends object> {
773
+ [_tableName]?: string;
774
+ private [_className]?;
775
+ private [_ClassName]?;
776
+ private [_vueName]?;
777
+ private [_daoDBName]?;
778
+ private [_comment]?;
779
+ private [_ids]?;
780
+ private [_fields]?;
781
+ private [_columns]?;
782
+ private [_columnsNoId]?;
783
+ private [_stateFileName]?;
784
+ private [_deleteState]?;
785
+ private [_SqlOption]?;
786
+ private [_dbType]?;
787
+ private [_sqlite_version]?;
788
+ private [_index]?;
789
+ private [_def]?;
790
+ [_transformer]?: <L = T>(data: Partial<L>, option?: MethodOption & {
791
+ finalColumns?: Set<string>;
792
+ insert?: boolean;
793
+ skipId?: boolean;
794
+ skipNull?: boolean;
795
+ skipUndefined?: boolean;
796
+ skipEmptyString?: boolean;
797
+ onFieldExists?: (K: string, V: any) => void;
798
+ }) => Partial<T>;
799
+ private _insert;
800
+ /**
801
+ 0. `sync`: 同步(sqlite)或者异步(mysql、remote),影响返回值类型,默认 `异步`
802
+ 1. `data`:可是数组或者单对象
803
+ 2. `skipUndefined`: boolean; 是否不处理值为undefined的字段,默认 true
804
+ 3. `skipNull`: boolean; 是否不处理值为null的字段,默认 true
805
+ 4. `skipEmptyString`: boolean; 是否不处理值为空字符串(`注意:多个空格也算空字符串`)的字段,默认 true
806
+ 5. `maxDeal`: number; 批量处理时,每次处理多少个?默认500
807
+ 6. `tableName`: 默认使用service注解的`tableName`,可以在某个方法中覆盖
808
+ 7. `dbName`: 默认使用service注解的`dbName`,可以在某个方法中覆盖
809
+ 8. `conn`: 仅在开启事务时需要主动传入,传入示例:
810
+ ```
811
+ service.transaction(async conn => {
812
+ service.insert({conn});
813
+ });
814
+ ```
815
+ 9. `dao`: 永远不需要传入该值
816
+ 10. `mode` :默认`insert`,可选如下
817
+ 1. `insert`: 默认
818
+ 2. `insertIfNotExists`: 通过主键或者existConditionOtherThanIds字段判断数据是否存在,不存在才插入,存在则不执行
819
+ 3. `replace`: 只支持用主键判断, 存在更新, 不存在插入
820
+ 11. `existConditionOtherThanIds`: insertIfNotExists时判断同一记录的字段名称,默认情况下按照ID判断,设置existConditionOtherThanIds后,不用id
821
+ 12. `replaceWithDef` replace时,是否带入默认值? 默认true
822
+ ### 返回值是最后一次插入的主键ID,对于自增ID表适用
823
+ 1. 如果主键是自增批量操作,且期望返回所有记录的ID,那么需要设置 `option 中的 every = true`,此时效率降低
824
+ * @param {{[P in keyof T]?: T[P]}} data
825
+ * @param {MethodOption} [option]
826
+ * @memberof SqlServer
827
+ */
828
+ insert(option: MethodOption & {
829
+ data: Partial<T>;
830
+ sync?: SyncMode.Async;
831
+ mode?: InsertMode;
832
+ existConditionOtherThanIds?: (keyof T)[];
833
+ every?: boolean;
834
+ temp?: boolean;
835
+ skipUndefined?: boolean;
836
+ skipNull?: boolean;
837
+ skipEmptyString?: boolean;
838
+ maxDeal?: number;
839
+ replaceWithDef?: boolean;
840
+ }): Promise<bigint>;
841
+ insert(option: MethodOption & {
842
+ data: Partial<T>[];
843
+ sync?: SyncMode.Async;
844
+ mode?: InsertMode;
845
+ existConditionOtherThanIds?: (keyof T)[];
846
+ every?: boolean;
847
+ temp?: boolean;
848
+ skipUndefined?: boolean;
849
+ skipNull?: boolean;
850
+ skipEmptyString?: boolean;
851
+ maxDeal?: number;
852
+ replaceWithDef?: boolean;
853
+ }): Promise<bigint[]>;
854
+ insert(option: MethodOption & {
855
+ data: Partial<T>;
856
+ sync: SyncMode.Sync;
857
+ mode?: InsertMode;
858
+ existConditionOtherThanIds?: (keyof T)[];
859
+ every?: boolean;
860
+ temp?: boolean;
861
+ skipUndefined?: boolean;
862
+ skipNull?: boolean;
863
+ skipEmptyString?: boolean;
864
+ maxDeal?: number;
865
+ replaceWithDef?: boolean;
866
+ }): bigint;
867
+ insert(option: MethodOption & {
868
+ data: Partial<T>[];
869
+ sync: SyncMode.Sync;
870
+ mode?: InsertMode;
871
+ existConditionOtherThanIds?: (keyof T)[];
872
+ every?: boolean;
873
+ temp?: boolean;
874
+ skipUndefined?: boolean;
875
+ skipNull?: boolean;
876
+ skipEmptyString?: boolean;
877
+ maxDeal?: number;
878
+ replaceWithDef?: boolean;
879
+ }): bigint[];
880
+ private _update;
881
+ /**
882
+ ## 根据主键修改
883
+ 0. `sync`: 同步(sqlite)或者异步(mysql、remote),影响返回值类型,默认`异步模式`
884
+ 1. `data`:可是数组或者单对象
885
+ 2. `skipUndefined`: boolean; 是否不处理值为undefined的字段,默认 true
886
+ 3. `skipNull`: boolean; 是否不处理值为null的字段,默认 true
887
+ 4. `skipEmptyString`: boolean; 是否不处理值为空字符串(`注意:多个空格也算空字符串`)的字段,默认 true
888
+ 5. `maxDeal`: number; 批量处理时,每次处理多少个?默认500
889
+ 6. `tableName`: 默认使用service注解的`tableName`,可以在某个方法中覆盖
890
+ 7. `dbName`: 默认使用service注解的`dbName`,可以在某个方法中覆盖
891
+ 8. `conn`: 仅在开启事务时需要主动传入,传入示例:
892
+ ```
893
+ service.transaction(async conn => {
894
+ service.insert({conn});
895
+ });
896
+ ```
897
+ 9. `dao`: 永远不需要传入该值
898
+ */
899
+ update(option: MethodOption & {
900
+ data: Partial<T> | Array<Partial<T>>;
901
+ sync?: SyncMode.Async;
902
+ skipUndefined?: boolean;
903
+ skipNull?: boolean;
904
+ skipEmptyString?: boolean;
905
+ maxDeal?: number;
906
+ }): Promise<number>;
907
+ update(option: MethodOption & {
908
+ data: Partial<T> | Array<Partial<T>>;
909
+ sync: SyncMode.Sync;
910
+ skipUndefined?: boolean;
911
+ skipNull?: boolean;
912
+ skipEmptyString?: boolean;
913
+ maxDeal?: number;
914
+ }): number;
915
+ /**
916
+ ## 删除
917
+ 0. `sync`: 同步(sqlite)或者异步(mysql、remote),影响返回值类型,默认`异步模式`
918
+ 1. 支持按ID删除:可以单个ID或者ID数组 `需要实体类只有一个ID`
919
+ 2. 支持实体类删除: 用于多个ID或者按实体类某些字段删除
920
+ 3. 两种模式:`mode`=`Common` 或者 `TempTable`
921
+ 3. 如果数据多,使用 `TempTable`模式
922
+ 4. 当设置实体类的字段有 `logicDelete` ,将进行逻辑删除,除非设置 `forceDelete` = true
923
+ 5. 支持`whereSql`直接拼接,此时必须传递`whereParams`,不建议直接使用这种方式!为了简化逻辑,它不会和ID、WHERE共存,且优先级更高。且不支持 `TempTable` Mode
924
+ 6. `tableName`: 默认使用service注解的`tableName`,可以在某个方法中覆盖
925
+ 7. `dbName`: 默认使用service注解的`dbName`,可以在某个方法中覆盖
926
+ 8. `conn`: 仅在开启事务时需要主动传入,传入示例:
927
+ ```
928
+ service.transaction(async conn => {
929
+ service.insert({conn});
930
+ });
931
+ ```
932
+ 9. `dao`: 永远不需要传入该值
933
+ */
934
+ delete(option: MethodOption & {
935
+ sync?: SyncMode.Async;
936
+ id?: string | number | Array<string | number>;
937
+ where?: Partial<T> | Array<Partial<T>>;
938
+ mode?: DeleteMode;
939
+ forceDelete?: boolean;
940
+ whereSql?: string;
941
+ whereParams?: Record<string, any>;
942
+ }): Promise<number>;
943
+ delete(option: MethodOption & {
944
+ sync: SyncMode.Sync;
945
+ id?: string | number | Array<string | number>;
946
+ where?: Partial<T> | Array<Partial<T>>;
947
+ mode?: DeleteMode;
948
+ forceDelete?: boolean;
949
+ whereSql?: string;
950
+ whereParams?: Record<string, any>;
951
+ }): number;
952
+ private _template;
953
+ /**
954
+ #根据条件查询对象
955
+ ## 特点:快速、简单,可快速根据某些字段是否等于来查询返回,可以查询记录和记录数
956
+ 0. `sync`: 同步(sqlite)或者异步(mysql、remote),影响返回值类型,默认`异步模式`
957
+ 1. `templateResult`: 返回值类型断言,4种
958
+ 1. `AssertOne` 确定返回一个,如果不是一个,将报错,返回类型是T `默认`
959
+ 2. `NotSureOne` 可能返回一个,返回类型是T|null
960
+ 3. `Many` 返回多个
961
+ 4. `Count` 返回记录数
962
+ 2. 支持按ID查询:可以单个ID或者ID数组 `需要实体类只有一个ID`
963
+ 3. 支持实体类查询: 用于多个ID或者按实体类某些字段查询
964
+ 4. 两种查询方式:`mode`=`Common`(默认) 或者 `TempTable`
965
+ 5. `tableName`: 默认使用service注解的`tableName`,可以在某个方法中覆盖
966
+ 6. `dbName`: 默认使用service注解的`dbName`,可以在某个方法中覆盖
967
+ 7. `conn`: 仅在开启事务时需要主动传入,传入示例:
968
+ ```
969
+ service.transaction(async conn => {
970
+ service.insert({conn});
971
+ });
972
+ ```
973
+ 8. `dao`: 永远不需要传入该值
974
+
975
+ */
976
+ template<L = T>(option: MethodOption & {
977
+ sync: SyncMode.Sync;
978
+ templateResult?: TemplateResult.AssertOne;
979
+ id?: string | number | Array<string | number>;
980
+ where?: Partial<L> | Array<Partial<L>>;
981
+ skipUndefined?: boolean;
982
+ skipNull?: boolean;
983
+ skipEmptyString?: boolean;
984
+ mode?: SelectMode;
985
+ error?: string;
986
+ columns?: (keyof L)[];
987
+ }): L;
988
+ template<L = T>(option: MethodOption & {
989
+ sync?: SyncMode.Async;
990
+ templateResult?: TemplateResult.AssertOne;
991
+ id?: string | number | Array<string | number>;
992
+ where?: Partial<L> | Array<Partial<L>>;
993
+ skipUndefined?: boolean;
994
+ skipNull?: boolean;
995
+ skipEmptyString?: boolean;
996
+ mode?: SelectMode;
997
+ error?: string;
998
+ columns?: (keyof L)[];
999
+ }): Promise<L>;
1000
+ template<L = T>(option: MethodOption & {
1001
+ sync: SyncMode.Sync;
1002
+ templateResult: TemplateResult.Count;
1003
+ id?: string | number | Array<string | number>;
1004
+ where?: Partial<L> | Array<Partial<L>>;
1005
+ skipUndefined?: boolean;
1006
+ skipNull?: boolean;
1007
+ skipEmptyString?: boolean;
1008
+ mode?: SelectMode;
1009
+ error?: string;
1010
+ columns?: (keyof L)[];
1011
+ }): number;
1012
+ template<L = T>(option: MethodOption & {
1013
+ sync?: SyncMode.Async;
1014
+ templateResult: TemplateResult.Count;
1015
+ id?: string | number | Array<string | number>;
1016
+ where?: Partial<L> | Array<Partial<L>>;
1017
+ skipUndefined?: boolean;
1018
+ skipNull?: boolean;
1019
+ skipEmptyString?: boolean;
1020
+ mode?: SelectMode;
1021
+ error?: string;
1022
+ columns?: (keyof L)[];
1023
+ }): Promise<number>;
1024
+ template<L = T>(option: MethodOption & {
1025
+ sync: SyncMode.Sync;
1026
+ templateResult: TemplateResult.NotSureOne;
1027
+ id?: string | number | Array<string | number>;
1028
+ where?: Partial<L> | Array<Partial<L>>;
1029
+ skipUndefined?: boolean;
1030
+ skipNull?: boolean;
1031
+ skipEmptyString?: boolean;
1032
+ mode?: SelectMode;
1033
+ error?: string;
1034
+ columns?: (keyof L)[];
1035
+ }): L | null;
1036
+ template<L = T>(option: MethodOption & {
1037
+ sync?: SyncMode.Async;
1038
+ templateResult: TemplateResult.NotSureOne;
1039
+ id?: string | number | Array<string | number>;
1040
+ where?: Partial<L> | Array<Partial<L>>;
1041
+ skipUndefined?: boolean;
1042
+ skipNull?: boolean;
1043
+ skipEmptyString?: boolean;
1044
+ mode?: SelectMode;
1045
+ error?: string;
1046
+ columns?: (keyof L)[];
1047
+ }): Promise<L | null>;
1048
+ template<L = T>(option: MethodOption & {
1049
+ sync: SyncMode.Sync;
1050
+ templateResult: TemplateResult.Many;
1051
+ id?: string | number | Array<string | number>;
1052
+ where?: Partial<L> | Array<Partial<L>>;
1053
+ skipUndefined?: boolean;
1054
+ skipNull?: boolean;
1055
+ skipEmptyString?: boolean;
1056
+ mode?: SelectMode;
1057
+ error?: string;
1058
+ columns?: (keyof L)[];
1059
+ }): L[];
1060
+ template<L = T>(option: MethodOption & {
1061
+ sync?: SyncMode.Async;
1062
+ templateResult: TemplateResult.Many;
1063
+ id?: string | number | Array<string | number>;
1064
+ where?: Partial<L> | Array<Partial<L>>;
1065
+ skipUndefined?: boolean;
1066
+ skipNull?: boolean;
1067
+ skipEmptyString?: boolean;
1068
+ mode?: SelectMode;
1069
+ error?: string;
1070
+ columns?: (keyof L)[];
1071
+ }): Promise<L[]>;
1072
+ private _select;
1073
+ /**
1074
+ # 自由查询
1075
+ 0. `sync`: 同步(sqlite)或者异步(mysql、remote),影响返回值类型,默认`异步模式`
1076
+ 1. `templateResult`: 返回值类型断言,6种, R表示行,C表示列,带S表示复数
1077
+ 1. R_C_Assert,
1078
+ 2. R_C_NotSure,
1079
+ 3. R_CS_Assert,
1080
+ 4. R_CS_NotSure,
1081
+ 5. RS_C,
1082
+ 7. RS_CS[默认]
1083
+ 2. `sql` 或者 `sqlid`
1084
+ 3. `params`
1085
+ 4. `defValue`: One_Row_One_Column 时有效
1086
+ 5. 禁止一次查询多个语句
1087
+ 6. `dbName`: 默认使用service注解的`dbName`,可以在某个方法中覆盖
1088
+ 7. `conn`: 仅在开启事务时需要主动传入,传入示例:
1089
+ ```
1090
+ service.transaction(async conn => {
1091
+ service.insert({conn});
1092
+ });
1093
+ ```
1094
+ 9. `dao`: 永远不需要传入该值
1095
+ 10. `hump`: 是否将列名改为驼峰写法?默认情况下按照全局配置
1096
+ 11. `mapper`: 列名-属性 映射工具,优先级高于hump
1097
+ ```
1098
+ // 该属性支持传入mybatis.xml中定义的resultMap块ID,或者读取sqlMapDir目录下的JSON文件.
1099
+ // 注意:resultMap块ID与sql语句逻辑一致,同样是 目录.ID
1100
+ // 或者自定义Mapper,自定义Mapper格式如下:
1101
+ [
1102
+ {columnName: 'dit_id', mapNames: ['DTID'], def: 0, convert: 转换函数}, // 列名ditid,对应属性DTID,如果没有值,将返回默认值0,其中默认值0是可选的
1103
+ {columnName: 'event_id', mapNames: ['eventMainInfo', 'id'], def: 0, convert: 转换函数},// 列名event_id对应属性eventMainInfo.id,这种方式将返回嵌套的json对象,其中默认值是可选的
1104
+ ]
1105
+ 12. dataConvert 数据转换器
1106
+ ```
1107
+ dataConvert: {
1108
+ fileName: 'qiniu'
1109
+ }
1110
+ // 表示列 fileName 按 qiniu的函数格式化
1111
+ // qiniu 在项目初始化时定义
1112
+ ```
1113
+ */
1114
+ select<L = T>(option: MethodOption & {
1115
+ sync?: SyncMode.Async;
1116
+ selectResult?: SelectResult.RS_CS | SelectResult.RS_C;
1117
+ sqlId?: string;
1118
+ sql?: string;
1119
+ params?: Record<string, any>;
1120
+ context?: any;
1121
+ isCount?: boolean;
1122
+ defValue?: L | null;
1123
+ errorMsg?: string;
1124
+ hump?: boolean;
1125
+ mapper?: string | SqlMapper;
1126
+ mapperIfUndefined?: MapperIfUndefined;
1127
+ dataConvert?: Record<string, string>;
1128
+ }): Promise<L[]>;
1129
+ select<L = T>(option: MethodOption & {
1130
+ sync?: SyncMode.Async;
1131
+ selectResult: SelectResult.R_CS_Assert | SelectResult.R_C_Assert;
1132
+ sqlId?: string;
1133
+ sql?: string;
1134
+ params?: Record<string, any>;
1135
+ context?: any;
1136
+ isCount?: boolean;
1137
+ defValue?: L | null;
1138
+ errorMsg?: string;
1139
+ hump?: boolean;
1140
+ mapper?: string | SqlMapper;
1141
+ mapperIfUndefined?: MapperIfUndefined;
1142
+ dataConvert?: Record<string, string>;
1143
+ }): Promise<L>;
1144
+ select<L = T>(option: MethodOption & {
1145
+ sync?: SyncMode.Async;
1146
+ selectResult: SelectResult.R_CS_NotSure | SelectResult.R_C_NotSure;
1147
+ sqlId?: string;
1148
+ sql?: string;
1149
+ params?: Record<string, any>;
1150
+ context?: any;
1151
+ isCount?: boolean;
1152
+ defValue?: L | null;
1153
+ errorMsg?: string;
1154
+ hump?: boolean;
1155
+ mapper?: string | SqlMapper;
1156
+ mapperIfUndefined?: MapperIfUndefined;
1157
+ dataConvert?: Record<string, string>;
1158
+ }): Promise<L | null>;
1159
+ select<L = T>(option: MethodOption & {
1160
+ sync: SyncMode.Sync;
1161
+ selectResult?: SelectResult.RS_CS | SelectResult.RS_C;
1162
+ sqlId?: string;
1163
+ sql?: string;
1164
+ params?: Record<string, any>;
1165
+ context?: any;
1166
+ isCount?: boolean;
1167
+ defValue?: L | null;
1168
+ errorMsg?: string;
1169
+ hump?: boolean;
1170
+ mapper?: string | SqlMapper;
1171
+ mapperIfUndefined?: MapperIfUndefined;
1172
+ dataConvert?: Record<string, string>;
1173
+ }): L[];
1174
+ select<L = T>(option: MethodOption & {
1175
+ sync: SyncMode.Sync;
1176
+ selectResult: SelectResult.R_CS_Assert | SelectResult.R_C_Assert;
1177
+ sqlId?: string;
1178
+ sql?: string;
1179
+ params?: Record<string, any>;
1180
+ context?: any;
1181
+ isCount?: boolean;
1182
+ defValue?: L | null;
1183
+ errorMsg?: string;
1184
+ hump?: boolean;
1185
+ mapper?: string | SqlMapper;
1186
+ mapperIfUndefined?: MapperIfUndefined;
1187
+ dataConvert?: Record<string, string>;
1188
+ }): L;
1189
+ select<L = T>(option: MethodOption & {
1190
+ sync: SyncMode.Sync;
1191
+ selectResult: SelectResult.R_CS_NotSure | SelectResult.R_C_NotSure;
1192
+ sqlId?: string;
1193
+ sql?: string;
1194
+ params?: Record<string, any>;
1195
+ context?: any;
1196
+ isCount?: boolean;
1197
+ defValue?: L | null;
1198
+ errorMsg?: string;
1199
+ hump?: boolean;
1200
+ mapper?: string | SqlMapper;
1201
+ mapperIfUndefined?: MapperIfUndefined;
1202
+ dataConvert?: Record<string, string>;
1203
+ }): L | null;
1204
+ /**
1205
+ # 自由查询:一次执行多个SQL语句!
1206
+ 0. `sync`: 同步(sqlite)或者异步(mysql、remote),影响返回值类型,默认`异步模式`
1207
+ 1. `sql` 或者 `sqlid`
1208
+ 2. `params`
1209
+ 3. `dbName`: 默认使用service注解的`dbName`,可以在某个方法中覆盖
1210
+ 4. `conn`: 仅在开启事务时需要主动传入,传入示例:
1211
+ ```
1212
+ service.transaction(async conn => {
1213
+ service.insert({conn});
1214
+ });
1215
+ ```
1216
+ 5. `dao`: 永远不需要传入该值
1217
+ 6. `hump`: 是否将列名改为驼峰写法?默认情况下按照全局配置
1218
+ 7. `mapper`: 列名-属性 映射工具,优先级高于hump
1219
+ ```
1220
+ // 该属性支持传入mybatis.xml中定义的resultMap块ID,或者读取sqlMapDir目录下的JSON文件(暂未实现).
1221
+ // 注意:resultMap块的寻找逻辑与sql语句逻辑一致,同样是 文件名.ID
1222
+ // 或者自定义Mapper,自定义Mapper格式如下:
1223
+ [
1224
+ // 数据列名ditid将转换为属性`DTID`,如果没有值,将返回默认值0,其中默认值0是可选的
1225
+ {columnName: 'dit_id', mapNames: ['DTID'], def?: 0, convert: 转换函数},
1226
+ // 数据列名event_id将转换为属性`eventMainInfo.id`,这种方式将返回嵌套的json对象,其中默认值0是可选的
1227
+ {columnName: 'event_id', mapNames: ['eventMainInfo', 'id'], def?: 0, convert: 转换函数},
1228
+ ]
1229
+ ```
1230
+ 8. `dataConvert` 数据转换器
1231
+ ```
1232
+ dataConvert: {
1233
+ fileName: 'qiniu'
1234
+ }
1235
+ // 表示列 fileName 按 qiniu的函数格式化
1236
+ // qiniu 在开始时定义
1237
+ ```
1238
+ */
1239
+ selectBatch<T extends any[] = []>(option: MethodOption & {
1240
+ sync?: SyncMode.Async;
1241
+ selectResult?: SelectResult.RS_CS | SelectResult.RS_C;
1242
+ sqlId?: string;
1243
+ sql?: string;
1244
+ params?: Record<string, any>;
1245
+ context?: any;
1246
+ hump?: boolean;
1247
+ mapper?: string | SqlMapper;
1248
+ mapperIfUndefined?: MapperIfUndefined;
1249
+ dataConvert?: Record<string, string>;
1250
+ }): Promise<{
1251
+ [K in keyof T]: T[K][];
1252
+ }>;
1253
+ selectBatch<T extends any[] = []>(option: MethodOption & {
1254
+ sync?: SyncMode.Async;
1255
+ selectResult: SelectResult.R_CS_Assert | SelectResult.R_C_Assert;
1256
+ sqlId?: string;
1257
+ sql?: string;
1258
+ params?: Record<string, any>;
1259
+ context?: any;
1260
+ hump?: boolean;
1261
+ mapper?: string | SqlMapper;
1262
+ mapperIfUndefined?: MapperIfUndefined;
1263
+ dataConvert?: Record<string, string>;
1264
+ }): Promise<{
1265
+ [K in keyof T]: T[K];
1266
+ }>;
1267
+ selectBatch<T extends any[] = []>(option: MethodOption & {
1268
+ sync?: SyncMode.Async;
1269
+ selectResult: SelectResult.R_CS_NotSure | SelectResult.R_C_NotSure;
1270
+ sqlId?: string;
1271
+ sql?: string;
1272
+ params?: Record<string, any>;
1273
+ context?: any;
1274
+ hump?: boolean;
1275
+ mapper?: string | SqlMapper;
1276
+ mapperIfUndefined?: MapperIfUndefined;
1277
+ dataConvert?: Record<string, string>;
1278
+ }): Promise<{
1279
+ [K in keyof T]: T[K] | null;
1280
+ }>;
1281
+ selectBatch<T extends any[] = []>(option: MethodOption & {
1282
+ sync: SyncMode.Sync;
1283
+ selectResult?: SelectResult.RS_CS | SelectResult.RS_C;
1284
+ sqlId?: string;
1285
+ sql?: string;
1286
+ params?: Record<string, any>;
1287
+ context?: any;
1288
+ hump?: boolean;
1289
+ mapper?: string | SqlMapper;
1290
+ mapperIfUndefined?: MapperIfUndefined;
1291
+ dataConvert?: Record<string, string>;
1292
+ }): {
1293
+ [K in keyof T]: T[K][];
1294
+ };
1295
+ selectBatch<T extends any[] = []>(option: MethodOption & {
1296
+ sync: SyncMode.Sync;
1297
+ selectResult: SelectResult.R_CS_Assert | SelectResult.R_C_Assert;
1298
+ sqlId?: string;
1299
+ sql?: string;
1300
+ params?: Record<string, any>;
1301
+ context?: any;
1302
+ hump?: boolean;
1303
+ mapper?: string | SqlMapper;
1304
+ mapperIfUndefined?: MapperIfUndefined;
1305
+ dataConvert?: Record<string, string>;
1306
+ }): {
1307
+ [K in keyof T]: T[K];
1308
+ };
1309
+ selectBatch<T extends any[] = []>(option: MethodOption & {
1310
+ sync: SyncMode.Sync;
1311
+ selectResult: SelectResult.R_CS_NotSure | SelectResult.R_C_NotSure;
1312
+ sqlId?: string;
1313
+ sql?: string;
1314
+ params?: Record<string, any>;
1315
+ context?: any;
1316
+ hump?: boolean;
1317
+ mapper?: string | SqlMapper;
1318
+ mapperIfUndefined?: MapperIfUndefined;
1319
+ dataConvert?: Record<string, string>;
1320
+ }): {
1321
+ [K in keyof T]: T[K] | null;
1322
+ };
1323
+ /**
1324
+ # 自由执行sql
1325
+ 0. `sync`: 同步(sqlite)或者异步(mysql、remote),影响返回值类型,默认`异步模式`
1326
+ 1. `sql` 或者 `sqlid`
1327
+ 2. `params`
1328
+ 3. `dbName`: 默认使用service注解的`dbName`,可以在某个方法中覆盖
1329
+ 4. `conn`: 仅在开启事务时需要主动传入,传入示例:
1330
+ ```
1331
+ service.transaction(async conn => {
1332
+ service.insert({conn});
1333
+ });
1334
+ ```
1335
+ 5. `dao`: 永远不需要传入该值
1336
+
1337
+ */
1338
+ excute<L = T>(option: MethodOption & {
1339
+ sync?: SyncMode.Async;
1340
+ sqlId?: string;
1341
+ sql?: string;
1342
+ params?: Record<string, any>;
1343
+ context?: any;
1344
+ }): Promise<number>;
1345
+ excute<L = T>(option: MethodOption & {
1346
+ sync: SyncMode.Sync;
1347
+ sqlId?: string;
1348
+ sql?: string;
1349
+ params?: Record<string, any>;
1350
+ context?: any;
1351
+ }): number;
1352
+ /**
1353
+ ### 开启事务
1354
+ ### 这里面的所有数据方法,都必须传递CONN,否则会引起
1355
+ # 死锁
1356
+ ### 举例说明:
1357
+ #### 假设有两条代码,都操作同一个表A,其中代码1传了conn,但代码2没有传
1358
+ #### 代码1:插入数据,代码2:更新数据
1359
+ #### 二者操作的是不同的数据
1360
+ #### 以上为前提,开始分析:
1361
+ ** 当事务打开后,会创建一个连接1,开始执行代码1
1362
+ ** 代码1执行完毕,由于`transaction`方法尚未结束,所以不会提交事务。
1363
+ ** 代码1是插入数据,因此会导致全表锁
1364
+ ** 代码2开始执行,由于没有传入conn,所以会创建一个新的连接2
1365
+ ** 代码2执行时,会等待连接1的锁释放
1366
+ ** 但是连接1的锁是在`transaction`方法执行完后才会提交并释放锁,这导致死循环,开启死锁
1367
+ **
1368
+ */
1369
+ transaction<L = T>(option: MethodOption & {
1370
+ sync?: SyncMode.Async;
1371
+ fn: (conn: Connection) => Promise<L>;
1372
+ }): Promise<L | null>;
1373
+ transaction<L = T>(option: MethodOption & {
1374
+ sync: SyncMode.Sync;
1375
+ fn: (conn: Connection) => L;
1376
+ }): L | null;
1377
+ stream<L extends object = T>(): StreamQuery<L>;
1378
+ page<L = T>(option: MethodOption & {
1379
+ sync?: SyncMode.Async;
1380
+ sqlId: string;
1381
+ context?: any;
1382
+ params: Record<string, any>;
1383
+ pageSize?: number;
1384
+ pageNumber?: number;
1385
+ limitSelf?: boolean;
1386
+ countSelf?: boolean;
1387
+ sum?: boolean;
1388
+ sumSelf?: boolean;
1389
+ sortName?: string;
1390
+ sortType?: string;
1391
+ hump?: boolean;
1392
+ mapper?: string | SqlMapper;
1393
+ mapperIfUndefined?: MapperIfUndefined;
1394
+ dataConvert?: Record<string, string>;
1395
+ }): Promise<PageQuery<L>>;
1396
+ page<L = T>(option: MethodOption & {
1397
+ sync: SyncMode.Sync;
1398
+ sqlId: string;
1399
+ context?: any;
1400
+ params: Record<string, any>;
1401
+ pageSize?: number;
1402
+ pageNumber?: number;
1403
+ limitSelf?: boolean;
1404
+ countSelf?: boolean;
1405
+ sum?: boolean;
1406
+ sumSelf?: boolean;
1407
+ sortName?: string;
1408
+ sortType?: string;
1409
+ hump?: boolean;
1410
+ mapper?: string | SqlMapper;
1411
+ mapperIfUndefined?: MapperIfUndefined;
1412
+ dataConvert?: Record<string, string>;
1413
+ }): PageQuery<L>;
1414
+ /**
1415
+ * 导出数据,可以为EJS-EXCEL直接使用
1416
+ * @param list
1417
+ * @returns
1418
+ */
1419
+ exp<L = T>(list: L[]): {
1420
+ title: string | undefined;
1421
+ titleSpan: string;
1422
+ columnTitles: string[];
1423
+ datas: any[][];
1424
+ };
1425
+ /**
1426
+ * 导入数据的模板
1427
+ * @returns
1428
+ */
1429
+ imp(): {
1430
+ title: string | undefined;
1431
+ titleSpan: string;
1432
+ columnTitles: string[];
1433
+ };
1434
+ /**
1435
+ * 初始化表结构
1436
+ * 只有sqlite、sqliteremote需要
1437
+ * force: 是否强制,默认false, 强制时会删除再创建
1438
+ * @param option
1439
+ */
1440
+ init(option?: MethodOption & {
1441
+ sync?: SyncMode.Async;
1442
+ force?: boolean;
1443
+ }): Promise<void>;
1444
+ init(option: MethodOption & {
1445
+ sync: SyncMode.Sync;
1446
+ force?: boolean;
1447
+ }): void;
1448
+ close(option?: MethodOption & {
1449
+ sync?: SyncMode.Async;
1450
+ }): Promise<void>;
1451
+ close(option: MethodOption & {
1452
+ sync: SyncMode.Sync;
1453
+ }): void;
1454
+ /**
1455
+ #创建表
1456
+ ** `tableName` 表名称
1457
+ ** `temp` 是否是临时表,默认true
1458
+ ** `columns` 字符串数组,默认是当前实体类全部字段,通过`columns` 可以创建部分字段临时表
1459
+ ** `id` 表的主键设置 4种:
1460
+ 1. `auto`: `columns`中已经在当前实体类配置的ID作为主键 `默认`
1461
+ 2. `all`: `columns`中所有字段全部当主键
1462
+ 3. `none`: 没有主键
1463
+ 4. 自定义字段名称:字符串数组
1464
+ ** `index` 表的索引,设置方式同ID
1465
+ */
1466
+ private _createTable;
1467
+ private _matchSqlid;
1468
+ private _setParam;
1469
+ private _generSql;
1470
+ }
1471
+ declare class StreamQuery<T extends object> {
1472
+ private _prefix;
1473
+ private _index;
1474
+ private _wheres;
1475
+ private _andQuerys;
1476
+ private _orQuerys;
1477
+ private _paramKeys;
1478
+ private _param;
1479
+ if_proceed: boolean;
1480
+ if_exec: boolean;
1481
+ private _distinct;
1482
+ private _columns;
1483
+ private _updates?;
1484
+ private _updateColumns;
1485
+ private _groups;
1486
+ private _orders;
1487
+ private _startRow;
1488
+ private _pageSize;
1489
+ private _service;
1490
+ private [_fields];
1491
+ private [_columns];
1492
+ constructor(service: SqlService<T>, __fields: Record<string, AField>, __columns: string[]);
1493
+ /** 将当前stream重置 */
1494
+ reset(): this;
1495
+ /** 为下次链条执行提供条件判断:非异步方法跳过,异步方法不执行并返回默认值 */
1496
+ if(condition: boolean): this;
1497
+ /**
1498
+ * AND(key1 = :value OR key2 = :value)
1499
+ * @param keys [key1, key2, ...]
1500
+ */
1501
+ eqs(keys: (keyof T)[], value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1502
+ paramName?: string | undefined;
1503
+ skipEmptyString?: boolean | undefined;
1504
+ breakExcuteIfEmpty?: boolean | undefined;
1505
+ }): this;
1506
+ /*** AND key = :value */
1507
+ eq(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1508
+ paramName?: string | undefined;
1509
+ skipEmptyString?: boolean | undefined;
1510
+ breakExcuteIfEmpty?: boolean | undefined;
1511
+ }): this;
1512
+ /*** AND key1 = :value1 AND key2 = :value2 */
1513
+ eqT(t: Partial<T>, { name: paramName, breakExcuteIfEmpty }?: {
1514
+ name?: string | undefined;
1515
+ breakExcuteIfEmpty?: boolean | undefined;
1516
+ }): this;
1517
+ /*** AND key <> :value */
1518
+ notEq(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1519
+ paramName?: string | undefined;
1520
+ skipEmptyString?: boolean | undefined;
1521
+ breakExcuteIfEmpty?: boolean | undefined;
1522
+ }): this;
1523
+ /** AND key1 = key2 */
1524
+ eqWith(key1: keyof T, key2: keyof T): this;
1525
+ /** AND key1 <> key2 */
1526
+ notEqWith(key1: keyof T, key2: keyof T): this;
1527
+ /** AND key > :value */
1528
+ grate(key: keyof T, value: string | number, { paramName, breakExcuteIfEmpty }?: {
1529
+ paramName?: string | undefined;
1530
+ breakExcuteIfEmpty?: boolean | undefined;
1531
+ }): this;
1532
+ /** AND key >= :value */
1533
+ grateEq(key: keyof T, value: string | number, { paramName, breakExcuteIfEmpty }?: {
1534
+ paramName?: string | undefined;
1535
+ breakExcuteIfEmpty?: boolean | undefined;
1536
+ }): this;
1537
+ /** AND key1 > key2 */
1538
+ grateWith(key1: keyof T, key2: keyof T): this;
1539
+ /** AND key1 >= key2 */
1540
+ grateEqWith(key1: keyof T, key2: keyof T): this;
1541
+ /** AND key < :value */
1542
+ less(key: keyof T, value: string | number, { paramName, breakExcuteIfEmpty }?: {
1543
+ paramName?: string | undefined;
1544
+ breakExcuteIfEmpty?: boolean | undefined;
1545
+ }): this;
1546
+ /** AND key <= :value */
1547
+ lessEq(key: keyof T, value: string | number, { paramName, breakExcuteIfEmpty }?: {
1548
+ paramName?: string | undefined;
1549
+ breakExcuteIfEmpty?: boolean | undefined;
1550
+ }): this;
1551
+ /** AND key1 < key2 */
1552
+ lessWith(key1: keyof T, key2: keyof T): this;
1553
+ /** AND key1 <= key2 */
1554
+ lessEqWith(key1: keyof T, key2: keyof T): this;
1555
+ /** AND key REGEXP :regexp */
1556
+ regexp(key: keyof T, regexp: string, { paramName, breakExcuteIfEmpty }?: {
1557
+ paramName?: string | undefined;
1558
+ breakExcuteIfEmpty?: boolean | undefined;
1559
+ }): this;
1560
+ /** AND key NOT REGEXP :regexp */
1561
+ notRegexp(key: keyof T, regexp: string, { paramName, breakExcuteIfEmpty }?: {
1562
+ paramName?: string | undefined;
1563
+ breakExcuteIfEmpty?: boolean | undefined;
1564
+ }): this;
1565
+ /** AND :regexp REGEXP key */
1566
+ regexp2(key: keyof T, regexp: string, { paramName, breakExcuteIfEmpty }?: {
1567
+ paramName?: string | undefined;
1568
+ breakExcuteIfEmpty?: boolean | undefined;
1569
+ }): this;
1570
+ /** AND :regexp NOT REGEXP key */
1571
+ notRegexp2(key: keyof T, regexp: string, { paramName, breakExcuteIfEmpty }?: {
1572
+ paramName?: string | undefined;
1573
+ breakExcuteIfEmpty?: boolean | undefined;
1574
+ }): this;
1575
+ /** AND (key1 << 8) + key2 = value */
1576
+ shiftEq(key1: keyof T, key2: keyof T, value: number, { paramName, breakExcuteIfEmpty }?: {
1577
+ paramName?: string | undefined;
1578
+ breakExcuteIfEmpty?: boolean | undefined;
1579
+ }): this;
1580
+ /** AND (key1 << 8) + key2 <> value */
1581
+ shiftNotEq(key1: keyof T, key2: keyof T, value: number, { paramName, breakExcuteIfEmpty }?: {
1582
+ paramName?: string | undefined;
1583
+ breakExcuteIfEmpty?: boolean | undefined;
1584
+ }): this;
1585
+ /** AND key LIKE CONCAT('%', :value, '%') */
1586
+ like(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1587
+ paramName?: string | undefined;
1588
+ skipEmptyString?: boolean | undefined;
1589
+ breakExcuteIfEmpty?: boolean | undefined;
1590
+ }): this;
1591
+ /** AND key NOT LIKE CONCAT('%', :value, '%') */
1592
+ notLike(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1593
+ paramName?: string | undefined;
1594
+ skipEmptyString?: boolean | undefined;
1595
+ breakExcuteIfEmpty?: boolean | undefined;
1596
+ }): this;
1597
+ /** AND key NOT LIKE CONCAT('%', :value) */
1598
+ leftLike(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1599
+ paramName?: string | undefined;
1600
+ skipEmptyString?: boolean | undefined;
1601
+ breakExcuteIfEmpty?: boolean | undefined;
1602
+ }): this;
1603
+ /** AND key LIKE CONCAT('%', :value) */
1604
+ notLeftLike(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1605
+ paramName?: string | undefined;
1606
+ skipEmptyString?: boolean | undefined;
1607
+ breakExcuteIfEmpty?: boolean | undefined;
1608
+ }): this;
1609
+ /** AND key LIKE CONCAT(:value, '%') */
1610
+ rightLike(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1611
+ paramName?: string | undefined;
1612
+ skipEmptyString?: boolean | undefined;
1613
+ breakExcuteIfEmpty?: boolean | undefined;
1614
+ }): this;
1615
+ /** AND key NOT LIKE CONCAT(:value, '%') */
1616
+ notRightLike(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1617
+ paramName?: string | undefined;
1618
+ skipEmptyString?: boolean | undefined;
1619
+ breakExcuteIfEmpty?: boolean | undefined;
1620
+ }): this;
1621
+ /** AND key LIKE :value 注意:不会拼接% */
1622
+ PreciseLike(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1623
+ paramName?: string | undefined;
1624
+ skipEmptyString?: boolean | undefined;
1625
+ breakExcuteIfEmpty?: boolean | undefined;
1626
+ }): this;
1627
+ /** AND key NOT LIKE :value 注意:不会拼接%*/
1628
+ notPreciseLike(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1629
+ paramName?: string | undefined;
1630
+ skipEmptyString?: boolean | undefined;
1631
+ breakExcuteIfEmpty?: boolean | undefined;
1632
+ }): this;
1633
+ /** AND key GLOB CONCAT('%', :value, '%') 注意:GLOB是大小写敏感like */
1634
+ glob(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1635
+ paramName?: string | undefined;
1636
+ skipEmptyString?: boolean | undefined;
1637
+ breakExcuteIfEmpty?: boolean | undefined;
1638
+ }): this;
1639
+ /** AND key NOT GLOB CONCAT('%', :value, '%') 注意:GLOB是大小写敏感like*/
1640
+ notGlob(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1641
+ paramName?: string | undefined;
1642
+ skipEmptyString?: boolean | undefined;
1643
+ breakExcuteIfEmpty?: boolean | undefined;
1644
+ }): this;
1645
+ /** AND key GLOB CONCAT('%', :value) 注意:GLOB是大小写敏感like*/
1646
+ leftGlob(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1647
+ paramName?: string | undefined;
1648
+ skipEmptyString?: boolean | undefined;
1649
+ breakExcuteIfEmpty?: boolean | undefined;
1650
+ }): this;
1651
+ /** AND key NOT GLOB CONCAT('%', :value) 注意:GLOB是大小写敏感like*/
1652
+ notLeftGlob(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1653
+ paramName?: string | undefined;
1654
+ skipEmptyString?: boolean | undefined;
1655
+ breakExcuteIfEmpty?: boolean | undefined;
1656
+ }): this;
1657
+ /** AND key GLOB CONCAT(:value, '%') 注意:GLOB是大小写敏感like*/
1658
+ rightGlob(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1659
+ paramName?: string | undefined;
1660
+ skipEmptyString?: boolean | undefined;
1661
+ breakExcuteIfEmpty?: boolean | undefined;
1662
+ }): this;
1663
+ /** AND key NOT GLOB CONCAT(:value, '%') 注意:GLOB是大小写敏感like*/
1664
+ notRightGlob(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1665
+ paramName?: string | undefined;
1666
+ skipEmptyString?: boolean | undefined;
1667
+ breakExcuteIfEmpty?: boolean | undefined;
1668
+ }): this;
1669
+ /** AND key GLOB :value 注意:GLOB是大小写敏感like,这里不拼接%*/
1670
+ preciseGlob(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1671
+ paramName?: string | undefined;
1672
+ skipEmptyString?: boolean | undefined;
1673
+ breakExcuteIfEmpty?: boolean | undefined;
1674
+ }): this;
1675
+ /** AND key NOT GLOB :value 注意:GLOB是大小写敏感like,这里不拼接%*/
1676
+ notPreciseGlob(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1677
+ paramName?: string | undefined;
1678
+ skipEmptyString?: boolean | undefined;
1679
+ breakExcuteIfEmpty?: boolean | undefined;
1680
+ }): this;
1681
+ /** AND :value LIKE CONCAT('%', key, '%') */
1682
+ like2(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1683
+ paramName?: string | undefined;
1684
+ skipEmptyString?: boolean | undefined;
1685
+ breakExcuteIfEmpty?: boolean | undefined;
1686
+ }): this;
1687
+ /** AND :value NOT LIKE CONCAT('%', key, '%') */
1688
+ notLike2(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1689
+ paramName?: string | undefined;
1690
+ skipEmptyString?: boolean | undefined;
1691
+ breakExcuteIfEmpty?: boolean | undefined;
1692
+ }): this;
1693
+ /** AND :value NOT LIKE CONCAT('%', key) */
1694
+ leftLike2(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1695
+ paramName?: string | undefined;
1696
+ skipEmptyString?: boolean | undefined;
1697
+ breakExcuteIfEmpty?: boolean | undefined;
1698
+ }): this;
1699
+ /** AND :value LIKE CONCAT('%', key) */
1700
+ notLeftLike2(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1701
+ paramName?: string | undefined;
1702
+ skipEmptyString?: boolean | undefined;
1703
+ breakExcuteIfEmpty?: boolean | undefined;
1704
+ }): this;
1705
+ /** AND :value LIKE CONCAT(key, '%') */
1706
+ rightLike2(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1707
+ paramName?: string | undefined;
1708
+ skipEmptyString?: boolean | undefined;
1709
+ breakExcuteIfEmpty?: boolean | undefined;
1710
+ }): this;
1711
+ /** AND :value NOT LIKE CONCAT(key, '%') */
1712
+ notRightLike2(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1713
+ paramName?: string | undefined;
1714
+ skipEmptyString?: boolean | undefined;
1715
+ breakExcuteIfEmpty?: boolean | undefined;
1716
+ }): this;
1717
+ /** AND :value LIKE key 注意:不会拼接% */
1718
+ PreciseLike2(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1719
+ paramName?: string | undefined;
1720
+ skipEmptyString?: boolean | undefined;
1721
+ breakExcuteIfEmpty?: boolean | undefined;
1722
+ }): this;
1723
+ /** AND :value NOT LIKE key 注意:不会拼接%*/
1724
+ notPreciseLike2(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1725
+ paramName?: string | undefined;
1726
+ skipEmptyString?: boolean | undefined;
1727
+ breakExcuteIfEmpty?: boolean | undefined;
1728
+ }): this;
1729
+ /** AND :value GLOB CONCAT('%', key, '%') 注意:GLOB是大小写敏感like */
1730
+ glob2(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1731
+ paramName?: string | undefined;
1732
+ skipEmptyString?: boolean | undefined;
1733
+ breakExcuteIfEmpty?: boolean | undefined;
1734
+ }): this;
1735
+ /** AND :value NOT GLOB CONCAT('%', key, '%') 注意:GLOB是大小写敏感like*/
1736
+ notGlob2(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1737
+ paramName?: string | undefined;
1738
+ skipEmptyString?: boolean | undefined;
1739
+ breakExcuteIfEmpty?: boolean | undefined;
1740
+ }): this;
1741
+ /** AND :value GLOB CONCAT('%', key) 注意:GLOB是大小写敏感like*/
1742
+ leftGlob2(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1743
+ paramName?: string | undefined;
1744
+ skipEmptyString?: boolean | undefined;
1745
+ breakExcuteIfEmpty?: boolean | undefined;
1746
+ }): this;
1747
+ /** AND :value NOT GLOB CONCAT('%', key) 注意:GLOB是大小写敏感like*/
1748
+ notLeftGlob2(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1749
+ paramName?: string | undefined;
1750
+ skipEmptyString?: boolean | undefined;
1751
+ breakExcuteIfEmpty?: boolean | undefined;
1752
+ }): this;
1753
+ /** AND :value GLOB CONCAT(key, '%') 注意:GLOB是大小写敏感like*/
1754
+ rightGlob2(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1755
+ paramName?: string | undefined;
1756
+ skipEmptyString?: boolean | undefined;
1757
+ breakExcuteIfEmpty?: boolean | undefined;
1758
+ }): this;
1759
+ /** AND :value NOT GLOB CONCAT(key, '%') 注意:GLOB是大小写敏感like*/
1760
+ notRightGlob2(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1761
+ paramName?: string | undefined;
1762
+ skipEmptyString?: boolean | undefined;
1763
+ breakExcuteIfEmpty?: boolean | undefined;
1764
+ }): this;
1765
+ /** AND :value GLOB key 注意:GLOB是大小写敏感like,这里不拼接%*/
1766
+ preciseGlob2(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1767
+ paramName?: string | undefined;
1768
+ skipEmptyString?: boolean | undefined;
1769
+ breakExcuteIfEmpty?: boolean | undefined;
1770
+ }): this;
1771
+ /** AND :value NOT GLOB key 注意:GLOB是大小写敏感like,这里不拼接%*/
1772
+ notPreciseGlob2(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1773
+ paramName?: string | undefined;
1774
+ skipEmptyString?: boolean | undefined;
1775
+ breakExcuteIfEmpty?: boolean | undefined;
1776
+ }): this;
1777
+ /** AND key IN (:value) */
1778
+ in(key: keyof T, value: Array<string | number>, { paramName, breakExcuteIfEmpty }?: {
1779
+ paramName?: string | undefined;
1780
+ breakExcuteIfEmpty?: boolean | undefined;
1781
+ }): this;
1782
+ /** AND key NOT IN (:value) */
1783
+ notIn(key: keyof T, value: Array<string | number>, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1784
+ paramName?: string | undefined;
1785
+ skipEmptyString?: boolean | undefined;
1786
+ breakExcuteIfEmpty?: boolean | undefined;
1787
+ }): this;
1788
+ /** AND :value IN (key1, key2, ...) */
1789
+ in2(key: (keyof T)[], value: string | number, { paramName, breakExcuteIfEmpty }?: {
1790
+ paramName?: string | undefined;
1791
+ breakExcuteIfEmpty?: boolean | undefined;
1792
+ }): this;
1793
+ /** AND :value NOT IN (key1, key2, ...) */
1794
+ notIn2(key: (keyof T)[], value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1795
+ paramName?: string | undefined;
1796
+ skipEmptyString?: boolean | undefined;
1797
+ breakExcuteIfEmpty?: boolean | undefined;
1798
+ }): this;
1799
+ /** AND key IS NULL */
1800
+ isNULL(key: keyof T): this;
1801
+ /** AND key IS NOT NULL */
1802
+ isNotNULL(key: keyof T): this;
1803
+ /** AND (key IS NULL OR key = '') */
1804
+ isEmpty(key: keyof T): this;
1805
+ /** AND key IS NOT NULL AND key <> ''*/
1806
+ isNotEmpty(key: keyof T): this;
1807
+ /** AND key BETWEEN :value1 AND :value2 */
1808
+ between(key: keyof T, value1: string | number, value2: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1809
+ paramName?: string | undefined;
1810
+ skipEmptyString?: boolean | undefined;
1811
+ breakExcuteIfEmpty?: boolean | undefined;
1812
+ }): this;
1813
+ /** AND key NOT BETWEEN :value1 AND :value2 */
1814
+ notBetween(key: keyof T, value1: string | number, value2: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1815
+ paramName?: string | undefined;
1816
+ skipEmptyString?: boolean | undefined;
1817
+ breakExcuteIfEmpty?: boolean | undefined;
1818
+ }): this;
1819
+ /** AND POW(2, key) & :value */
1820
+ pow(key: keyof T, value: number, { paramName, breakExcuteIfEmpty }?: {
1821
+ paramName?: string | undefined;
1822
+ breakExcuteIfEmpty?: boolean | undefined;
1823
+ }): this;
1824
+ /** AND NOT POW(2, key) & :value */
1825
+ notPow(key: keyof T, value: number, { paramName, breakExcuteIfEmpty }?: {
1826
+ paramName?: string | undefined;
1827
+ breakExcuteIfEmpty?: boolean | undefined;
1828
+ }): this;
1829
+ /** AND POW(2, :value) & key */
1830
+ pow2(key: keyof T, value: number, { paramName, breakExcuteIfEmpty }?: {
1831
+ paramName?: string | undefined;
1832
+ breakExcuteIfEmpty?: boolean | undefined;
1833
+ }): this;
1834
+ /** AND NOT POW(2, :value) & key */
1835
+ notPow2(key: keyof T, value: number, { paramName, breakExcuteIfEmpty }?: {
1836
+ paramName?: string | undefined;
1837
+ breakExcuteIfEmpty?: boolean | undefined;
1838
+ }): this;
1839
+ /** AND POW(2, key1) & key2 */
1840
+ powWith(key: keyof T, values: Array<number | string>, { paramName, breakExcuteIfEmpty }?: {
1841
+ paramName?: string | undefined;
1842
+ breakExcuteIfEmpty?: boolean | undefined;
1843
+ }): this;
1844
+ /** AND NOT POW(2, key1) & key2 */
1845
+ notPowWith(key: keyof T, values: Array<number | string>, { paramName, breakExcuteIfEmpty }?: {
1846
+ paramName?: string | undefined;
1847
+ breakExcuteIfEmpty?: boolean | undefined;
1848
+ }): this;
1849
+ /** AND MATCH(key1, key2, key3...) AGAINST (:value) */
1850
+ match(value: string, keys: (keyof T)[], { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1851
+ paramName?: string | undefined;
1852
+ skipEmptyString?: boolean | undefined;
1853
+ breakExcuteIfEmpty?: boolean | undefined;
1854
+ }): this;
1855
+ /** AND NOT MATCH(key1, key2, key3...) AGAINST (:value) */
1856
+ notMatch(value: string, keys: (keyof T)[], { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1857
+ paramName?: string | undefined;
1858
+ skipEmptyString?: boolean | undefined;
1859
+ breakExcuteIfEmpty?: boolean | undefined;
1860
+ }): this;
1861
+ /** AND MATCH(key1, key2, key3...) AGAINST (:value) IN BOOLEAN MODE*/
1862
+ matchBoolean(value: string, keys: (keyof T)[], { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1863
+ paramName?: string | undefined;
1864
+ skipEmptyString?: boolean | undefined;
1865
+ breakExcuteIfEmpty?: boolean | undefined;
1866
+ }): this;
1867
+ /** AND NOT MATCH(key1, key2, key3...) AGAINST (:value) IN BOOLEAN MODE */
1868
+ notMatchBoolean(value: string, keys: (keyof T)[], { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1869
+ paramName?: string | undefined;
1870
+ skipEmptyString?: boolean | undefined;
1871
+ breakExcuteIfEmpty?: boolean | undefined;
1872
+ }): this;
1873
+ /** AND MATCH(key1, key2, key3...) AGAINST (:value) WITH QUERY EXPANSION*/
1874
+ matchQuery(value: string, keys: (keyof T)[], { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1875
+ paramName?: string | undefined;
1876
+ skipEmptyString?: boolean | undefined;
1877
+ breakExcuteIfEmpty?: boolean | undefined;
1878
+ }): this;
1879
+ /** AND NOT MATCH(key1, key2, key3...) AGAINST (:value) WITH QUERY EXPANSION*/
1880
+ notMatchQuery(value: string, keys: (keyof T)[], { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1881
+ paramName?: string | undefined;
1882
+ skipEmptyString?: boolean | undefined;
1883
+ breakExcuteIfEmpty?: boolean | undefined;
1884
+ }): this;
1885
+ /** AND LOCATE(key, :value) > 0 */
1886
+ includes(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1887
+ paramName?: string | undefined;
1888
+ skipEmptyString?: boolean | undefined;
1889
+ breakExcuteIfEmpty?: boolean | undefined;
1890
+ }): this;
1891
+ /** AND NOT LOCATE(key, :value) = 0 */
1892
+ notIncludes(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1893
+ paramName?: string | undefined;
1894
+ skipEmptyString?: boolean | undefined;
1895
+ breakExcuteIfEmpty?: boolean | undefined;
1896
+ }): this;
1897
+ /** AND LOCATE(:value, key) > 0 */
1898
+ includes2(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1899
+ paramName?: string | undefined;
1900
+ skipEmptyString?: boolean | undefined;
1901
+ breakExcuteIfEmpty?: boolean | undefined;
1902
+ }): this;
1903
+ /** AND NOT LOCATE(:value, key) = 0 */
1904
+ notIncludes2(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1905
+ paramName?: string | undefined;
1906
+ skipEmptyString?: boolean | undefined;
1907
+ breakExcuteIfEmpty?: boolean | undefined;
1908
+ }): this;
1909
+ /** AND FIND_IN_SET(:value, key) */
1910
+ findInSet(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1911
+ paramName?: string | undefined;
1912
+ skipEmptyString?: boolean | undefined;
1913
+ breakExcuteIfEmpty?: boolean | undefined;
1914
+ }): this;
1915
+ /** AND FIND_IN_SET(key, :value) */
1916
+ findInSet2(key: keyof T, value: string | number, { paramName, skipEmptyString, breakExcuteIfEmpty }?: {
1917
+ paramName?: string | undefined;
1918
+ skipEmptyString?: boolean | undefined;
1919
+ breakExcuteIfEmpty?: boolean | undefined;
1920
+ }): this;
1921
+ and(fn: StreamQuery<T> | ((stream: StreamQuery<T>) => boolean | void)): this;
1922
+ or(fn: StreamQuery<T> | ((stream: StreamQuery<T>) => boolean | void)): this;
1923
+ /**
1924
+ * sql WHERE 查询语句拼接:注意若有JOIN,需要写明别名。本表别名为t.例如:
1925
+ * ```
1926
+ * where('t.name > :name', {name: 1});
1927
+ * where('(t.name > :name OR t.name <> :name)', {name: 1});
1928
+ * ```
1929
+ */
1930
+ where(sql: string, param?: Record<string, any>): this;
1931
+ /** SET key = IFNULL(key, 0) + :value */
1932
+ incr(key: keyof T, value?: number): this;
1933
+ /** GROUP BY key1, key2, ... */
1934
+ groupBy(...keys: (keyof T)[]): this;
1935
+ /** GROUP BY key1, key2, ... */
1936
+ groupBy2(...keys: string[]): this;
1937
+ /** ORDER BY key1 ASC, key2 ASC, ... */
1938
+ asc(...keys: (keyof T)[]): this;
1939
+ /** ORDER BY key1 ASC, key2 ASC, ... */
1940
+ asc2(...keys: string[]): this;
1941
+ /** ORDER BY key1 DESC, key2 DESC, ... */
1942
+ desc(...keys: (keyof T)[]): this;
1943
+ /** ORDER BY key1 DESC, key2 DESC, ... */
1944
+ desc2(...keys: string[]): this;
1945
+ /** LIMIT :startRow, :pageSize */
1946
+ limit(startRow: number, pageSize: number): this;
1947
+ /** LIMIT ((:pageNumber || 1) - 1) * :pageSize, :pageSize */
1948
+ page(pageNumber: number, pageSize: number): this;
1949
+ distinct(on?: boolean): this;
1950
+ /** COUNT(DISTINCT key) */
1951
+ countDistinct(key: keyof T, countName?: string): this;
1952
+ count(countName?: string): this;
1953
+ sum(key: keyof T, legName?: string, distinct?: boolean): this;
1954
+ avg(key: keyof T, legName?: string, distinct?: boolean): this;
1955
+ max(key: keyof T, legName?: string, distinct?: boolean): this;
1956
+ min(key: keyof T, legName?: string, distinct?: boolean): this;
1957
+ /** GROUP_CONCAT([DISTINCT] key [ORDER BY :asc ASC] [ORDER BY :asc DESC] [SEPARATOR :separator]) */
1958
+ groupConcat(key: keyof T, param?: {
1959
+ distinct?: boolean;
1960
+ separator?: string;
1961
+ asc?: (keyof T)[];
1962
+ desc?: (keyof T)[];
1963
+ groupName?: string;
1964
+ }): this;
1965
+ select(...key: (keyof T)[]): this;
1966
+ /**
1967
+ * sql查询语句拼接:注意若有JOIN,需要写明别名。本表别名为t.例如:
1968
+ * ```
1969
+ * select2('t.name, t.age, ISNULL(t.type, :type)', {type: 1});
1970
+ * select2('MAX(t.age) MAXAge');
1971
+ * ```
1972
+ */
1973
+ select2(sql: string, param?: Record<string, any>): this;
1974
+ update(key: keyof T, value: T[keyof T]): this;
1975
+ /** update语句拼接:注意若有JOIN,需要写明别名。本表别名为t */
1976
+ update2(sql: string, param?: Record<string, any>): this;
1977
+ updateT(t: Partial<T>): this;
1978
+ /** SET key = REPLACE(key, :valueToFind, :valueToReplace) */
1979
+ replace(key: keyof T, valueToFind: T[keyof T], valueToReplace: T[keyof T]): this;
1980
+ excuteSelect<L = T>(option?: MethodOption & {
1981
+ sync?: SyncMode.Async;
1982
+ selectResult?: SelectResult.RS_CS | SelectResult.RS_C;
1983
+ hump?: boolean;
1984
+ mapper?: string | SqlMapper;
1985
+ mapperIfUndefined?: MapperIfUndefined;
1986
+ dataConvert?: Record<string, string>;
1987
+ }): Promise<L[]>;
1988
+ excuteSelect<L = T>(option: MethodOption & {
1989
+ sync?: SyncMode.Async;
1990
+ selectResult: SelectResult.R_CS_Assert | SelectResult.R_C_Assert;
1991
+ errorMsg?: string;
1992
+ hump?: boolean;
1993
+ mapper?: string | SqlMapper;
1994
+ mapperIfUndefined?: MapperIfUndefined;
1995
+ dataConvert?: Record<string, string>;
1996
+ }): Promise<L>;
1997
+ excuteSelect<L = T>(option: MethodOption & {
1998
+ sync?: SyncMode.Async;
1999
+ selectResult: SelectResult.R_CS_NotSure | SelectResult.R_C_NotSure;
2000
+ hump?: boolean;
2001
+ mapper?: string | SqlMapper;
2002
+ mapperIfUndefined?: MapperIfUndefined;
2003
+ dataConvert?: Record<string, string>;
2004
+ }): Promise<L | null>;
2005
+ excuteSelect<L = T>(option: MethodOption & {
2006
+ sync: SyncMode.Sync;
2007
+ selectResult: SelectResult.RS_CS | SelectResult.RS_C;
2008
+ hump?: boolean;
2009
+ mapper?: string | SqlMapper;
2010
+ mapperIfUndefined?: MapperIfUndefined;
2011
+ dataConvert?: Record<string, string>;
2012
+ }): L[];
2013
+ excuteSelect<L = T>(option: MethodOption & {
2014
+ sync: SyncMode.Sync;
2015
+ selectResult: SelectResult.R_CS_Assert | SelectResult.R_C_Assert;
2016
+ errorMsg?: string;
2017
+ hump?: boolean;
2018
+ mapper?: string | SqlMapper;
2019
+ mapperIfUndefined?: MapperIfUndefined;
2020
+ dataConvert?: Record<string, string>;
2021
+ }): L;
2022
+ excuteSelect<L = T>(option: MethodOption & {
2023
+ sync: SyncMode.Sync;
2024
+ selectResult: SelectResult.R_CS_NotSure | SelectResult.R_C_NotSure;
2025
+ hump?: boolean;
2026
+ mapper?: string | SqlMapper;
2027
+ mapperIfUndefined?: MapperIfUndefined;
2028
+ dataConvert?: Record<string, string>;
2029
+ }): L | null;
2030
+ excutePage<L = T>(option?: MethodOption & {
2031
+ sync?: SyncMode;
2032
+ hump?: boolean;
2033
+ mapper?: string | SqlMapper;
2034
+ mapperIfUndefined?: MapperIfUndefined;
2035
+ dataConvert?: Record<string, string>;
2036
+ }): PageQuery<L> | Promise<PageQuery<L>>;
2037
+ excuteUpdate(option?: MethodOption & {
2038
+ sync?: SyncMode.Async;
2039
+ skipUndefined?: boolean;
2040
+ skipNull?: boolean;
2041
+ skipEmptyString?: boolean;
2042
+ }): Promise<number>;
2043
+ excuteUpdate(option: MethodOption & {
2044
+ sync: SyncMode.Sync;
2045
+ skipUndefined?: boolean;
2046
+ skipNull?: boolean;
2047
+ skipEmptyString?: boolean;
2048
+ }): number;
2049
+ excuteDelete(option?: MethodOption & {
2050
+ sync?: SyncMode.Async;
2051
+ forceDelete?: boolean;
2052
+ }): Promise<number>;
2053
+ excuteDelete(option: MethodOption & {
2054
+ sync: SyncMode.Sync;
2055
+ forceDelete?: boolean;
2056
+ }): number;
2057
+ private _where;
2058
+ private _;
2059
+ private _2;
2060
+ private __;
2061
+ private _null;
2062
+ private _key;
2063
+ private _between;
2064
+ private _in;
2065
+ private _in2;
2066
+ private _shift;
2067
+ private _match;
2068
+ private _pow;
2069
+ private _pow2;
2070
+ private _like;
2071
+ private _like2;
2072
+ private _includes;
2073
+ private _includes2;
2074
+ }
2075
+ /**
2076
+ 获取REDIS客户端,
2077
+ # [查看库的API](https://redis.github.io/ioredis/)
2078
+ # [REDIS API](http://doc.redisfans.com/)
2079
+ REDIS 的API 可以直接用,将方法名转为小写
2080
+ ```
2081
+ // 设置<Redis>来获得代码提示
2082
+ getRedisDB<Redis>('').exists(?)
2083
+ ```
2084
+ */
2085
+ export declare function getRedisDB<T = any>(db?: string): T;
2086
+ /**
2087
+ redlock
2088
+ */
2089
+ export declare function GetRedisLock(key: string, lockMaxActive?: number): Promise<boolean>;
2090
+ /** 对FN加锁、缓存执行 */
2091
+ export declare function excuteWithLock<T>(config: {
2092
+ /** 返回缓存key,参数=方法的参数+当前用户对象,可以用来清空缓存。 */
2093
+ key: ((...args: any[]) => string) | string;
2094
+ /** 被锁定线程是否sleep直到解锁为止? 默认true */
2095
+ lockWait?: boolean;
2096
+ /** 当设置了lockWait=true时,等待多少【毫秒】进行一次锁查询? 默认:100MS */
2097
+ lockRetryInterval?: number;
2098
+ /** 当设置了lockWait=true时,等待多少【毫秒】即视为超时,放弃本次访问?默认:永不放弃 */
2099
+ lockMaxWaitTime?: number;
2100
+ /** 错误信息 */
2101
+ errorMessage?: string;
2102
+ /** 允许的并发数,默认:1 */
2103
+ lockMaxActive?: number;
2104
+ /** 单个锁多少【毫秒】后自动释放?默认:60*1000MS */
2105
+ lockMaxTime?: number;
2106
+ }, fn__: () => Promise<T>): Promise<T>;
2107
+ /** 与缓存共用时,需要在缓存之前:有缓存则返回缓存,否则加锁执行并缓存,后续队列全部返回缓存,跳过执行 */
2108
+ export declare function MethodLock<T = any>(config: {
2109
+ /** 返回缓存key,参数=方法的参数[注意:必须和主方法的参数数量、完全一致,同时会追加一个当前用户对象]+当前用户对象,可以用来清空缓存。 */
2110
+ key: ((this: T, ...args: any[]) => string) | string;
2111
+ /** 被锁定线程是否sleep直到解锁为止? 默认true */
2112
+ lockWait?: boolean;
2113
+ /** 当设置了lockWait=true时,等待多少【毫秒】进行一次锁查询? 默认100ms */
2114
+ lockRetryInterval?: number;
2115
+ /** 当设置了lockWait=true时,等待多少【毫秒】即视为超时,放弃本次访问?默认永不放弃 */
2116
+ lockMaxWaitTime?: number;
2117
+ /** 错误信息 */
2118
+ errorMessage?: string;
2119
+ /** 允许的并发数,默认=1 */
2120
+ lockMaxActive?: number;
2121
+ /** 单个锁多少【毫秒】后自动释放?即时任务没有执行完毕或者没有主动释放锁? */
2122
+ lockMaxTime?: number;
2123
+ }): (target: T, _propertyKey: string, descriptor: PropertyDescriptor) => void;
2124
+ /** 清空方法缓存 */
2125
+ export declare function clearMethodCache(key: string): Promise<void>;
2126
+ /**
2127
+ * 执行一个方法fn,
2128
+ * 如果有缓存,则返回缓存,否则执行方法并缓存
2129
+ */
2130
+ export declare function excuteWithCache<T>(config: {
2131
+ /** 返回缓存key,参数=方法的参数+当前用户对象,可以用来清空缓存。 */
2132
+ key: string;
2133
+ /** 返回缓存清除key,参数=方法的参数+当前用户对象,可以用来批量清空缓存 */
2134
+ clearKey?: string[];
2135
+ /** 自动清空缓存的时间,单位分钟 */
2136
+ autoClearTime?: number;
2137
+ /** 随着当前用户sesion的清空而一起清空 */
2138
+ clearWithSession?: boolean;
2139
+ }, fn: () => Promise<T>): Promise<T>;
2140
+ /** 缓存注解 */
2141
+ export declare function MethodCache<T = any>(config: {
2142
+ /** 返回缓存key,参数=方法的参数[注意:必须和主方法的参数数量、完全一致,同时会追加一个当前用户对象]+当前用户对象,可以用来清空缓存。 */
2143
+ key: ((this: T, ...args: any[]) => string) | string;
2144
+ /** 返回缓存清除key,参数=方法的参数[注意:必须和主方法的参数数量、完全一致,同时会追加一个当前用户对象]+当前用户对象,可以用来批量清空缓存 */
2145
+ clearKey?: ((this: T, ...args: any[]) => string[]) | string[];
2146
+ /** 自动清空缓存的时间,单位分钟 */
2147
+ autoClearTime?: number;
2148
+ /** 随着当前用户sesion的清空而一起清空 */
2149
+ clearWithSession?: boolean;
2150
+ }): (target: T, _propertyKey: string, descriptor: PropertyDescriptor) => void;
2151
+ export {};