baja-lite 1.8.8 → 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.
- package/boot-remote.d.ts +1 -1
- package/boot-remote.js +6 -1
- package/boot.d.ts +1 -1
- package/boot.js +6 -1
- package/cache.d.ts +91 -0
- package/cache.js +515 -0
- package/const/index.d.ts +2 -0
- package/const/index.js +2 -0
- package/const/symbols.d.ts +73 -0
- package/const/symbols.js +78 -0
- package/const/types.d.ts +504 -0
- package/const/types.js +127 -0
- package/db/dao/format-dialects.d.ts +6 -0
- package/db/dao/format-dialects.js +8 -0
- package/db/dao/mysql.d.ts +44 -0
- package/db/dao/mysql.js +303 -0
- package/db/dao/postgresql.d.ts +44 -0
- package/db/dao/postgresql.js +322 -0
- package/db/dao/sqlite-remote.d.ts +46 -0
- package/db/dao/sqlite-remote.js +226 -0
- package/db/dao/sqlite.d.ts +41 -0
- package/db/dao/sqlite.js +237 -0
- package/db/index.d.ts +8 -0
- package/db/index.js +8 -0
- package/db/service.d.ts +778 -0
- package/db/service.js +1651 -0
- package/db/sql-template.d.ts +46 -0
- package/db/sql-template.js +660 -0
- package/db/stream-query.d.ts +607 -0
- package/db/stream-query.js +1626 -0
- package/index.d.ts +4 -1
- package/index.js +4 -1
- package/logger.d.ts +46 -0
- package/logger.js +35 -0
- package/package.json +1 -1
- package/sqlite.d.ts +1 -1
- package/sqlite.js +2 -1
- package/{test-mysql.js → test/test-mysql.js} +3 -2
- package/{test-postgresql.js → test/test-postgresql.js} +3 -2
- package/{test-sqlite.js → test/test-sqlite.js} +3 -2
- package/sql.d.ts +0 -2222
- package/sql.js +0 -5503
- /package/{test-mysql.d.ts → test/test-mysql.d.ts} +0 -0
- /package/{test-postgresql.d.ts → test/test-postgresql.d.ts} +0 -0
- /package/{test-sqlite.d.ts → test/test-sqlite.d.ts} +0 -0
- /package/{test-xml.d.ts → test/test-xml.d.ts} +0 -0
- /package/{test-xml.js → test/test-xml.js} +0 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 全局 Symbol 注册表,跨文件共享。
|
|
3
|
+
*
|
|
4
|
+
* 这些 Symbol 大多用作 `globalThis[symbol]` 的键(保存 dao 实例、配置、缓存等运行时状态),
|
|
5
|
+
* 或者用作类的私有字段键(如 `_inTransaction` / `_daoConnection`)。
|
|
6
|
+
*
|
|
7
|
+
* 标 `@internal` 的项是包内部约定,外部不应当读写——但因为跨文件共享必须 export,
|
|
8
|
+
* 在 TS 里没法严格强制访问范围;保留 `_` 前缀作为风格提示。
|
|
9
|
+
*/
|
|
10
|
+
/** @internal 实体的表名 */
|
|
11
|
+
export declare const _tableName: unique symbol;
|
|
12
|
+
/** @internal 实体绑定的 dbName(多数据源时用) */
|
|
13
|
+
export declare const _daoDBName: unique symbol;
|
|
14
|
+
/** @internal 实体类名(小驼峰) */
|
|
15
|
+
export declare const _className: unique symbol;
|
|
16
|
+
/** @internal 实体类名(大驼峰) */
|
|
17
|
+
export declare const _ClassName: unique symbol;
|
|
18
|
+
/** @internal 实体类名(短横线) */
|
|
19
|
+
export declare const _vueName: unique symbol;
|
|
20
|
+
/** @internal 实体->数据转换器,由 @DB 注入 */
|
|
21
|
+
export declare const _transformer: unique symbol;
|
|
22
|
+
/** @internal 表注释 */
|
|
23
|
+
export declare const _comment: unique symbol;
|
|
24
|
+
/** @internal SqlCache 实例,挂在 globalThis */
|
|
25
|
+
export declare const _sqlCache: unique symbol;
|
|
26
|
+
/** @internal DAO 注册表 {dbType: {dbName: Dao}},挂在 globalThis */
|
|
27
|
+
export declare const _dao: unique symbol;
|
|
28
|
+
/** 主数据源(无名)的占位 key —— 注意:这是字符串,不是 Symbol。 */
|
|
29
|
+
export declare const _primaryDB = "______primaryDB_______";
|
|
30
|
+
/** @internal 实体绑定的 dbType */
|
|
31
|
+
export declare const _dbType: unique symbol;
|
|
32
|
+
/** @internal sqlite 表版本号(用于自动迁移) */
|
|
33
|
+
export declare const _sqlite_version: unique symbol;
|
|
34
|
+
/** @internal Connection 内部持有的真实驱动连接对象 */
|
|
35
|
+
export declare const _daoConnection: unique symbol;
|
|
36
|
+
/** @internal Connection 是否在事务中 */
|
|
37
|
+
export declare const _inTransaction: unique symbol;
|
|
38
|
+
/** @internal Dao 内部持有的真实驱动 pool/db 对象 */
|
|
39
|
+
export declare const _daoDB: unique symbol;
|
|
40
|
+
/** @internal SqliteRemote 的远端 db 名 */
|
|
41
|
+
export declare const _sqliteRemoteName: unique symbol;
|
|
42
|
+
/** @internal @DB 注解写入的 ServiceOption */
|
|
43
|
+
export declare const _SqlOption: unique symbol;
|
|
44
|
+
/** 数据转换函数注册表(boot 时传入),挂在 globalThis */
|
|
45
|
+
export declare const _DataConvert: unique symbol;
|
|
46
|
+
/** 模板渲染上下文(boot 时传入),挂在 globalThis */
|
|
47
|
+
export declare const _Context: unique symbol;
|
|
48
|
+
/** MySQL keepalive 间隔(毫秒),挂在 globalThis */
|
|
49
|
+
export declare const _MysqlKeepAliveTime: unique symbol;
|
|
50
|
+
/** @internal XML resultMap 注册表 */
|
|
51
|
+
export declare const _resultMap: unique symbol;
|
|
52
|
+
/** @internal sqlId -> resultMap 映射 */
|
|
53
|
+
export declare const _resultMap_SQLID: unique symbol;
|
|
54
|
+
/** 枚举映射(boot 时传入),挂在 globalThis */
|
|
55
|
+
export declare const _enum: unique symbol;
|
|
56
|
+
/** 全局配置(boot 时聚合),挂在 globalThis */
|
|
57
|
+
export declare const _GlobalSqlOption: unique symbol;
|
|
58
|
+
/** EventBus,挂在 globalThis */
|
|
59
|
+
export declare const _EventBus: unique symbol;
|
|
60
|
+
/** LoggerService 实例,挂在 globalThis */
|
|
61
|
+
export declare const _LoggerService: unique symbol;
|
|
62
|
+
/** 内存缓存 LRU 存储(key → entry),挂在 globalThis */
|
|
63
|
+
export declare const _memCache: unique symbol;
|
|
64
|
+
/** 内存缓存 single-flight 表(key → in-flight Promise),挂在 globalThis */
|
|
65
|
+
export declare const _memInflight: unique symbol;
|
|
66
|
+
/** 延迟加载的 node:path 模块,挂在 globalThis */
|
|
67
|
+
export declare const _path: unique symbol;
|
|
68
|
+
/** 延迟加载的 node:fs 模块,挂在 globalThis */
|
|
69
|
+
export declare const _fs: unique symbol;
|
|
70
|
+
/** MySQL/Postgres keepalive 默认间隔(30 秒) */
|
|
71
|
+
export declare const DEFAULT_KEEPALIVE_INTERVAL = 30000;
|
|
72
|
+
/** 默认批量处理数量 */
|
|
73
|
+
export declare const DEFAULT_MAX_DEAL = 500;
|
package/const/symbols.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 全局 Symbol 注册表,跨文件共享。
|
|
3
|
+
*
|
|
4
|
+
* 这些 Symbol 大多用作 `globalThis[symbol]` 的键(保存 dao 实例、配置、缓存等运行时状态),
|
|
5
|
+
* 或者用作类的私有字段键(如 `_inTransaction` / `_daoConnection`)。
|
|
6
|
+
*
|
|
7
|
+
* 标 `@internal` 的项是包内部约定,外部不应当读写——但因为跨文件共享必须 export,
|
|
8
|
+
* 在 TS 里没法严格强制访问范围;保留 `_` 前缀作为风格提示。
|
|
9
|
+
*/
|
|
10
|
+
/** @internal 实体的表名 */
|
|
11
|
+
export const _tableName = Symbol('tableName');
|
|
12
|
+
/** @internal 实体绑定的 dbName(多数据源时用) */
|
|
13
|
+
export const _daoDBName = Symbol('dbName');
|
|
14
|
+
/** @internal 实体类名(小驼峰) */
|
|
15
|
+
export const _className = Symbol('className');
|
|
16
|
+
/** @internal 实体类名(大驼峰) */
|
|
17
|
+
export const _ClassName = Symbol('ClassName');
|
|
18
|
+
/** @internal 实体类名(短横线) */
|
|
19
|
+
export const _vueName = Symbol('vueName');
|
|
20
|
+
/** @internal 实体->数据转换器,由 @DB 注入 */
|
|
21
|
+
export const _transformer = Symbol('transformer');
|
|
22
|
+
/** @internal 表注释 */
|
|
23
|
+
export const _comment = Symbol('comment');
|
|
24
|
+
/** @internal SqlCache 实例,挂在 globalThis */
|
|
25
|
+
export const _sqlCache = Symbol('sqlMap');
|
|
26
|
+
/** @internal DAO 注册表 {dbType: {dbName: Dao}},挂在 globalThis */
|
|
27
|
+
export const _dao = Symbol('dao');
|
|
28
|
+
/** 主数据源(无名)的占位 key —— 注意:这是字符串,不是 Symbol。 */
|
|
29
|
+
export const _primaryDB = '______primaryDB_______';
|
|
30
|
+
/** @internal 实体绑定的 dbType */
|
|
31
|
+
export const _dbType = Symbol('dbType');
|
|
32
|
+
/** @internal sqlite 表版本号(用于自动迁移) */
|
|
33
|
+
export const _sqlite_version = Symbol('sqlite_version');
|
|
34
|
+
/** @internal Connection 内部持有的真实驱动连接对象 */
|
|
35
|
+
export const _daoConnection = Symbol('daoConnection');
|
|
36
|
+
/** @internal Connection 是否在事务中 */
|
|
37
|
+
export const _inTransaction = Symbol('inTransaction');
|
|
38
|
+
/** @internal Dao 内部持有的真实驱动 pool/db 对象 */
|
|
39
|
+
export const _daoDB = Symbol('daoDB');
|
|
40
|
+
/** @internal SqliteRemote 的远端 db 名 */
|
|
41
|
+
export const _sqliteRemoteName = Symbol('sqliteRemoteName');
|
|
42
|
+
/** @internal @DB 注解写入的 ServiceOption */
|
|
43
|
+
export const _SqlOption = Symbol('SqlOption');
|
|
44
|
+
/** 数据转换函数注册表(boot 时传入),挂在 globalThis */
|
|
45
|
+
export const _DataConvert = Symbol('DataConvert');
|
|
46
|
+
/** 模板渲染上下文(boot 时传入),挂在 globalThis */
|
|
47
|
+
export const _Context = Symbol('Context');
|
|
48
|
+
/** MySQL keepalive 间隔(毫秒),挂在 globalThis */
|
|
49
|
+
export const _MysqlKeepAliveTime = Symbol('MysqlKeepAliveTime');
|
|
50
|
+
/** @internal XML resultMap 注册表 */
|
|
51
|
+
export const _resultMap = Symbol('resultMap');
|
|
52
|
+
/** @internal sqlId -> resultMap 映射 */
|
|
53
|
+
export const _resultMap_SQLID = Symbol('resultMap_SQLID');
|
|
54
|
+
/** 枚举映射(boot 时传入),挂在 globalThis */
|
|
55
|
+
export const _enum = Symbol('_enum');
|
|
56
|
+
/** 全局配置(boot 时聚合),挂在 globalThis */
|
|
57
|
+
export const _GlobalSqlOption = Symbol('GlobalSqlOption');
|
|
58
|
+
/** EventBus,挂在 globalThis */
|
|
59
|
+
export const _EventBus = Symbol('EventBus');
|
|
60
|
+
/** LoggerService 实例,挂在 globalThis */
|
|
61
|
+
export const _LoggerService = Symbol('LoggerService');
|
|
62
|
+
/** 内存缓存 LRU 存储(key → entry),挂在 globalThis */
|
|
63
|
+
export const _memCache = Symbol('memCache');
|
|
64
|
+
/** 内存缓存 single-flight 表(key → in-flight Promise),挂在 globalThis */
|
|
65
|
+
export const _memInflight = Symbol('memInflight');
|
|
66
|
+
/** 延迟加载的 node:path 模块,挂在 globalThis */
|
|
67
|
+
export const _path = Symbol('path');
|
|
68
|
+
/** 延迟加载的 node:fs 模块,挂在 globalThis */
|
|
69
|
+
export const _fs = Symbol('fs');
|
|
70
|
+
// ===== 常量 =====
|
|
71
|
+
/** MySQL/Postgres keepalive 默认间隔(30 秒) */
|
|
72
|
+
export const DEFAULT_KEEPALIVE_INTERVAL = 30000;
|
|
73
|
+
/** 默认批量处理数量 */
|
|
74
|
+
export const DEFAULT_MAX_DEAL = 500;
|
|
75
|
+
// 初始化 globalThis 上的 _resultMap_SQLID(原 sql.ts 文件顶层的副作用语句)
|
|
76
|
+
if (globalThis[_resultMap_SQLID] === undefined) {
|
|
77
|
+
globalThis[_resultMap_SQLID] = {};
|
|
78
|
+
}
|
package/const/types.d.ts
ADDED
|
@@ -0,0 +1,504 @@
|
|
|
1
|
+
import { DBType, EnumMap } from 'baja-lite-field';
|
|
2
|
+
import { XML } from '../convert-xml.js';
|
|
3
|
+
import { LogLevel, LoggerService } from '../logger.js';
|
|
4
|
+
import { _daoConnection, _daoDB, _inTransaction } from '../const/symbols.js';
|
|
5
|
+
export declare enum MapperIfUndefined {
|
|
6
|
+
Null = 0,
|
|
7
|
+
Skip = 1,
|
|
8
|
+
Zero = 2,
|
|
9
|
+
EmptyString = 3
|
|
10
|
+
}
|
|
11
|
+
export declare enum SyncMode {
|
|
12
|
+
/** 同步执行 */
|
|
13
|
+
Sync = 0,
|
|
14
|
+
/** 异步执行 */
|
|
15
|
+
Async = 1
|
|
16
|
+
}
|
|
17
|
+
export declare enum InsertMode {
|
|
18
|
+
/**
|
|
19
|
+
# 默认使用
|
|
20
|
+
** 支持单个、批量,语法 `INSERT INTO XX VALUES (第一条数据), (第二条数据);`
|
|
21
|
+
** 批量执行有性能优势,但无法利用数据库的sql预编译功能
|
|
22
|
+
*/
|
|
23
|
+
Insert = 0,
|
|
24
|
+
/**
|
|
25
|
+
# 利用临时表
|
|
26
|
+
## 执行步骤
|
|
27
|
+
1. 建立临时表(从正式表复制)
|
|
28
|
+
2. 数据全部进入临时表
|
|
29
|
+
3. 临时表数据转移到正式表: `INSERT INTO 正式表 SELECT * FROM 临时表`
|
|
30
|
+
4. 删除临时表
|
|
31
|
+
## 注意
|
|
32
|
+
1. 适用于:主键不会冲突、非自增
|
|
33
|
+
2. 临时表的结构复制正式表
|
|
34
|
+
*/
|
|
35
|
+
InsertWithTempTable = 1,
|
|
36
|
+
/**
|
|
37
|
+
* 如果不存在则插入
|
|
38
|
+
* 来源是数据库,根据ID或者指定字段查询
|
|
39
|
+
*/
|
|
40
|
+
InsertIfNotExists = 2,
|
|
41
|
+
/**
|
|
42
|
+
# 插入或者更新
|
|
43
|
+
1. 判断依据是主键,来源是从数据库查询
|
|
44
|
+
*/
|
|
45
|
+
Replace = 3
|
|
46
|
+
}
|
|
47
|
+
export declare enum DeleteMode {
|
|
48
|
+
/**
|
|
49
|
+
##常规删除 默认
|
|
50
|
+
### 例一
|
|
51
|
+
`DELETE FROM WHERE (id = 1) OR (id = 2)`
|
|
52
|
+
### 例二
|
|
53
|
+
`DELETE FROM WHERE (id = 1 AND idx = 11) OR (id = 2 AND idx = 22)`
|
|
54
|
+
*/
|
|
55
|
+
Common = 0,
|
|
56
|
+
TempTable = 1
|
|
57
|
+
}
|
|
58
|
+
export declare enum SelectMode {
|
|
59
|
+
/**
|
|
60
|
+
##常规 默认
|
|
61
|
+
### 例一
|
|
62
|
+
`SELECT * FROM WHERE (id = 1) OR (id = 2)`
|
|
63
|
+
### 例二
|
|
64
|
+
`SELECT * FROM WHERE (id = 1 AND idx = 11) OR (id = 2 AND idx = 22)`
|
|
65
|
+
*/
|
|
66
|
+
Common = 0,
|
|
67
|
+
TempTable = 1
|
|
68
|
+
}
|
|
69
|
+
export declare enum TemplateResult {
|
|
70
|
+
/** 确定返回一条记录,如果不是一个,将报错,返回类型是T */
|
|
71
|
+
AssertOne = 0,
|
|
72
|
+
/** 可能返回一条记录,返回类型是T|null */
|
|
73
|
+
NotSureOne = 1,
|
|
74
|
+
/** 返回多条记录 */
|
|
75
|
+
Many = 2,
|
|
76
|
+
/** 仅查询记录数量 */
|
|
77
|
+
Count = 3
|
|
78
|
+
}
|
|
79
|
+
export declare enum SelectResult {
|
|
80
|
+
/** 一行一列 确定非空 */
|
|
81
|
+
R_C_Assert = 0,
|
|
82
|
+
/** 一行一列 可能空 */
|
|
83
|
+
R_C_NotSure = 1,
|
|
84
|
+
/** 一行多列 确定非空 */
|
|
85
|
+
R_CS_Assert = 2,
|
|
86
|
+
/** 一行多列 可能空 */
|
|
87
|
+
R_CS_NotSure = 3,
|
|
88
|
+
/** 多行一列 */
|
|
89
|
+
RS_C = 4,
|
|
90
|
+
/** 多行多列 */
|
|
91
|
+
RS_CS = 5
|
|
92
|
+
}
|
|
93
|
+
export declare enum ColumnMode {
|
|
94
|
+
NONE = 0,
|
|
95
|
+
HUMP = 1
|
|
96
|
+
}
|
|
97
|
+
export declare const SqliteMemory = ":memory:";
|
|
98
|
+
export declare const _defOption: {
|
|
99
|
+
maxDeal: number;
|
|
100
|
+
skipUndefined: boolean;
|
|
101
|
+
skipNull: boolean;
|
|
102
|
+
skipEmptyString: boolean;
|
|
103
|
+
};
|
|
104
|
+
/** @internal SqlService 方法的通用选项(每个方法都有的几个字段) */
|
|
105
|
+
export interface MethodOption {
|
|
106
|
+
tableName?: string;
|
|
107
|
+
/** 数据库、连接名称,对于MYSQL、mongo,适用于多数据源,对于sqlite,适用于不同的数据库文件 */
|
|
108
|
+
dbName?: string;
|
|
109
|
+
dbType?: DBType;
|
|
110
|
+
/** 调用时,永远不需要传
|
|
111
|
+
* @deprecated
|
|
112
|
+
* */
|
|
113
|
+
dao?: Dao;
|
|
114
|
+
/** 调用时,仅在开启事务时需要主动传入,传入方式: */
|
|
115
|
+
conn?: Connection | null;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
数据服务注解
|
|
119
|
+
@internal 由 @DB 装饰器消费
|
|
120
|
+
*/
|
|
121
|
+
export interface ServiceOption {
|
|
122
|
+
/** 增改忽略Undefined */
|
|
123
|
+
skipUndefined?: boolean;
|
|
124
|
+
/** 增改忽略NULL */
|
|
125
|
+
skipNull?: boolean;
|
|
126
|
+
/** 增改忽略空字符串 */
|
|
127
|
+
skipEmptyString?: boolean;
|
|
128
|
+
/** 批量增改时,每次执行最多处理的记录数量 */
|
|
129
|
+
maxDeal?: number;
|
|
130
|
+
tableName?: string;
|
|
131
|
+
/** 数据库、连接名称,对于MYSQL、mongo,适用于多数据源,对于sqlite,适用于不同的数据库文件 */
|
|
132
|
+
dbName?: string;
|
|
133
|
+
/** 调用时,永远不需要传
|
|
134
|
+
* @deprecated
|
|
135
|
+
* */
|
|
136
|
+
dao?: Dao;
|
|
137
|
+
/** 调用时,仅在开启事务时需要主动传入,传入方式: */
|
|
138
|
+
conn?: Connection | null;
|
|
139
|
+
/** 对应的实体类,必须是Class */
|
|
140
|
+
clz?: any;
|
|
141
|
+
/** 默认mysql */
|
|
142
|
+
dbType?: DBType;
|
|
143
|
+
/** SQLite版本以及升级为该版本时需要执行的SQL,初始版本为0.0.1,切记每个位置不要变为两位数*/
|
|
144
|
+
sqliteVersion?: string;
|
|
145
|
+
/** 备注 */
|
|
146
|
+
comment?: string;
|
|
147
|
+
}
|
|
148
|
+
export type SqlMapper = {
|
|
149
|
+
columnName: string;
|
|
150
|
+
mapNames: string[];
|
|
151
|
+
def?: any;
|
|
152
|
+
convert?: (data: any) => any;
|
|
153
|
+
}[];
|
|
154
|
+
export type SqlMappers = Record<string, SqlMapper>;
|
|
155
|
+
export type SqlModel = Record<string, string | ((options: {
|
|
156
|
+
ctx?: any;
|
|
157
|
+
isCount?: boolean;
|
|
158
|
+
isSum?: boolean;
|
|
159
|
+
limitStart?: number;
|
|
160
|
+
limitEnd?: number;
|
|
161
|
+
sortName?: string;
|
|
162
|
+
sortType?: string;
|
|
163
|
+
params?: any;
|
|
164
|
+
}) => string)>;
|
|
165
|
+
/** @internal 历史遗留:和 SqlModel 几乎相同,但额外允许 XML[](XML 解析后的中间格式)。新代码请用 SqlModel。 */
|
|
166
|
+
export type _SqlModel = Record<string, string | ((options: {
|
|
167
|
+
ctx?: any;
|
|
168
|
+
isCount?: boolean;
|
|
169
|
+
isSum?: boolean;
|
|
170
|
+
limitStart?: number;
|
|
171
|
+
limitEnd?: number;
|
|
172
|
+
sortName?: string;
|
|
173
|
+
sortType?: string;
|
|
174
|
+
params?: any;
|
|
175
|
+
}) => string) | XML[]>;
|
|
176
|
+
/**
|
|
177
|
+
# 全局行为配置文件
|
|
178
|
+
### `sqlDir?: string;` 数据库查询语句存放目录.存放格式为 export.default 的js、ts, 存放内容满足格式:
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
interface SqlModel {
|
|
182
|
+
[key: string]: string | ((params: { [k: string]: any }, context: any, isCount?: boolean) => string)
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
可以继承该接口来约束格式
|
|
186
|
+
*/
|
|
187
|
+
export interface GlobalSqlOptionForWeb {
|
|
188
|
+
/** 增改忽略Undefined */
|
|
189
|
+
skipUndefined?: boolean;
|
|
190
|
+
/** 增改忽略NULL */
|
|
191
|
+
skipNull?: boolean;
|
|
192
|
+
/** 增改忽略空字符串 */
|
|
193
|
+
skipEmptyString?: boolean;
|
|
194
|
+
/** 批量增改时,每次执行最多处理的记录数量 */
|
|
195
|
+
maxDeal?: number;
|
|
196
|
+
/** 内存缓存的 LRU 上限(@MethodCache + storage: 'memory')。默认 10000。 */
|
|
197
|
+
memCacheMaxSize?: number;
|
|
198
|
+
SqliteRemote?: {
|
|
199
|
+
/**
|
|
200
|
+
## 单一数据源
|
|
201
|
+
```
|
|
202
|
+
db: 'd:/1.db'
|
|
203
|
+
```
|
|
204
|
+
## 多数据源:传入多个连接配置
|
|
205
|
+
```
|
|
206
|
+
db: {
|
|
207
|
+
db1: 'd:/1.db',
|
|
208
|
+
db2: 'd:/2.db'
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
不支持 `SqliteMemory`
|
|
212
|
+
*/
|
|
213
|
+
db?: Record<string, string> | string;
|
|
214
|
+
/** 远程SQLITE接口实现,适用于Electron, 采用Ipc 的handel机制实现 */
|
|
215
|
+
service: SqliteRemoteInterface;
|
|
216
|
+
};
|
|
217
|
+
/** 日志等级 */
|
|
218
|
+
log?: LogLevel[] | LogLevel;
|
|
219
|
+
/**
|
|
220
|
+
作用与sqlDir类似,不同在于sqlMap`不需要`目录,而是直接指定一个sqlModel对象,对象的格式和sqlDir的文件内容一样。
|
|
221
|
+
** 适用于简单使用
|
|
222
|
+
*/
|
|
223
|
+
sqlMap?: SqlModel;
|
|
224
|
+
/**
|
|
225
|
+
作用与sqlFnDir类似,不同在于sqlFNMap`不需要`目录,而是直接指定一个 Record<string, string>,对象的格式和sqlFnDir的文件内容一样。
|
|
226
|
+
** 适用于简单使用
|
|
227
|
+
*/
|
|
228
|
+
sqlFNMap?: Record<string, string>;
|
|
229
|
+
/**
|
|
230
|
+
// 第一个元素=列名,第二个元素是属性路径,
|
|
231
|
+
[
|
|
232
|
+
['dit_id', ['id']], // 列名ditid,对应属性id
|
|
233
|
+
['event_id', ['eventMainInfo', 'id']] // 列名event_id对应属性eventMainInfo.id
|
|
234
|
+
]
|
|
235
|
+
*/
|
|
236
|
+
sqlMapperMap?: SqlMappers;
|
|
237
|
+
/** 提供的枚举MAP */
|
|
238
|
+
enums?: EnumMap;
|
|
239
|
+
/**
|
|
240
|
+
* `列名与属性映射` 是否自动将下划线转为驼峰,默认NONE,即不转.
|
|
241
|
+
* 当设置为columnMode.HUMP时,切记将代码生成器中属性名称改对
|
|
242
|
+
* # 自定义sql查询时,无法自动转换哦,可使用标签转换:
|
|
243
|
+
*```
|
|
244
|
+
SELECT
|
|
245
|
+
* {{#hump}} seller_sku2, seller_sku {{/hump}}
|
|
246
|
+
* ```
|
|
247
|
+
* 转换为
|
|
248
|
+
*```
|
|
249
|
+
SELECT
|
|
250
|
+
* {{#hump}} seller_sku2 sellerSku2, seller_sku sellerSku {{/hump}}
|
|
251
|
+
* ```
|
|
252
|
+
*/
|
|
253
|
+
columnMode?: ColumnMode;
|
|
254
|
+
/** 对于WEB模式,默认为SqliteRemote */
|
|
255
|
+
dbType?: DBType;
|
|
256
|
+
/**
|
|
257
|
+
* * 数据转换器,用于service的select、page方法,以及stream查询
|
|
258
|
+
* * 例如
|
|
259
|
+
* ```
|
|
260
|
+
* dataConvert: {
|
|
261
|
+
* // 使用时,传入qiniu和列名,将根据列名对应的值生成URL
|
|
262
|
+
* qiniu: data => qiniuConvertUrl(data)
|
|
263
|
+
* }
|
|
264
|
+
* ```
|
|
265
|
+
*/
|
|
266
|
+
dataConvert?: Record<string, (data: any) => any>;
|
|
267
|
+
/** 公开上下文 */
|
|
268
|
+
ctx?: any;
|
|
269
|
+
/** 日志服务 */
|
|
270
|
+
logger?: LoggerService;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
# 全局行为配置文件
|
|
274
|
+
MYSQL编码: 'utf8mb4', utf8mb4_general_ci'
|
|
275
|
+
### `sqlDir?: string;` 数据库查询语句存放目录.存放格式为 export.default 的js、ts, 存放内容满足格式:
|
|
276
|
+
|
|
277
|
+
```
|
|
278
|
+
interface SqlModel {
|
|
279
|
+
[key: string]: string | ((params: { [k: string]: any }, context: any, isCount?: boolean) => string)
|
|
280
|
+
}
|
|
281
|
+
```
|
|
282
|
+
可以继承该接口来约束格式
|
|
283
|
+
*/
|
|
284
|
+
export interface GlobalSqlOption extends GlobalSqlOptionForWeb {
|
|
285
|
+
/**
|
|
286
|
+
初始化MYSQL链接 支持多数据源
|
|
287
|
+
## 单一数据源: 直接传入Mysql2的连接配置
|
|
288
|
+
[MYSQL初始化文档](https://github.com/mysqljs/mysql#connection-options)
|
|
289
|
+
```
|
|
290
|
+
Mysql: {
|
|
291
|
+
host: '127.0.0.1',
|
|
292
|
+
...
|
|
293
|
+
}
|
|
294
|
+
```
|
|
295
|
+
## 多数据源:传入多个Mysql2的连接配置
|
|
296
|
+
```
|
|
297
|
+
Mysql: {
|
|
298
|
+
db1: {
|
|
299
|
+
host: '127.0.0.1',
|
|
300
|
+
...
|
|
301
|
+
},
|
|
302
|
+
db2: {
|
|
303
|
+
host: '127.0.0.1',
|
|
304
|
+
...
|
|
305
|
+
},
|
|
306
|
+
...
|
|
307
|
+
}
|
|
308
|
+
```
|
|
309
|
+
*/
|
|
310
|
+
Mysql?: Record<string, Record<string, any>> | Record<string, any>;
|
|
311
|
+
/**
|
|
312
|
+
* MYSQL保持心跳的间隔,默认30秒
|
|
313
|
+
*/
|
|
314
|
+
MysqlKeepAlive?: number;
|
|
315
|
+
/**
|
|
316
|
+
初始化postgresql链接 支持多数据源
|
|
317
|
+
## 单一数据源: 直接传入postgresql的连接配置
|
|
318
|
+
[Postgresql初始化文档](https://github.com/brianc/node-postgres/tree/master/packages/pg-pool)
|
|
319
|
+
```
|
|
320
|
+
Postgresql: {
|
|
321
|
+
database: 'postgres',
|
|
322
|
+
...
|
|
323
|
+
}
|
|
324
|
+
```
|
|
325
|
+
## 多数据源:传入多个Postgresql的连接配置
|
|
326
|
+
```
|
|
327
|
+
Postgresql: {
|
|
328
|
+
db1: { ... },
|
|
329
|
+
db2: { ... },
|
|
330
|
+
...
|
|
331
|
+
}
|
|
332
|
+
```
|
|
333
|
+
*/
|
|
334
|
+
Postgresql?: Record<string, Record<string, any>> | Record<string, any>;
|
|
335
|
+
/**
|
|
336
|
+
## 单一数据源
|
|
337
|
+
```
|
|
338
|
+
Sqlite: 'd:/1.db'
|
|
339
|
+
```
|
|
340
|
+
## 多数据源:传入多个连接配置
|
|
341
|
+
```
|
|
342
|
+
Sqlite: {
|
|
343
|
+
db1: 'd:/1.db',
|
|
344
|
+
db2: 'd:/2.db'
|
|
345
|
+
}
|
|
346
|
+
```
|
|
347
|
+
路径 = `SqliteMemory` 将创建内存库
|
|
348
|
+
*/
|
|
349
|
+
Sqlite?: Record<string, string> | string;
|
|
350
|
+
/**
|
|
351
|
+
## 日志文件存放路径,该目录下文件名是模块名,例如有一个文件名为 `user.js`,内容为:
|
|
352
|
+
```
|
|
353
|
+
export default {
|
|
354
|
+
'sql_1': 'SELECT * FROM user WHERE username = :username',
|
|
355
|
+
'sql_2': (options: {
|
|
356
|
+
ctx?: any;
|
|
357
|
+
isCount?: boolean;
|
|
358
|
+
isSum?: boolean;
|
|
359
|
+
limitStart?: number;
|
|
360
|
+
limitEnd?: number;
|
|
361
|
+
sortName?: string; sortType?: string;
|
|
362
|
+
params?: Record<string, any>;
|
|
363
|
+
}) => {
|
|
364
|
+
return `
|
|
365
|
+
SELECT * FROM user u LEFT JOIN organ o ON u.orgid = o.orgid
|
|
366
|
+
WHERE o.orgid = :orgid;
|
|
367
|
+
`;
|
|
368
|
+
}
|
|
369
|
+
} as SqlModel;
|
|
370
|
+
```
|
|
371
|
+
** 可以看到,sql语句支持直接映射一个sql语句,也可以通过函数返回,返回字符串支持[mustache](https://github.com/janl/mustache.js)
|
|
372
|
+
** 上面的文件中,将注册两个SQL:`user.sql_1` 和 `user.sql_2`.
|
|
373
|
+
** `[k: string]: any;` 是用查询时传入的参数,可以指定为任意类型,可以用来生成sql,例如进行循环语句
|
|
374
|
+
** ctx 是框架的上下文,可以自行指定类型
|
|
375
|
+
** 其他 是保留参数
|
|
376
|
+
** 函数类型中,可以调用自己定义的通用sql
|
|
377
|
+
### 注意
|
|
378
|
+
1. 不要直接拼接参数:不安全且效率低
|
|
379
|
+
2. sqlite不支持多语句拼接
|
|
380
|
+
## 也支持.mu文件,格式略
|
|
381
|
+
*/
|
|
382
|
+
sqlDir?: string;
|
|
383
|
+
/**
|
|
384
|
+
## [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)
|
|
385
|
+
## 文件名就是模板名
|
|
386
|
+
*/
|
|
387
|
+
sqlFNDir?: string;
|
|
388
|
+
/**
|
|
389
|
+
* #TODO 未完成读取 sqlMapDir
|
|
390
|
+
* # sqlMapDir 目录定义如下,
|
|
391
|
+
* `test.ts`
|
|
392
|
+
* ```
|
|
393
|
+
* export const dict:SqlMappers = [
|
|
394
|
+
* {columnName: 'dit_id', mapNames: ['DTID'], def: 0, convert: 转换函数},
|
|
395
|
+
* {columnName: 'event_id', mapNames: ['eventMainInfo', 'id'], def: 0, convert: 转换函数},
|
|
396
|
+
* ]
|
|
397
|
+
* ```
|
|
398
|
+
* 将得到 test.dict 这个map
|
|
399
|
+
*/
|
|
400
|
+
sqlMapDir?: string;
|
|
401
|
+
/**
|
|
402
|
+
## 映射数据为对象,文件名就是模板名
|
|
403
|
+
```
|
|
404
|
+
// 第一个元素=列名,第二个元素是属性路径,
|
|
405
|
+
// 该目录下可存放json文件,内容如下
|
|
406
|
+
//
|
|
407
|
+
// 可以在查询时使用,优先级高于hump
|
|
408
|
+
// 例如:
|
|
409
|
+
[
|
|
410
|
+
['dit_id', ['id'], 可选的默认值],
|
|
411
|
+
['event_id', ['eventMainInfo', 'id']]
|
|
412
|
+
]
|
|
413
|
+
```
|
|
414
|
+
*/
|
|
415
|
+
sqlMapperDir?: string;
|
|
416
|
+
/**
|
|
417
|
+
[REDIS初始化文档](https://github.com/redis/ioredis?tab=readme-ov-file#:~:text=connect%20to%20by%3A-,new%20Redis()%3B,-//%20Connect%20to%20127.0.0.1)
|
|
418
|
+
```
|
|
419
|
+
Redis: {
|
|
420
|
+
host: '127.0.0.1',
|
|
421
|
+
...
|
|
422
|
+
}
|
|
423
|
+
```
|
|
424
|
+
## 多数据源:传入多个Redis的连接配置
|
|
425
|
+
```
|
|
426
|
+
Redis: {
|
|
427
|
+
db1: { host: '127.0.0.1', ... },
|
|
428
|
+
db2: { host: '127.0.0.1', ... },
|
|
429
|
+
}
|
|
430
|
+
```
|
|
431
|
+
*/
|
|
432
|
+
Redis?: Record<string, Record<string, any>> | Record<string, any>;
|
|
433
|
+
/** sqlite数据库驱动初始化函数 */
|
|
434
|
+
BetterSqlite3?: any;
|
|
435
|
+
/**
|
|
436
|
+
* 读取查询语句时,是否扫描JS文件?
|
|
437
|
+
* JS文件需要默认导出一个 SqlModel对象
|
|
438
|
+
*/
|
|
439
|
+
jsMode?: boolean;
|
|
440
|
+
}
|
|
441
|
+
export interface PageQuery<L> {
|
|
442
|
+
sum?: Record<string, string | number>;
|
|
443
|
+
total?: number;
|
|
444
|
+
size?: number;
|
|
445
|
+
records?: L[];
|
|
446
|
+
}
|
|
447
|
+
/** sqlite electron服务端需要支持的接口 */
|
|
448
|
+
export interface SqliteRemoteInterface {
|
|
449
|
+
execute(inData: Uint8Array): Promise<Uint8Array>;
|
|
450
|
+
pluck(inData: Uint8Array): Promise<Uint8Array>;
|
|
451
|
+
get(inData: Uint8Array): Promise<Uint8Array>;
|
|
452
|
+
raw(inData: Uint8Array): Promise<Uint8Array>;
|
|
453
|
+
query(inData: Uint8Array): Promise<Uint8Array>;
|
|
454
|
+
initDB(dbName: string): void;
|
|
455
|
+
export(dbName: string, exportPath: string): Promise<void>;
|
|
456
|
+
restore(dbName: string, importPath: string): void;
|
|
457
|
+
close(dbName?: string): void;
|
|
458
|
+
}
|
|
459
|
+
export interface Connection {
|
|
460
|
+
[_daoConnection]: any;
|
|
461
|
+
[_inTransaction]: boolean;
|
|
462
|
+
execute(sync: SyncMode.Sync, sql?: string, params?: any): {
|
|
463
|
+
affectedRows: number;
|
|
464
|
+
insertId: bigint;
|
|
465
|
+
};
|
|
466
|
+
execute(sync: SyncMode.Async, sql?: string, params?: any): Promise<{
|
|
467
|
+
affectedRows: number;
|
|
468
|
+
insertId: bigint;
|
|
469
|
+
}>;
|
|
470
|
+
/** 一行一列 */
|
|
471
|
+
pluck<One_Row_One_Column = any>(sync: SyncMode.Sync, sql?: string, params?: any): One_Row_One_Column | null;
|
|
472
|
+
pluck<One_Row_One_Column = any>(sync: SyncMode.Async, sql?: string, params?: any): Promise<One_Row_One_Column | null>;
|
|
473
|
+
/** 一行多列 */
|
|
474
|
+
get<One_Row_Many_Column = any>(sync: SyncMode.Sync, sql?: string, params?: any): One_Row_Many_Column | null;
|
|
475
|
+
get<One_Row_Many_Column = any>(sync: SyncMode.Async, sql?: string, params?: any): Promise<One_Row_Many_Column | null>;
|
|
476
|
+
/** 多行一列 */
|
|
477
|
+
raw<Many_Row_One_Column = any>(sync: SyncMode.Sync, sql?: string, params?: any): Many_Row_One_Column[];
|
|
478
|
+
raw<Many_Row_One_Column = any>(sync: SyncMode.Async, sql?: string, params?: any): Promise<Many_Row_One_Column[]>;
|
|
479
|
+
/** 多行多列 */
|
|
480
|
+
query<Many_Row_Many_Column = any>(sync: SyncMode.Sync, sql?: string, params?: any): Many_Row_Many_Column[];
|
|
481
|
+
query<Many_Row_Many_Column = any>(sync: SyncMode.Async, sql?: string, params?: any): Promise<Many_Row_Many_Column[]>;
|
|
482
|
+
release(sync: SyncMode.Sync): void;
|
|
483
|
+
release(sync: SyncMode.Async): Promise<void>;
|
|
484
|
+
}
|
|
485
|
+
export interface Dao {
|
|
486
|
+
[_daoDB]: any;
|
|
487
|
+
transaction<T = any>(sync: SyncMode.Sync, fn: (conn: Connection) => T, conn?: Connection | null): T | null;
|
|
488
|
+
transaction<T = any>(sync: SyncMode.Async, fn: (conn: Connection) => Promise<T>, conn?: Connection | null): Promise<T | null>;
|
|
489
|
+
createConnection(sync: SyncMode.Sync): Connection | null;
|
|
490
|
+
createConnection(sync: SyncMode.Async): Promise<Connection | null>;
|
|
491
|
+
close(sync: SyncMode.Sync): void;
|
|
492
|
+
close(sync: SyncMode.Async): Promise<void>;
|
|
493
|
+
backup(sync: SyncMode.Sync, name: string): void;
|
|
494
|
+
backup(sync: SyncMode.Async, name: string): Promise<void>;
|
|
495
|
+
remove(sync: SyncMode.Sync): void;
|
|
496
|
+
remove(sync: SyncMode.Async): Promise<void>;
|
|
497
|
+
restore(sync: SyncMode.Sync, name: string): void;
|
|
498
|
+
restore(sync: SyncMode.Async, name: string): Promise<void>;
|
|
499
|
+
}
|
|
500
|
+
/** 缓存存储后端。`redis` 走 ioredis 全局共享;`memory` 走进程内 LRU + Promise-based single-flight。 */
|
|
501
|
+
export declare enum StorageType {
|
|
502
|
+
Redis = 0,
|
|
503
|
+
Memory = 1
|
|
504
|
+
}
|