baja-lite 1.8.7 → 1.8.9

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 (47) hide show
  1. package/boot-remote.d.ts +1 -1
  2. package/boot-remote.js +6 -1
  3. package/boot.d.ts +1 -1
  4. package/boot.js +6 -1
  5. package/cache.d.ts +91 -0
  6. package/cache.js +515 -0
  7. package/const/index.d.ts +2 -0
  8. package/const/index.js +2 -0
  9. package/const/symbols.d.ts +73 -0
  10. package/const/symbols.js +78 -0
  11. package/const/types.d.ts +504 -0
  12. package/const/types.js +127 -0
  13. package/db/dao/format-dialects.d.ts +6 -0
  14. package/db/dao/format-dialects.js +8 -0
  15. package/db/dao/mysql.d.ts +44 -0
  16. package/db/dao/mysql.js +303 -0
  17. package/db/dao/postgresql.d.ts +44 -0
  18. package/db/dao/postgresql.js +322 -0
  19. package/db/dao/sqlite-remote.d.ts +46 -0
  20. package/db/dao/sqlite-remote.js +226 -0
  21. package/db/dao/sqlite.d.ts +41 -0
  22. package/db/dao/sqlite.js +237 -0
  23. package/db/index.d.ts +8 -0
  24. package/db/index.js +8 -0
  25. package/db/service.d.ts +778 -0
  26. package/db/service.js +1651 -0
  27. package/db/sql-template.d.ts +46 -0
  28. package/db/sql-template.js +660 -0
  29. package/db/stream-query.d.ts +607 -0
  30. package/db/stream-query.js +1626 -0
  31. package/index.d.ts +4 -1
  32. package/index.js +4 -1
  33. package/logger.d.ts +46 -0
  34. package/logger.js +35 -0
  35. package/package.json +3 -6
  36. package/sqlite.d.ts +1 -1
  37. package/sqlite.js +2 -1
  38. package/{test-mysql.js → test/test-mysql.js} +3 -2
  39. package/{test-postgresql.js → test/test-postgresql.js} +3 -2
  40. package/{test-sqlite.js → test/test-sqlite.js} +3 -2
  41. package/sql.d.ts +0 -2207
  42. package/sql.js +0 -5471
  43. /package/{test-mysql.d.ts → test/test-mysql.d.ts} +0 -0
  44. /package/{test-postgresql.d.ts → test/test-postgresql.d.ts} +0 -0
  45. /package/{test-sqlite.d.ts → test/test-sqlite.d.ts} +0 -0
  46. /package/{test-xml.d.ts → test/test-xml.d.ts} +0 -0
  47. /package/{test-xml.js → test/test-xml.js} +0 -0
@@ -0,0 +1,778 @@
1
+ import { _columns, _columnsNoId, _def, _deleteState, _fields, _ids, _index, _logicIds, _stateFileName, DBType, FieldOption } from 'baja-lite-field';
2
+ import { _ClassName, _className, _comment, _daoDBName, _dbType, _SqlOption, _sqlite_version, _tableName, _transformer, _vueName } from '../const/symbols.js';
3
+ import { Connection, DeleteMode, InsertMode, MethodOption, PageQuery, SelectMode, SelectResult, ServiceOption, SqlMapper, SyncMode, TemplateResult, MapperIfUndefined } from '../const/types.js';
4
+ import { StreamQuery } from './stream-query.js';
5
+ export declare const DB: (config: ServiceOption) => <C extends {
6
+ new (...args: any[]): {};
7
+ }>(constructor: C) => {
8
+ new (...args: any[]): {
9
+ [_tableName]: string | undefined;
10
+ [_className]: string | undefined;
11
+ [_ClassName]: string | undefined;
12
+ [_vueName]: string | undefined;
13
+ [_daoDBName]: string | undefined;
14
+ [_dbType]: DBType | undefined;
15
+ [_sqlite_version]: string | undefined;
16
+ [_SqlOption]: {
17
+ maxDeal: number;
18
+ skipUndefined: boolean;
19
+ skipNull: boolean;
20
+ skipEmptyString: boolean;
21
+ } & ServiceOption;
22
+ [_ids]: any;
23
+ [_logicIds]: any;
24
+ [_fields]: any;
25
+ [_columns]: any;
26
+ [_columnsNoId]: any;
27
+ [_index]: any;
28
+ [_def]: any;
29
+ [_comment]: string | undefined;
30
+ [_stateFileName]: any;
31
+ [_deleteState]: any;
32
+ [_transformer]: <L extends Object>(data: L, option?: MethodOption & {
33
+ finalColumns?: Set<string>;
34
+ tempColumns?: Array<string>;
35
+ insert?: boolean;
36
+ skipId?: boolean;
37
+ skipNull?: boolean;
38
+ skipUndefined?: boolean;
39
+ skipEmptyString?: boolean;
40
+ onFieldExists?: (K: string, V: any) => void;
41
+ }) => any;
42
+ };
43
+ } & C;
44
+ /**
45
+ js项目中实体类注解替代品,只要确保函数被执行即可,举例:
46
+ ```
47
+ // 声明一个class
48
+ export class AmaFuck {}
49
+ DeclareClass(AmaFuck, [
50
+ { type: "String", name: "SellerSKU" },
51
+ { type: "String", name: "SellerSKU2" },
52
+ { type: "String", name: "site" }
53
+ ]);
54
+ ```
55
+ */
56
+ export declare function DeclareClass(clz: any, FieldOptions: FieldOption[]): void;
57
+ /**
58
+ JS项目中,service注解代替,举例:
59
+ ```
60
+ // 声明一个service,注意这里的let
61
+ export let AmaService = class AmaService extends SqlService {};
62
+ AmaService = DeclareService(AmaService, {
63
+ tableName: "ama_fuck2",
64
+ clz: AmaFuck,
65
+ dbType: DBType.Sqlite,
66
+ sqliteVersion: "0.0.3"
67
+ });
68
+ ```
69
+ */
70
+ export declare function DeclareService(clz: any, config: ServiceOption): any;
71
+ /**
72
+ ## 数据库服务
73
+ ### 注解DB
74
+
75
+ ### 泛型 T,同DB注解中的clz
76
+ ** 服务中所有方法默认以该类型为准
77
+ **
78
+
79
+ */
80
+ export declare class SqlService<T extends object> {
81
+ [_tableName]?: string;
82
+ private [_className]?;
83
+ private [_ClassName]?;
84
+ private [_vueName]?;
85
+ private [_daoDBName]?;
86
+ private [_comment]?;
87
+ private [_ids]?;
88
+ private [_fields]?;
89
+ private [_columns]?;
90
+ private [_columnsNoId]?;
91
+ private [_stateFileName]?;
92
+ private [_deleteState]?;
93
+ private [_SqlOption]?;
94
+ private [_dbType]?;
95
+ private [_sqlite_version]?;
96
+ private [_index]?;
97
+ private [_def]?;
98
+ [_transformer]?: <L = T>(data: Partial<L>, option?: MethodOption & {
99
+ finalColumns?: Set<string>;
100
+ insert?: boolean;
101
+ skipId?: boolean;
102
+ skipNull?: boolean;
103
+ skipUndefined?: boolean;
104
+ skipEmptyString?: boolean;
105
+ onFieldExists?: (K: string, V: any) => void;
106
+ }) => Partial<T>;
107
+ private _insert;
108
+ /**
109
+ 0. `sync`: 同步(sqlite)或者异步(mysql、remote),影响返回值类型,默认 `异步`
110
+ 1. `data`:可是数组或者单对象
111
+ 2. `skipUndefined`: boolean; 是否不处理值为undefined的字段,默认 true
112
+ 3. `skipNull`: boolean; 是否不处理值为null的字段,默认 true
113
+ 4. `skipEmptyString`: boolean; 是否不处理值为空字符串(`注意:多个空格也算空字符串`)的字段,默认 true
114
+ 5. `maxDeal`: number; 批量处理时,每次处理多少个?默认500
115
+ 6. `tableName`: 默认使用service注解的`tableName`,可以在某个方法中覆盖
116
+ 7. `dbName`: 默认使用service注解的`dbName`,可以在某个方法中覆盖
117
+ 8. `conn`: 仅在开启事务时需要主动传入,传入示例:
118
+ ```
119
+ service.transaction(async conn => {
120
+ service.insert({conn});
121
+ });
122
+ ```
123
+ 9. `dao`: 永远不需要传入该值
124
+ 10. `mode` :默认`insert`,可选如下
125
+ 1. `insert`: 默认
126
+ 2. `insertIfNotExists`: 通过主键或者existConditionOtherThanIds字段判断数据是否存在,不存在才插入,存在则不执行
127
+ 3. `replace`: 只支持用主键判断, 存在更新, 不存在插入
128
+ 11. `existConditionOtherThanIds`: insertIfNotExists时判断同一记录的字段名称,默认情况下按照ID判断,设置existConditionOtherThanIds后,不用id
129
+ 12. `replaceWithDef` replace时,是否带入默认值? 默认true
130
+ ### 返回值是最后一次插入的主键ID,对于自增ID表适用
131
+ 1. 如果主键是自增批量操作,且期望返回所有记录的ID,那么需要设置 `option 中的 every = true`,此时效率降低
132
+ * @param {{[P in keyof T]?: T[P]}} data
133
+ * @param {MethodOption} [option]
134
+ * @memberof SqlServer
135
+ */
136
+ insert(option: MethodOption & {
137
+ data: Partial<T>;
138
+ sync?: SyncMode.Async;
139
+ mode?: InsertMode;
140
+ existConditionOtherThanIds?: (keyof T)[];
141
+ every?: boolean;
142
+ temp?: boolean;
143
+ skipUndefined?: boolean;
144
+ skipNull?: boolean;
145
+ skipEmptyString?: boolean;
146
+ maxDeal?: number;
147
+ replaceWithDef?: boolean;
148
+ }): Promise<bigint>;
149
+ insert(option: MethodOption & {
150
+ data: Partial<T>[];
151
+ sync?: SyncMode.Async;
152
+ mode?: InsertMode;
153
+ existConditionOtherThanIds?: (keyof T)[];
154
+ every?: boolean;
155
+ temp?: boolean;
156
+ skipUndefined?: boolean;
157
+ skipNull?: boolean;
158
+ skipEmptyString?: boolean;
159
+ maxDeal?: number;
160
+ replaceWithDef?: boolean;
161
+ }): Promise<bigint[]>;
162
+ insert(option: MethodOption & {
163
+ data: Partial<T>;
164
+ sync: SyncMode.Sync;
165
+ mode?: InsertMode;
166
+ existConditionOtherThanIds?: (keyof T)[];
167
+ every?: boolean;
168
+ temp?: boolean;
169
+ skipUndefined?: boolean;
170
+ skipNull?: boolean;
171
+ skipEmptyString?: boolean;
172
+ maxDeal?: number;
173
+ replaceWithDef?: boolean;
174
+ }): bigint;
175
+ insert(option: MethodOption & {
176
+ data: Partial<T>[];
177
+ sync: SyncMode.Sync;
178
+ mode?: InsertMode;
179
+ existConditionOtherThanIds?: (keyof T)[];
180
+ every?: boolean;
181
+ temp?: boolean;
182
+ skipUndefined?: boolean;
183
+ skipNull?: boolean;
184
+ skipEmptyString?: boolean;
185
+ maxDeal?: number;
186
+ replaceWithDef?: boolean;
187
+ }): bigint[];
188
+ private _update;
189
+ /**
190
+ ## 根据主键修改
191
+ 0. `sync`: 同步(sqlite)或者异步(mysql、remote),影响返回值类型,默认`异步模式`
192
+ 1. `data`:可是数组或者单对象
193
+ 2. `skipUndefined`: boolean; 是否不处理值为undefined的字段,默认 true
194
+ 3. `skipNull`: boolean; 是否不处理值为null的字段,默认 true
195
+ 4. `skipEmptyString`: boolean; 是否不处理值为空字符串(`注意:多个空格也算空字符串`)的字段,默认 true
196
+ 5. `maxDeal`: number; 批量处理时,每次处理多少个?默认500
197
+ 6. `tableName`: 默认使用service注解的`tableName`,可以在某个方法中覆盖
198
+ 7. `dbName`: 默认使用service注解的`dbName`,可以在某个方法中覆盖
199
+ 8. `conn`: 仅在开启事务时需要主动传入,传入示例:
200
+ ```
201
+ service.transaction(async conn => {
202
+ service.insert({conn});
203
+ });
204
+ ```
205
+ 9. `dao`: 永远不需要传入该值
206
+ */
207
+ update(option: MethodOption & {
208
+ data: Partial<T> | Array<Partial<T>>;
209
+ sync?: SyncMode.Async;
210
+ skipUndefined?: boolean;
211
+ skipNull?: boolean;
212
+ skipEmptyString?: boolean;
213
+ maxDeal?: number;
214
+ }): Promise<number>;
215
+ update(option: MethodOption & {
216
+ data: Partial<T> | Array<Partial<T>>;
217
+ sync: SyncMode.Sync;
218
+ skipUndefined?: boolean;
219
+ skipNull?: boolean;
220
+ skipEmptyString?: boolean;
221
+ maxDeal?: number;
222
+ }): number;
223
+ /**
224
+ ## 删除
225
+ 0. `sync`: 同步(sqlite)或者异步(mysql、remote),影响返回值类型,默认`异步模式`
226
+ 1. 支持按ID删除:可以单个ID或者ID数组 `需要实体类只有一个ID`
227
+ 2. 支持实体类删除: 用于多个ID或者按实体类某些字段删除
228
+ 3. 两种模式:`mode`=`Common` 或者 `TempTable`
229
+ 3. 如果数据多,使用 `TempTable`模式
230
+ 4. 当设置实体类的字段有 `logicDelete` ,将进行逻辑删除,除非设置 `forceDelete` = true
231
+ 5. 支持`whereSql`直接拼接,此时必须传递`whereParams`,不建议直接使用这种方式!为了简化逻辑,它不会和ID、WHERE共存,且优先级更高。且不支持 `TempTable` Mode
232
+ 6. `tableName`: 默认使用service注解的`tableName`,可以在某个方法中覆盖
233
+ 7. `dbName`: 默认使用service注解的`dbName`,可以在某个方法中覆盖
234
+ 8. `conn`: 仅在开启事务时需要主动传入,传入示例:
235
+ ```
236
+ service.transaction(async conn => {
237
+ service.insert({conn});
238
+ });
239
+ ```
240
+ 9. `dao`: 永远不需要传入该值
241
+ */
242
+ delete(option: MethodOption & {
243
+ sync?: SyncMode.Async;
244
+ id?: string | number | Array<string | number>;
245
+ where?: Partial<T> | Array<Partial<T>>;
246
+ mode?: DeleteMode;
247
+ forceDelete?: boolean;
248
+ whereSql?: string;
249
+ whereParams?: Record<string, any>;
250
+ }): Promise<number>;
251
+ delete(option: MethodOption & {
252
+ sync: SyncMode.Sync;
253
+ id?: string | number | Array<string | number>;
254
+ where?: Partial<T> | Array<Partial<T>>;
255
+ mode?: DeleteMode;
256
+ forceDelete?: boolean;
257
+ whereSql?: string;
258
+ whereParams?: Record<string, any>;
259
+ }): number;
260
+ private _template;
261
+ /**
262
+ #根据条件查询对象
263
+ ## 特点:快速、简单,可快速根据某些字段是否等于来查询返回,可以查询记录和记录数
264
+ 0. `sync`: 同步(sqlite)或者异步(mysql、remote),影响返回值类型,默认`异步模式`
265
+ 1. `templateResult`: 返回值类型断言,4种
266
+ 1. `AssertOne` 确定返回一个,如果不是一个,将报错,返回类型是T `默认`
267
+ 2. `NotSureOne` 可能返回一个,返回类型是T|null
268
+ 3. `Many` 返回多个
269
+ 4. `Count` 返回记录数
270
+ 2. 支持按ID查询:可以单个ID或者ID数组 `需要实体类只有一个ID`
271
+ 3. 支持实体类查询: 用于多个ID或者按实体类某些字段查询
272
+ 4. 两种查询方式:`mode`=`Common`(默认) 或者 `TempTable`
273
+ 5. `tableName`: 默认使用service注解的`tableName`,可以在某个方法中覆盖
274
+ 6. `dbName`: 默认使用service注解的`dbName`,可以在某个方法中覆盖
275
+ 7. `conn`: 仅在开启事务时需要主动传入,传入示例:
276
+ ```
277
+ service.transaction(async conn => {
278
+ service.insert({conn});
279
+ });
280
+ ```
281
+ 8. `dao`: 永远不需要传入该值
282
+
283
+ */
284
+ template<L = T>(option: MethodOption & {
285
+ sync: SyncMode.Sync;
286
+ templateResult?: TemplateResult.AssertOne;
287
+ id?: string | number | Array<string | number>;
288
+ where?: Partial<L> | Array<Partial<L>>;
289
+ skipUndefined?: boolean;
290
+ skipNull?: boolean;
291
+ skipEmptyString?: boolean;
292
+ mode?: SelectMode;
293
+ error?: string;
294
+ columns?: (keyof L)[];
295
+ }): L;
296
+ template<L = T>(option: MethodOption & {
297
+ sync?: SyncMode.Async;
298
+ templateResult?: TemplateResult.AssertOne;
299
+ id?: string | number | Array<string | number>;
300
+ where?: Partial<L> | Array<Partial<L>>;
301
+ skipUndefined?: boolean;
302
+ skipNull?: boolean;
303
+ skipEmptyString?: boolean;
304
+ mode?: SelectMode;
305
+ error?: string;
306
+ columns?: (keyof L)[];
307
+ }): Promise<L>;
308
+ template<L = T>(option: MethodOption & {
309
+ sync: SyncMode.Sync;
310
+ templateResult: TemplateResult.Count;
311
+ id?: string | number | Array<string | number>;
312
+ where?: Partial<L> | Array<Partial<L>>;
313
+ skipUndefined?: boolean;
314
+ skipNull?: boolean;
315
+ skipEmptyString?: boolean;
316
+ mode?: SelectMode;
317
+ error?: string;
318
+ columns?: (keyof L)[];
319
+ }): number;
320
+ template<L = T>(option: MethodOption & {
321
+ sync?: SyncMode.Async;
322
+ templateResult: TemplateResult.Count;
323
+ id?: string | number | Array<string | number>;
324
+ where?: Partial<L> | Array<Partial<L>>;
325
+ skipUndefined?: boolean;
326
+ skipNull?: boolean;
327
+ skipEmptyString?: boolean;
328
+ mode?: SelectMode;
329
+ error?: string;
330
+ columns?: (keyof L)[];
331
+ }): Promise<number>;
332
+ template<L = T>(option: MethodOption & {
333
+ sync: SyncMode.Sync;
334
+ templateResult: TemplateResult.NotSureOne;
335
+ id?: string | number | Array<string | number>;
336
+ where?: Partial<L> | Array<Partial<L>>;
337
+ skipUndefined?: boolean;
338
+ skipNull?: boolean;
339
+ skipEmptyString?: boolean;
340
+ mode?: SelectMode;
341
+ error?: string;
342
+ columns?: (keyof L)[];
343
+ }): L | null;
344
+ template<L = T>(option: MethodOption & {
345
+ sync?: SyncMode.Async;
346
+ templateResult: TemplateResult.NotSureOne;
347
+ id?: string | number | Array<string | number>;
348
+ where?: Partial<L> | Array<Partial<L>>;
349
+ skipUndefined?: boolean;
350
+ skipNull?: boolean;
351
+ skipEmptyString?: boolean;
352
+ mode?: SelectMode;
353
+ error?: string;
354
+ columns?: (keyof L)[];
355
+ }): Promise<L | null>;
356
+ template<L = T>(option: MethodOption & {
357
+ sync: SyncMode.Sync;
358
+ templateResult: TemplateResult.Many;
359
+ id?: string | number | Array<string | number>;
360
+ where?: Partial<L> | Array<Partial<L>>;
361
+ skipUndefined?: boolean;
362
+ skipNull?: boolean;
363
+ skipEmptyString?: boolean;
364
+ mode?: SelectMode;
365
+ error?: string;
366
+ columns?: (keyof L)[];
367
+ }): L[];
368
+ template<L = T>(option: MethodOption & {
369
+ sync?: SyncMode.Async;
370
+ templateResult: TemplateResult.Many;
371
+ id?: string | number | Array<string | number>;
372
+ where?: Partial<L> | Array<Partial<L>>;
373
+ skipUndefined?: boolean;
374
+ skipNull?: boolean;
375
+ skipEmptyString?: boolean;
376
+ mode?: SelectMode;
377
+ error?: string;
378
+ columns?: (keyof L)[];
379
+ }): Promise<L[]>;
380
+ private _select;
381
+ /**
382
+ # 自由查询
383
+ 0. `sync`: 同步(sqlite)或者异步(mysql、remote),影响返回值类型,默认`异步模式`
384
+ 1. `templateResult`: 返回值类型断言,6种, R表示行,C表示列,带S表示复数
385
+ 1. R_C_Assert,
386
+ 2. R_C_NotSure,
387
+ 3. R_CS_Assert,
388
+ 4. R_CS_NotSure,
389
+ 5. RS_C,
390
+ 7. RS_CS[默认]
391
+ 2. `sql` 或者 `sqlid`
392
+ 3. `params`
393
+ 4. `defValue`: One_Row_One_Column 时有效
394
+ 5. 禁止一次查询多个语句
395
+ 6. `dbName`: 默认使用service注解的`dbName`,可以在某个方法中覆盖
396
+ 7. `conn`: 仅在开启事务时需要主动传入,传入示例:
397
+ ```
398
+ service.transaction(async conn => {
399
+ service.insert({conn});
400
+ });
401
+ ```
402
+ 9. `dao`: 永远不需要传入该值
403
+ 10. `hump`: 是否将列名改为驼峰写法?默认情况下按照全局配置
404
+ 11. `mapper`: 列名-属性 映射工具,优先级高于hump
405
+ ```
406
+ // 该属性支持传入mybatis.xml中定义的resultMap块ID,或者读取sqlMapDir目录下的JSON文件.
407
+ // 注意:resultMap块ID与sql语句逻辑一致,同样是 目录.ID
408
+ // 或者自定义Mapper,自定义Mapper格式如下:
409
+ [
410
+ {columnName: 'dit_id', mapNames: ['DTID'], def: 0, convert: 转换函数}, // 列名ditid,对应属性DTID,如果没有值,将返回默认值0,其中默认值0是可选的
411
+ {columnName: 'event_id', mapNames: ['eventMainInfo', 'id'], def: 0, convert: 转换函数},// 列名event_id对应属性eventMainInfo.id,这种方式将返回嵌套的json对象,其中默认值是可选的
412
+ ]
413
+ 12. dataConvert 数据转换器
414
+ ```
415
+ dataConvert: {
416
+ fileName: 'qiniu'
417
+ }
418
+ // 表示列 fileName 按 qiniu的函数格式化
419
+ // qiniu 在项目初始化时定义
420
+ ```
421
+ */
422
+ select<L = T>(option: MethodOption & {
423
+ sync?: SyncMode.Async;
424
+ selectResult?: SelectResult.RS_CS | SelectResult.RS_C;
425
+ sqlId?: string;
426
+ sql?: string;
427
+ params?: Record<string, any>;
428
+ context?: any;
429
+ isCount?: boolean;
430
+ defValue?: L | null;
431
+ errorMsg?: string;
432
+ hump?: boolean;
433
+ mapper?: string | SqlMapper;
434
+ mapperIfUndefined?: MapperIfUndefined;
435
+ dataConvert?: Record<string, string>;
436
+ }): Promise<L[]>;
437
+ select<L = T>(option: MethodOption & {
438
+ sync?: SyncMode.Async;
439
+ selectResult: SelectResult.R_CS_Assert | SelectResult.R_C_Assert;
440
+ sqlId?: string;
441
+ sql?: string;
442
+ params?: Record<string, any>;
443
+ context?: any;
444
+ isCount?: boolean;
445
+ defValue?: L | null;
446
+ errorMsg?: string;
447
+ hump?: boolean;
448
+ mapper?: string | SqlMapper;
449
+ mapperIfUndefined?: MapperIfUndefined;
450
+ dataConvert?: Record<string, string>;
451
+ }): Promise<L>;
452
+ select<L = T>(option: MethodOption & {
453
+ sync?: SyncMode.Async;
454
+ selectResult: SelectResult.R_CS_NotSure | SelectResult.R_C_NotSure;
455
+ sqlId?: string;
456
+ sql?: string;
457
+ params?: Record<string, any>;
458
+ context?: any;
459
+ isCount?: boolean;
460
+ defValue?: L | null;
461
+ errorMsg?: string;
462
+ hump?: boolean;
463
+ mapper?: string | SqlMapper;
464
+ mapperIfUndefined?: MapperIfUndefined;
465
+ dataConvert?: Record<string, string>;
466
+ }): Promise<L | null>;
467
+ select<L = T>(option: MethodOption & {
468
+ sync: SyncMode.Sync;
469
+ selectResult?: SelectResult.RS_CS | SelectResult.RS_C;
470
+ sqlId?: string;
471
+ sql?: string;
472
+ params?: Record<string, any>;
473
+ context?: any;
474
+ isCount?: boolean;
475
+ defValue?: L | null;
476
+ errorMsg?: string;
477
+ hump?: boolean;
478
+ mapper?: string | SqlMapper;
479
+ mapperIfUndefined?: MapperIfUndefined;
480
+ dataConvert?: Record<string, string>;
481
+ }): L[];
482
+ select<L = T>(option: MethodOption & {
483
+ sync: SyncMode.Sync;
484
+ selectResult: SelectResult.R_CS_Assert | SelectResult.R_C_Assert;
485
+ sqlId?: string;
486
+ sql?: string;
487
+ params?: Record<string, any>;
488
+ context?: any;
489
+ isCount?: boolean;
490
+ defValue?: L | null;
491
+ errorMsg?: string;
492
+ hump?: boolean;
493
+ mapper?: string | SqlMapper;
494
+ mapperIfUndefined?: MapperIfUndefined;
495
+ dataConvert?: Record<string, string>;
496
+ }): L;
497
+ select<L = T>(option: MethodOption & {
498
+ sync: SyncMode.Sync;
499
+ selectResult: SelectResult.R_CS_NotSure | SelectResult.R_C_NotSure;
500
+ sqlId?: string;
501
+ sql?: string;
502
+ params?: Record<string, any>;
503
+ context?: any;
504
+ isCount?: boolean;
505
+ defValue?: L | null;
506
+ errorMsg?: string;
507
+ hump?: boolean;
508
+ mapper?: string | SqlMapper;
509
+ mapperIfUndefined?: MapperIfUndefined;
510
+ dataConvert?: Record<string, string>;
511
+ }): L | null;
512
+ /**
513
+ # 自由查询:一次执行多个SQL语句!
514
+ 0. `sync`: 同步(sqlite)或者异步(mysql、remote),影响返回值类型,默认`异步模式`
515
+ 1. `sql` 或者 `sqlid`
516
+ 2. `params`
517
+ 3. `dbName`: 默认使用service注解的`dbName`,可以在某个方法中覆盖
518
+ 4. `conn`: 仅在开启事务时需要主动传入,传入示例:
519
+ ```
520
+ service.transaction(async conn => {
521
+ service.insert({conn});
522
+ });
523
+ ```
524
+ 5. `dao`: 永远不需要传入该值
525
+ 6. `hump`: 是否将列名改为驼峰写法?默认情况下按照全局配置
526
+ 7. `mapper`: 列名-属性 映射工具,优先级高于hump
527
+ ```
528
+ // 该属性支持传入mybatis.xml中定义的resultMap块ID,或者读取sqlMapDir目录下的JSON文件(暂未实现).
529
+ // 注意:resultMap块的寻找逻辑与sql语句逻辑一致,同样是 文件名.ID
530
+ // 或者自定义Mapper,自定义Mapper格式如下:
531
+ [
532
+ // 数据列名ditid将转换为属性`DTID`,如果没有值,将返回默认值0,其中默认值0是可选的
533
+ {columnName: 'dit_id', mapNames: ['DTID'], def?: 0, convert: 转换函数},
534
+ // 数据列名event_id将转换为属性`eventMainInfo.id`,这种方式将返回嵌套的json对象,其中默认值0是可选的
535
+ {columnName: 'event_id', mapNames: ['eventMainInfo', 'id'], def?: 0, convert: 转换函数},
536
+ ]
537
+ ```
538
+ 8. `dataConvert` 数据转换器
539
+ ```
540
+ dataConvert: {
541
+ fileName: 'qiniu'
542
+ }
543
+ // 表示列 fileName 按 qiniu的函数格式化
544
+ // qiniu 在开始时定义
545
+ ```
546
+ */
547
+ selectBatch<T extends any[] = []>(option: MethodOption & {
548
+ sync?: SyncMode.Async;
549
+ selectResult?: SelectResult.RS_CS | SelectResult.RS_C;
550
+ sqlId?: string;
551
+ sql?: string;
552
+ params?: Record<string, any>;
553
+ context?: any;
554
+ hump?: boolean;
555
+ mapper?: string | SqlMapper;
556
+ mapperIfUndefined?: MapperIfUndefined;
557
+ dataConvert?: Record<string, string>;
558
+ }): Promise<{
559
+ [K in keyof T]: T[K][];
560
+ }>;
561
+ selectBatch<T extends any[] = []>(option: MethodOption & {
562
+ sync?: SyncMode.Async;
563
+ selectResult: SelectResult.R_CS_Assert | SelectResult.R_C_Assert;
564
+ sqlId?: string;
565
+ sql?: string;
566
+ params?: Record<string, any>;
567
+ context?: any;
568
+ hump?: boolean;
569
+ mapper?: string | SqlMapper;
570
+ mapperIfUndefined?: MapperIfUndefined;
571
+ dataConvert?: Record<string, string>;
572
+ }): Promise<{
573
+ [K in keyof T]: T[K];
574
+ }>;
575
+ selectBatch<T extends any[] = []>(option: MethodOption & {
576
+ sync?: SyncMode.Async;
577
+ selectResult: SelectResult.R_CS_NotSure | SelectResult.R_C_NotSure;
578
+ sqlId?: string;
579
+ sql?: string;
580
+ params?: Record<string, any>;
581
+ context?: any;
582
+ hump?: boolean;
583
+ mapper?: string | SqlMapper;
584
+ mapperIfUndefined?: MapperIfUndefined;
585
+ dataConvert?: Record<string, string>;
586
+ }): Promise<{
587
+ [K in keyof T]: T[K] | null;
588
+ }>;
589
+ selectBatch<T extends any[] = []>(option: MethodOption & {
590
+ sync: SyncMode.Sync;
591
+ selectResult?: SelectResult.RS_CS | SelectResult.RS_C;
592
+ sqlId?: string;
593
+ sql?: string;
594
+ params?: Record<string, any>;
595
+ context?: any;
596
+ hump?: boolean;
597
+ mapper?: string | SqlMapper;
598
+ mapperIfUndefined?: MapperIfUndefined;
599
+ dataConvert?: Record<string, string>;
600
+ }): {
601
+ [K in keyof T]: T[K][];
602
+ };
603
+ selectBatch<T extends any[] = []>(option: MethodOption & {
604
+ sync: SyncMode.Sync;
605
+ selectResult: SelectResult.R_CS_Assert | SelectResult.R_C_Assert;
606
+ sqlId?: string;
607
+ sql?: string;
608
+ params?: Record<string, any>;
609
+ context?: any;
610
+ hump?: boolean;
611
+ mapper?: string | SqlMapper;
612
+ mapperIfUndefined?: MapperIfUndefined;
613
+ dataConvert?: Record<string, string>;
614
+ }): {
615
+ [K in keyof T]: T[K];
616
+ };
617
+ selectBatch<T extends any[] = []>(option: MethodOption & {
618
+ sync: SyncMode.Sync;
619
+ selectResult: SelectResult.R_CS_NotSure | SelectResult.R_C_NotSure;
620
+ sqlId?: string;
621
+ sql?: string;
622
+ params?: Record<string, any>;
623
+ context?: any;
624
+ hump?: boolean;
625
+ mapper?: string | SqlMapper;
626
+ mapperIfUndefined?: MapperIfUndefined;
627
+ dataConvert?: Record<string, string>;
628
+ }): {
629
+ [K in keyof T]: T[K] | null;
630
+ };
631
+ /**
632
+ # 自由执行sql
633
+ 0. `sync`: 同步(sqlite)或者异步(mysql、remote),影响返回值类型,默认`异步模式`
634
+ 1. `sql` 或者 `sqlid`
635
+ 2. `params`
636
+ 3. `dbName`: 默认使用service注解的`dbName`,可以在某个方法中覆盖
637
+ 4. `conn`: 仅在开启事务时需要主动传入,传入示例:
638
+ ```
639
+ service.transaction(async conn => {
640
+ service.insert({conn});
641
+ });
642
+ ```
643
+ 5. `dao`: 永远不需要传入该值
644
+
645
+ */
646
+ excute<L = T>(option: MethodOption & {
647
+ sync?: SyncMode.Async;
648
+ sqlId?: string;
649
+ sql?: string;
650
+ params?: Record<string, any>;
651
+ context?: any;
652
+ }): Promise<number>;
653
+ excute<L = T>(option: MethodOption & {
654
+ sync: SyncMode.Sync;
655
+ sqlId?: string;
656
+ sql?: string;
657
+ params?: Record<string, any>;
658
+ context?: any;
659
+ }): number;
660
+ /**
661
+ ### 开启事务
662
+ ### 这里面的所有数据方法,都必须传递CONN,否则会引起
663
+ # 死锁
664
+ ### 举例说明:
665
+ #### 假设有两条代码,都操作同一个表A,其中代码1传了conn,但代码2没有传
666
+ #### 代码1:插入数据,代码2:更新数据
667
+ #### 二者操作的是不同的数据
668
+ #### 以上为前提,开始分析:
669
+ ** 当事务打开后,会创建一个连接1,开始执行代码1
670
+ ** 代码1执行完毕,由于`transaction`方法尚未结束,所以不会提交事务。
671
+ ** 代码1是插入数据,因此会导致全表锁
672
+ ** 代码2开始执行,由于没有传入conn,所以会创建一个新的连接2
673
+ ** 代码2执行时,会等待连接1的锁释放
674
+ ** 但是连接1的锁是在`transaction`方法执行完后才会提交并释放锁,这导致死循环,开启死锁
675
+ **
676
+ */
677
+ transaction<L = T>(option: MethodOption & {
678
+ sync?: SyncMode.Async;
679
+ fn: (conn: Connection) => Promise<L>;
680
+ }): Promise<L | null>;
681
+ transaction<L = T>(option: MethodOption & {
682
+ sync: SyncMode.Sync;
683
+ fn: (conn: Connection) => L;
684
+ }): L | null;
685
+ stream<L extends object = T>(): StreamQuery<L>;
686
+ page<L = T>(option: MethodOption & {
687
+ sync?: SyncMode.Async;
688
+ sqlId: string;
689
+ context?: any;
690
+ params: Record<string, any>;
691
+ pageSize?: number;
692
+ pageNumber?: number;
693
+ limitSelf?: boolean;
694
+ countSelf?: boolean;
695
+ sum?: boolean;
696
+ sumSelf?: boolean;
697
+ sortName?: string;
698
+ sortType?: string;
699
+ hump?: boolean;
700
+ mapper?: string | SqlMapper;
701
+ mapperIfUndefined?: MapperIfUndefined;
702
+ dataConvert?: Record<string, string>;
703
+ }): Promise<PageQuery<L>>;
704
+ page<L = T>(option: MethodOption & {
705
+ sync: SyncMode.Sync;
706
+ sqlId: string;
707
+ context?: any;
708
+ params: Record<string, any>;
709
+ pageSize?: number;
710
+ pageNumber?: number;
711
+ limitSelf?: boolean;
712
+ countSelf?: boolean;
713
+ sum?: boolean;
714
+ sumSelf?: boolean;
715
+ sortName?: string;
716
+ sortType?: string;
717
+ hump?: boolean;
718
+ mapper?: string | SqlMapper;
719
+ mapperIfUndefined?: MapperIfUndefined;
720
+ dataConvert?: Record<string, string>;
721
+ }): PageQuery<L>;
722
+ /**
723
+ * 导出数据,可以为EJS-EXCEL直接使用
724
+ * @param list
725
+ * @returns
726
+ */
727
+ exp<L = T>(list: L[]): {
728
+ title: string | undefined;
729
+ titleSpan: string;
730
+ columnTitles: string[];
731
+ datas: any[][];
732
+ };
733
+ /**
734
+ * 导入数据的模板
735
+ * @returns
736
+ */
737
+ imp(): {
738
+ title: string | undefined;
739
+ titleSpan: string;
740
+ columnTitles: string[];
741
+ };
742
+ /**
743
+ * 初始化表结构
744
+ * 只有sqlite、sqliteremote需要
745
+ * force: 是否强制,默认false, 强制时会删除再创建
746
+ * @param option
747
+ */
748
+ init(option?: MethodOption & {
749
+ sync?: SyncMode.Async;
750
+ force?: boolean;
751
+ }): Promise<void>;
752
+ init(option: MethodOption & {
753
+ sync: SyncMode.Sync;
754
+ force?: boolean;
755
+ }): void;
756
+ close(option?: MethodOption & {
757
+ sync?: SyncMode.Async;
758
+ }): Promise<void>;
759
+ close(option: MethodOption & {
760
+ sync: SyncMode.Sync;
761
+ }): void;
762
+ /**
763
+ #创建表
764
+ ** `tableName` 表名称
765
+ ** `temp` 是否是临时表,默认true
766
+ ** `columns` 字符串数组,默认是当前实体类全部字段,通过`columns` 可以创建部分字段临时表
767
+ ** `id` 表的主键设置 4种:
768
+ 1. `auto`: `columns`中已经在当前实体类配置的ID作为主键 `默认`
769
+ 2. `all`: `columns`中所有字段全部当主键
770
+ 3. `none`: 没有主键
771
+ 4. 自定义字段名称:字符串数组
772
+ ** `index` 表的索引,设置方式同ID
773
+ */
774
+ private _createTable;
775
+ private _matchSqlid;
776
+ private _setParam;
777
+ private _generSql;
778
+ }