@zhin.js/database 1.0.4 → 1.0.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.
- package/CHANGELOG.md +12 -0
- package/README.md +1360 -34
- package/lib/base/database.d.ts +71 -13
- package/lib/base/database.d.ts.map +1 -1
- package/lib/base/database.js +128 -4
- package/lib/base/database.js.map +1 -1
- package/lib/base/dialect.d.ts +27 -10
- package/lib/base/dialect.d.ts.map +1 -1
- package/lib/base/dialect.js +32 -0
- package/lib/base/dialect.js.map +1 -1
- package/lib/base/index.d.ts +1 -0
- package/lib/base/index.d.ts.map +1 -1
- package/lib/base/index.js +1 -0
- package/lib/base/index.js.map +1 -1
- package/lib/base/model.d.ts +105 -12
- package/lib/base/model.d.ts.map +1 -1
- package/lib/base/model.js +224 -3
- package/lib/base/model.js.map +1 -1
- package/lib/base/query-classes.d.ts +204 -33
- package/lib/base/query-classes.d.ts.map +1 -1
- package/lib/base/query-classes.js +276 -0
- package/lib/base/query-classes.js.map +1 -1
- package/lib/base/thenable.d.ts +7 -7
- package/lib/base/thenable.d.ts.map +1 -1
- package/lib/base/thenable.js +5 -4
- package/lib/base/thenable.js.map +1 -1
- package/lib/base/transaction.d.ts +46 -0
- package/lib/base/transaction.d.ts.map +1 -0
- package/lib/base/transaction.js +186 -0
- package/lib/base/transaction.js.map +1 -0
- package/lib/dialects/memory.d.ts +12 -7
- package/lib/dialects/memory.d.ts.map +1 -1
- package/lib/dialects/memory.js +7 -4
- package/lib/dialects/memory.js.map +1 -1
- package/lib/dialects/mongodb.d.ts +11 -7
- package/lib/dialects/mongodb.d.ts.map +1 -1
- package/lib/dialects/mongodb.js +18 -15
- package/lib/dialects/mongodb.js.map +1 -1
- package/lib/dialects/mysql.d.ts +35 -6
- package/lib/dialects/mysql.d.ts.map +1 -1
- package/lib/dialects/mysql.js +137 -18
- package/lib/dialects/mysql.js.map +1 -1
- package/lib/dialects/pg.d.ts +35 -6
- package/lib/dialects/pg.d.ts.map +1 -1
- package/lib/dialects/pg.js +137 -18
- package/lib/dialects/pg.js.map +1 -1
- package/lib/dialects/redis.d.ts +11 -6
- package/lib/dialects/redis.d.ts.map +1 -1
- package/lib/dialects/redis.js +11 -8
- package/lib/dialects/redis.js.map +1 -1
- package/lib/dialects/sqlite.d.ts +19 -6
- package/lib/dialects/sqlite.d.ts.map +1 -1
- package/lib/dialects/sqlite.js +63 -10
- package/lib/dialects/sqlite.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/migration.d.ts +132 -0
- package/lib/migration.d.ts.map +1 -0
- package/lib/migration.js +475 -0
- package/lib/migration.js.map +1 -0
- package/lib/registry.d.ts +26 -23
- package/lib/registry.d.ts.map +1 -1
- package/lib/registry.js +1 -5
- package/lib/registry.js.map +1 -1
- package/lib/type/document/database.d.ts +11 -11
- package/lib/type/document/database.d.ts.map +1 -1
- package/lib/type/document/database.js.map +1 -1
- package/lib/type/document/model.d.ts +7 -7
- package/lib/type/document/model.d.ts.map +1 -1
- package/lib/type/document/model.js.map +1 -1
- package/lib/type/keyvalue/database.d.ts +11 -11
- package/lib/type/keyvalue/database.d.ts.map +1 -1
- package/lib/type/keyvalue/database.js.map +1 -1
- package/lib/type/keyvalue/model.d.ts +2 -2
- package/lib/type/keyvalue/model.d.ts.map +1 -1
- package/lib/type/keyvalue/model.js.map +1 -1
- package/lib/type/related/database.d.ts +48 -13
- package/lib/type/related/database.d.ts.map +1 -1
- package/lib/type/related/database.js +258 -27
- package/lib/type/related/database.js.map +1 -1
- package/lib/type/related/model.d.ts +251 -15
- package/lib/type/related/model.d.ts.map +1 -1
- package/lib/type/related/model.js +647 -22
- package/lib/type/related/model.js.map +1 -1
- package/lib/types.d.ts +475 -37
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js +6 -0
- package/lib/types.js.map +1 -1
- package/package.json +14 -5
- package/src/base/database.ts +168 -24
- package/src/base/dialect.ts +49 -10
- package/src/base/index.ts +2 -1
- package/src/base/model.ts +258 -18
- package/src/base/query-classes.ts +471 -63
- package/src/base/thenable.ts +12 -11
- package/src/base/transaction.ts +213 -0
- package/src/dialects/memory.ts +14 -13
- package/src/dialects/mongodb.ts +40 -38
- package/src/dialects/mysql.ts +151 -22
- package/src/dialects/pg.ts +148 -21
- package/src/dialects/redis.ts +40 -38
- package/src/dialects/sqlite.ts +73 -15
- package/src/index.ts +1 -2
- package/src/migration.ts +544 -0
- package/src/registry.ts +33 -33
- package/src/type/document/database.ts +32 -32
- package/src/type/document/model.ts +14 -14
- package/src/type/keyvalue/database.ts +32 -32
- package/src/type/keyvalue/model.ts +18 -18
- package/src/type/related/database.ts +309 -34
- package/src/type/related/model.ts +800 -33
- package/src/types.ts +559 -44
- package/tests/database.test.ts +1738 -0
package/lib/base/model.js
CHANGED
|
@@ -1,13 +1,129 @@
|
|
|
1
|
+
/** 默认软删除字段名 */
|
|
2
|
+
const DEFAULT_DELETED_AT = 'deletedAt';
|
|
3
|
+
/** 默认创建时间字段名 */
|
|
4
|
+
const DEFAULT_CREATED_AT = 'createdAt';
|
|
5
|
+
/** 默认更新时间字段名 */
|
|
6
|
+
const DEFAULT_UPDATED_AT = 'updatedAt';
|
|
1
7
|
/**
|
|
2
8
|
* 基础模型抽象类
|
|
3
9
|
* 定义所有模型类型的通用接口和行为
|
|
10
|
+
* 支持软删除、自动时间戳和生命周期钩子
|
|
4
11
|
*/
|
|
5
12
|
export class Model {
|
|
6
13
|
database;
|
|
7
14
|
name;
|
|
8
|
-
|
|
15
|
+
/** 模型配置选项 */
|
|
16
|
+
options;
|
|
17
|
+
/** 生命周期钩子注册表 */
|
|
18
|
+
hooks = new Map();
|
|
19
|
+
constructor(database, name, options) {
|
|
9
20
|
this.database = database;
|
|
10
21
|
this.name = name;
|
|
22
|
+
this.options = options ?? {};
|
|
23
|
+
}
|
|
24
|
+
// ============================================================================
|
|
25
|
+
// Lifecycle Hooks
|
|
26
|
+
// ============================================================================
|
|
27
|
+
/**
|
|
28
|
+
* 注册生命周期钩子
|
|
29
|
+
* @param hookName 钩子名称
|
|
30
|
+
* @param fn 钩子函数
|
|
31
|
+
* @returns this(支持链式调用)
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```ts
|
|
35
|
+
* userModel
|
|
36
|
+
* .addHook('beforeCreate', (ctx) => {
|
|
37
|
+
* ctx.data.createdBy = 'system';
|
|
38
|
+
* })
|
|
39
|
+
* .addHook('afterDelete', async (ctx) => {
|
|
40
|
+
* await logService.log('User deleted', ctx.result);
|
|
41
|
+
* });
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
addHook(hookName, fn) {
|
|
45
|
+
const fns = this.hooks.get(hookName) ?? [];
|
|
46
|
+
fns.push(fn);
|
|
47
|
+
this.hooks.set(hookName, fns);
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* addHook 的别名
|
|
52
|
+
*/
|
|
53
|
+
on(hookName, fn) {
|
|
54
|
+
return this.addHook(hookName, fn);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 批量注册钩子
|
|
58
|
+
* @example
|
|
59
|
+
* ```ts
|
|
60
|
+
* userModel.registerHooks({
|
|
61
|
+
* beforeCreate: (ctx) => { ... },
|
|
62
|
+
* afterUpdate: [(ctx) => { ... }, (ctx) => { ... }]
|
|
63
|
+
* });
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
registerHooks(hooks) {
|
|
67
|
+
for (const [name, fn] of Object.entries(hooks)) {
|
|
68
|
+
if (Array.isArray(fn)) {
|
|
69
|
+
fn.forEach(f => this.addHook(name, f));
|
|
70
|
+
}
|
|
71
|
+
else if (fn) {
|
|
72
|
+
this.addHook(name, fn);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return this;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 移除指定钩子
|
|
79
|
+
*/
|
|
80
|
+
removeHook(hookName, fn) {
|
|
81
|
+
if (!fn) {
|
|
82
|
+
this.hooks.delete(hookName);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
const fns = this.hooks.get(hookName);
|
|
86
|
+
if (fns) {
|
|
87
|
+
const index = fns.indexOf(fn);
|
|
88
|
+
if (index > -1) {
|
|
89
|
+
fns.splice(index, 1);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return this;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* 清除所有钩子
|
|
97
|
+
*/
|
|
98
|
+
clearHooks() {
|
|
99
|
+
this.hooks.clear();
|
|
100
|
+
return this;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 触发钩子
|
|
104
|
+
* @returns 如果任何 before 钩子返回 false,则返回 false
|
|
105
|
+
*/
|
|
106
|
+
async runHooks(hookName, context) {
|
|
107
|
+
const fns = this.hooks.get(hookName);
|
|
108
|
+
if (!fns || fns.length === 0)
|
|
109
|
+
return true;
|
|
110
|
+
for (const fn of fns) {
|
|
111
|
+
const result = await fn(context);
|
|
112
|
+
// before 钩子返回 false 可以取消操作
|
|
113
|
+
if (hookName.startsWith('before') && result === false) {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* 创建钩子上下文
|
|
121
|
+
*/
|
|
122
|
+
createHookContext(options = {}) {
|
|
123
|
+
return {
|
|
124
|
+
modelName: String(this.name),
|
|
125
|
+
...options
|
|
126
|
+
};
|
|
11
127
|
}
|
|
12
128
|
/**
|
|
13
129
|
* 获取数据库方言
|
|
@@ -27,21 +143,126 @@ export class Model {
|
|
|
27
143
|
get modelName() {
|
|
28
144
|
return this.name;
|
|
29
145
|
}
|
|
146
|
+
/**
|
|
147
|
+
* 是否启用软删除
|
|
148
|
+
*/
|
|
149
|
+
get isSoftDelete() {
|
|
150
|
+
return this.options.softDelete === true;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* 软删除字段名
|
|
154
|
+
*/
|
|
155
|
+
get deletedAtField() {
|
|
156
|
+
return this.options.deletedAtField ?? DEFAULT_DELETED_AT;
|
|
157
|
+
}
|
|
30
158
|
alter(alterations) {
|
|
31
159
|
return this.database.alter(this.name, alterations);
|
|
32
160
|
}
|
|
161
|
+
/**
|
|
162
|
+
* 查询(软删除模式下自动排除已删除记录)
|
|
163
|
+
*/
|
|
33
164
|
select(...fields) {
|
|
165
|
+
const selection = this.database.select(this.name, fields);
|
|
166
|
+
// 软删除模式下自动添加条件
|
|
167
|
+
if (this.isSoftDelete) {
|
|
168
|
+
selection.where({ [this.deletedAtField]: null });
|
|
169
|
+
}
|
|
170
|
+
return selection;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* 查询(包含已删除的记录)
|
|
174
|
+
*/
|
|
175
|
+
selectWithTrashed(...fields) {
|
|
34
176
|
return this.database.select(this.name, fields);
|
|
35
177
|
}
|
|
178
|
+
/**
|
|
179
|
+
* 仅查询已删除的记录
|
|
180
|
+
*/
|
|
181
|
+
selectOnlyTrashed(...fields) {
|
|
182
|
+
const selection = this.database.select(this.name, fields);
|
|
183
|
+
selection.where({ [this.deletedAtField]: { $ne: null } });
|
|
184
|
+
return selection;
|
|
185
|
+
}
|
|
36
186
|
insert(data) {
|
|
187
|
+
// 自动添加时间戳
|
|
188
|
+
if (this.options.timestamps) {
|
|
189
|
+
const now = new Date();
|
|
190
|
+
const createdAtField = this.options.createdAtField ?? DEFAULT_CREATED_AT;
|
|
191
|
+
const updatedAtField = this.options.updatedAtField ?? DEFAULT_UPDATED_AT;
|
|
192
|
+
data[createdAtField] = now;
|
|
193
|
+
data[updatedAtField] = now;
|
|
194
|
+
}
|
|
37
195
|
return this.database.insert(this.name, data);
|
|
38
196
|
}
|
|
39
197
|
update(update) {
|
|
40
|
-
|
|
198
|
+
// 自动更新时间戳
|
|
199
|
+
if (this.options.timestamps) {
|
|
200
|
+
const updatedAtField = this.options.updatedAtField ?? DEFAULT_UPDATED_AT;
|
|
201
|
+
update[updatedAtField] = new Date();
|
|
202
|
+
}
|
|
203
|
+
const updation = this.database.update(this.name, update);
|
|
204
|
+
// 软删除模式下只更新未删除的记录
|
|
205
|
+
if (this.isSoftDelete) {
|
|
206
|
+
updation.where({ [this.deletedAtField]: null });
|
|
207
|
+
}
|
|
208
|
+
return updation;
|
|
41
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* 删除(软删除模式下执行软删除)
|
|
212
|
+
*/
|
|
42
213
|
delete(condition) {
|
|
214
|
+
if (this.isSoftDelete) {
|
|
215
|
+
// 软删除:UPDATE SET deletedAt = NOW()
|
|
216
|
+
return this.database.update(this.name, {
|
|
217
|
+
[this.deletedAtField]: new Date()
|
|
218
|
+
}).where(condition);
|
|
219
|
+
}
|
|
43
220
|
return this.database.delete(this.name, condition);
|
|
44
221
|
}
|
|
222
|
+
/**
|
|
223
|
+
* 强制删除(忽略软删除,直接物理删除)
|
|
224
|
+
*/
|
|
225
|
+
forceDelete(condition) {
|
|
226
|
+
return this.database.delete(this.name, condition);
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* 恢复软删除的记录
|
|
230
|
+
*/
|
|
231
|
+
restore(condition) {
|
|
232
|
+
if (!this.isSoftDelete) {
|
|
233
|
+
throw new Error(`Model ${String(this.name)} does not have soft delete enabled`);
|
|
234
|
+
}
|
|
235
|
+
return this.database.update(this.name, {
|
|
236
|
+
[this.deletedAtField]: null
|
|
237
|
+
}).where(condition);
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* 批量插入
|
|
241
|
+
*/
|
|
242
|
+
insertMany(data) {
|
|
243
|
+
// 自动添加时间戳
|
|
244
|
+
if (this.options.timestamps) {
|
|
245
|
+
const now = new Date();
|
|
246
|
+
const createdAtField = this.options.createdAtField ?? DEFAULT_CREATED_AT;
|
|
247
|
+
const updatedAtField = this.options.updatedAtField ?? DEFAULT_UPDATED_AT;
|
|
248
|
+
data.forEach(item => {
|
|
249
|
+
item[createdAtField] = now;
|
|
250
|
+
item[updatedAtField] = now;
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
return this.database.insertMany(this.name, data);
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* 聚合查询
|
|
257
|
+
*/
|
|
258
|
+
aggregate() {
|
|
259
|
+
const agg = this.database.aggregate(this.name);
|
|
260
|
+
// 软删除模式下自动排除已删除记录
|
|
261
|
+
if (this.isSoftDelete) {
|
|
262
|
+
agg.where({ [this.deletedAtField]: null });
|
|
263
|
+
}
|
|
264
|
+
return agg;
|
|
265
|
+
}
|
|
45
266
|
/**
|
|
46
267
|
* 验证查询条件
|
|
47
268
|
*/
|
|
@@ -58,7 +279,7 @@ export class Model {
|
|
|
58
279
|
* 处理错误
|
|
59
280
|
*/
|
|
60
281
|
handleError(error, operation) {
|
|
61
|
-
const message = `Model ${this.name} ${operation} failed: ${error.message}`;
|
|
282
|
+
const message = `Model ${String(this.name)} ${operation} failed: ${error.message}`;
|
|
62
283
|
throw new Error(message);
|
|
63
284
|
}
|
|
64
285
|
}
|
package/lib/base/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/base/model.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/base/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,68 +1,239 @@
|
|
|
1
1
|
import type { Database } from './database.js';
|
|
2
2
|
import { ThenableQuery } from './thenable.js';
|
|
3
|
-
import { QueryParams, AlterDefinition, Condition, Definition } from '../types.js';
|
|
4
|
-
|
|
3
|
+
import { QueryParams, AlterDefinition, Condition, Ordering, Definition, Subquery, JoinType } from '../types.js';
|
|
4
|
+
/** 软删除查询模式 */
|
|
5
|
+
export type SoftDeleteMode = 'default' | 'withTrashed' | 'onlyTrashed';
|
|
6
|
+
export declare class Alteration<S extends Record<string, object>, T extends keyof S, C = any, D = string> extends ThenableQuery<void, S, T, C, D> {
|
|
5
7
|
private readonly tableName;
|
|
6
8
|
private readonly alterations;
|
|
7
|
-
constructor(database: Database<C,
|
|
8
|
-
protected getQueryParams(): QueryParams<T>;
|
|
9
|
+
constructor(database: Database<C, S, D>, tableName: T, alterations: AlterDefinition<S[T]>);
|
|
10
|
+
protected getQueryParams(): QueryParams<S, T>;
|
|
9
11
|
}
|
|
10
|
-
export declare class DroppingTable<
|
|
12
|
+
export declare class DroppingTable<S extends Record<string, object>, T extends keyof S, C = any, D = string> extends ThenableQuery<number, S, T, C, D> {
|
|
11
13
|
private readonly tableName;
|
|
12
14
|
private conditions;
|
|
13
|
-
constructor(database: Database<C,
|
|
14
|
-
where(query: Condition<T>): this;
|
|
15
|
-
protected getQueryParams(): QueryParams<T>;
|
|
15
|
+
constructor(database: Database<C, S, any>, tableName: T);
|
|
16
|
+
where(query: Condition<S[T]>): this;
|
|
17
|
+
protected getQueryParams(): QueryParams<S, T>;
|
|
16
18
|
}
|
|
17
|
-
export declare class DroppingIndex<C = any, D = string> extends ThenableQuery<number, C, D> {
|
|
19
|
+
export declare class DroppingIndex<S extends Record<string, object>, T extends keyof S, C = any, D = string> extends ThenableQuery<number, S, T, C, D> {
|
|
18
20
|
private readonly indexName;
|
|
19
21
|
private readonly tableName;
|
|
20
22
|
private conditions;
|
|
21
|
-
constructor(database: Database<C,
|
|
22
|
-
where(query: Condition<
|
|
23
|
-
protected getQueryParams(): QueryParams<
|
|
23
|
+
constructor(database: Database<C, S, D>, indexName: string, tableName: T);
|
|
24
|
+
where(query: Condition<S[T]>): this;
|
|
25
|
+
protected getQueryParams(): QueryParams<S, T>;
|
|
24
26
|
}
|
|
25
|
-
export declare class Creation<T extends
|
|
27
|
+
export declare class Creation<S extends Record<string, object>, T extends keyof S, C = any, D = string> extends ThenableQuery<void, S, T, C, D> {
|
|
26
28
|
private readonly tableName;
|
|
27
29
|
private readonly definition;
|
|
28
|
-
constructor(database: Database<C,
|
|
29
|
-
protected getQueryParams(): QueryParams<T>;
|
|
30
|
+
constructor(database: Database<C, S, D>, tableName: T, definition: Definition<S[T]>);
|
|
31
|
+
protected getQueryParams(): QueryParams<S, T>;
|
|
30
32
|
}
|
|
31
|
-
|
|
33
|
+
/**
|
|
34
|
+
* SELECT 查询类
|
|
35
|
+
* 实现 Subquery<S[T][K]> 以支持类型安全的子查询
|
|
36
|
+
*
|
|
37
|
+
* @template S Schema 类型
|
|
38
|
+
* @template T 表名
|
|
39
|
+
* @template K 选择的字段
|
|
40
|
+
* @template C 连接类型
|
|
41
|
+
* @template D 方言类型
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```ts
|
|
45
|
+
* // 子查询类型推断示例
|
|
46
|
+
* interface Schema {
|
|
47
|
+
* users: { id: number; name: string };
|
|
48
|
+
* orders: { id: number; userId: number; amount: number };
|
|
49
|
+
* }
|
|
50
|
+
*
|
|
51
|
+
* // ✅ 正确:userId 是 number,匹配 users.id
|
|
52
|
+
* db.select('users', ['id']).where({
|
|
53
|
+
* id: { $in: db.select('orders', ['userId']) }
|
|
54
|
+
* });
|
|
55
|
+
*
|
|
56
|
+
* // ❌ 类型错误:name 是 string,不能与 number 的 id 匹配
|
|
57
|
+
* db.select('users', ['id']).where({
|
|
58
|
+
* id: { $in: db.select('users', ['name']) } // Type error!
|
|
59
|
+
* });
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export declare class Selection<S extends Record<string, object>, T extends keyof S, K extends keyof S[T], C = any, D = string> extends ThenableQuery<Pick<S[T], K>[], S, T, C, D> implements Subquery<S[T][K]> {
|
|
63
|
+
protected readonly modelName: T;
|
|
64
|
+
protected readonly fields: Array<K>;
|
|
65
|
+
readonly __isSubquery: true;
|
|
66
|
+
readonly __returnType?: S[T][K];
|
|
67
|
+
protected conditions: Condition<S[T]>;
|
|
68
|
+
protected groupings: (keyof S[T])[];
|
|
69
|
+
protected orderings: Ordering<S[T]>[];
|
|
70
|
+
protected limitCount?: number;
|
|
71
|
+
protected offsetCount?: number;
|
|
72
|
+
constructor(database: Database<C, S, D>, modelName: T, fields: Array<K>);
|
|
73
|
+
where(query: Condition<S[T]>): this;
|
|
74
|
+
groupBy(...fields: (keyof S[T])[]): this;
|
|
75
|
+
orderBy(field: keyof S[T], direction?: "ASC" | "DESC"): this;
|
|
76
|
+
limit(count: number): this;
|
|
77
|
+
offset(count: number): this;
|
|
78
|
+
/**
|
|
79
|
+
* INNER JOIN - 只返回两表都有匹配的行
|
|
80
|
+
* 返回类型扩展为包含关联表字段
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```ts
|
|
84
|
+
* const result = await db.select('users', ['id', 'name'])
|
|
85
|
+
* .join('orders', 'id', 'userId');
|
|
86
|
+
* // result 类型: { users: { id, name }, orders: { id, userId, amount } }[]
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
join<J extends keyof S>(table: J, leftField: keyof S[T], rightField: keyof S[J]): JoinedSelection<S, T, K, J, C, D>;
|
|
90
|
+
/**
|
|
91
|
+
* LEFT JOIN - 返回左表所有行,右表无匹配则为 NULL
|
|
92
|
+
*/
|
|
93
|
+
leftJoin<J extends keyof S>(table: J, leftField: keyof S[T], rightField: keyof S[J]): JoinedSelection<S, T, K, J, C, D, true>;
|
|
94
|
+
/**
|
|
95
|
+
* RIGHT JOIN - 返回右表所有行,左表无匹配则为 NULL
|
|
96
|
+
*/
|
|
97
|
+
rightJoin<J extends keyof S>(table: J, leftField: keyof S[T], rightField: keyof S[J]): JoinedSelection<S, T, K, J, C, D, false, true>;
|
|
98
|
+
/**
|
|
99
|
+
* 转换为子查询 SQL
|
|
100
|
+
* 用于 $in / $nin 等操作符中嵌套查询
|
|
101
|
+
*/
|
|
102
|
+
toSQL(): {
|
|
103
|
+
sql: string;
|
|
104
|
+
params: any[];
|
|
105
|
+
};
|
|
106
|
+
protected getQueryParams(): QueryParams<S, T>;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* JOIN 结果类型 - 根据表名命名空间化
|
|
110
|
+
*/
|
|
111
|
+
type JoinResult<S extends Record<string, object>, T extends keyof S, K extends keyof S[T], J extends keyof S, LeftNullable extends boolean = false, RightNullable extends boolean = false> = {
|
|
112
|
+
[P in T]: LeftNullable extends true ? Partial<Pick<S[T], K>> : Pick<S[T], K>;
|
|
113
|
+
} & {
|
|
114
|
+
[P in J]: RightNullable extends true ? Partial<S[J]> | null : S[J];
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* JOIN 查询类 - 支持类型安全的关联查询
|
|
118
|
+
*
|
|
119
|
+
* @template S Schema 类型
|
|
120
|
+
* @template T 主表名
|
|
121
|
+
* @template K 主表选择的字段
|
|
122
|
+
* @template J 关联表名
|
|
123
|
+
* @template LeftNullable LEFT JOIN 时主表可能为 null
|
|
124
|
+
* @template RightNullable RIGHT JOIN 时关联表可能为 null
|
|
125
|
+
*/
|
|
126
|
+
export declare class JoinedSelection<S extends Record<string, object>, T extends keyof S, K extends keyof S[T], J extends keyof S, C = any, D = string, LeftNullable extends boolean = false, RightNullable extends boolean = false> extends ThenableQuery<JoinResult<S, T, K, J, LeftNullable, RightNullable>[], S, T, C, D> {
|
|
32
127
|
private readonly modelName;
|
|
33
128
|
private readonly fields;
|
|
34
129
|
private conditions;
|
|
35
|
-
private groupings;
|
|
36
130
|
private orderings;
|
|
131
|
+
private groupings;
|
|
37
132
|
private limitCount?;
|
|
38
133
|
private offsetCount?;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
orderBy(field: keyof T, direction?: "ASC" | "DESC"): this;
|
|
134
|
+
private joinClauses;
|
|
135
|
+
constructor(database: Database<C, S, D>, modelName: T, fields: Array<K>, joinTable: J, joinType: JoinType, leftField: keyof S[T], rightField: keyof S[J], conditions?: Condition<S[T]>, orderings?: Ordering<S[T]>[], groupings?: (keyof S[T])[], limitCount?: number | undefined, offsetCount?: number | undefined);
|
|
136
|
+
where(query: Condition<S[T]>): this;
|
|
137
|
+
orderBy(field: keyof S[T], direction?: "ASC" | "DESC"): this;
|
|
43
138
|
limit(count: number): this;
|
|
44
139
|
offset(count: number): this;
|
|
45
|
-
|
|
140
|
+
/**
|
|
141
|
+
* 继续 JOIN 更多表
|
|
142
|
+
*/
|
|
143
|
+
join<J2 extends keyof S>(table: J2, leftField: keyof S[T], rightField: keyof S[J2]): this;
|
|
144
|
+
leftJoin<J2 extends keyof S>(table: J2, leftField: keyof S[T], rightField: keyof S[J2]): this;
|
|
145
|
+
rightJoin<J2 extends keyof S>(table: J2, leftField: keyof S[T], rightField: keyof S[J2]): this;
|
|
146
|
+
protected getQueryParams(): QueryParams<S, T>;
|
|
46
147
|
}
|
|
47
|
-
export declare class Insertion<T extends
|
|
148
|
+
export declare class Insertion<S extends Record<string, object>, T extends keyof S, C = any, D = string> extends ThenableQuery<S[T], S, T, C, D> {
|
|
48
149
|
private readonly modelName;
|
|
49
150
|
private readonly data;
|
|
50
|
-
constructor(database: Database<C,
|
|
51
|
-
protected getQueryParams(): QueryParams<T>;
|
|
151
|
+
constructor(database: Database<C, S, D>, modelName: T, data: S[T]);
|
|
152
|
+
protected getQueryParams(): QueryParams<S, T>;
|
|
52
153
|
}
|
|
53
|
-
export declare class Updation<T extends
|
|
154
|
+
export declare class Updation<S extends Record<string, object>, T extends keyof S, C = any, D = string> extends ThenableQuery<number, S, T, C, D> {
|
|
54
155
|
private readonly modelName;
|
|
55
156
|
private readonly update;
|
|
56
157
|
private conditions;
|
|
57
|
-
constructor(database: Database<C,
|
|
58
|
-
where(query: Condition<T>): this;
|
|
59
|
-
protected getQueryParams(): QueryParams<T>;
|
|
158
|
+
constructor(database: Database<C, S, D>, modelName: T, update: Partial<S[T]>);
|
|
159
|
+
where(query: Condition<S[T]>): this;
|
|
160
|
+
protected getQueryParams(): QueryParams<S, T>;
|
|
60
161
|
}
|
|
61
|
-
export declare class Deletion<
|
|
162
|
+
export declare class Deletion<S extends Record<string, object>, T extends keyof S, C = any, D = string> extends ThenableQuery<S[T][], S, T, C, D> {
|
|
62
163
|
private readonly modelName;
|
|
63
164
|
private conditions;
|
|
64
|
-
constructor(database: Database<C,
|
|
65
|
-
where(query: Condition<T>): this;
|
|
66
|
-
protected getQueryParams(): QueryParams<T>;
|
|
165
|
+
constructor(database: Database<C, S, D>, modelName: T);
|
|
166
|
+
where(query: Condition<S[T]>): this;
|
|
167
|
+
protected getQueryParams(): QueryParams<S, T>;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* 批量插入查询类
|
|
171
|
+
*/
|
|
172
|
+
export declare class BatchInsertion<S extends Record<string, object>, T extends keyof S, C = any, D = string> extends ThenableQuery<{
|
|
173
|
+
affectedRows: number;
|
|
174
|
+
insertIds?: (number | string)[];
|
|
175
|
+
}, S, T, C, D> {
|
|
176
|
+
private readonly modelName;
|
|
177
|
+
private readonly data;
|
|
178
|
+
constructor(database: Database<C, S, D>, modelName: T, data: S[T][]);
|
|
179
|
+
then<TResult1 = {
|
|
180
|
+
affectedRows: number;
|
|
181
|
+
insertIds?: (number | string)[];
|
|
182
|
+
}, TResult2 = never>(onfulfilled?: ((value: {
|
|
183
|
+
affectedRows: number;
|
|
184
|
+
insertIds?: (number | string)[];
|
|
185
|
+
}) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): Promise<TResult1 | TResult2>;
|
|
186
|
+
protected getQueryParams(): QueryParams<S, T>;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* 聚合查询结果类型
|
|
190
|
+
*/
|
|
191
|
+
export interface AggregateResult {
|
|
192
|
+
[key: string]: number | string | null;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* 聚合查询类
|
|
196
|
+
*/
|
|
197
|
+
export declare class Aggregation<S extends Record<string, object>, T extends keyof S, C = any, D = string> extends ThenableQuery<AggregateResult[], S, T, C, D> {
|
|
198
|
+
private readonly modelName;
|
|
199
|
+
private conditions;
|
|
200
|
+
private groupings;
|
|
201
|
+
private havingConditions;
|
|
202
|
+
private aggregates;
|
|
203
|
+
constructor(database: Database<C, S, D>, modelName: T);
|
|
204
|
+
/**
|
|
205
|
+
* COUNT 聚合
|
|
206
|
+
*/
|
|
207
|
+
count(field?: keyof S[T] | '*', alias?: string): this;
|
|
208
|
+
/**
|
|
209
|
+
* SUM 聚合
|
|
210
|
+
*/
|
|
211
|
+
sum(field: keyof S[T], alias?: string): this;
|
|
212
|
+
/**
|
|
213
|
+
* AVG 聚合
|
|
214
|
+
*/
|
|
215
|
+
avg(field: keyof S[T], alias?: string): this;
|
|
216
|
+
/**
|
|
217
|
+
* MIN 聚合
|
|
218
|
+
*/
|
|
219
|
+
min(field: keyof S[T], alias?: string): this;
|
|
220
|
+
/**
|
|
221
|
+
* MAX 聚合
|
|
222
|
+
*/
|
|
223
|
+
max(field: keyof S[T], alias?: string): this;
|
|
224
|
+
/**
|
|
225
|
+
* WHERE 条件
|
|
226
|
+
*/
|
|
227
|
+
where(query: Condition<S[T]>): this;
|
|
228
|
+
/**
|
|
229
|
+
* GROUP BY
|
|
230
|
+
*/
|
|
231
|
+
groupBy(...fields: (keyof S[T])[]): this;
|
|
232
|
+
/**
|
|
233
|
+
* HAVING 条件(用于聚合后的过滤)
|
|
234
|
+
*/
|
|
235
|
+
having(query: Condition<S[T]>): this;
|
|
236
|
+
protected getQueryParams(): QueryParams<S, T>;
|
|
67
237
|
}
|
|
238
|
+
export {};
|
|
68
239
|
//# sourceMappingURL=query-classes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-classes.d.ts","sourceRoot":"","sources":["../../src/base/query-classes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"query-classes.d.ts","sourceRoot":"","sources":["../../src/base/query-classes.ts"],"names":[],"mappings":"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"}
|