@zhin.js/database 1.0.4 → 1.0.5
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 +6 -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 +10 -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/dialects/mysql.js
CHANGED
|
@@ -3,17 +3,34 @@ import { RelatedDatabase } from "../type/related/database.js";
|
|
|
3
3
|
import { Registry } from "../registry.js";
|
|
4
4
|
export class MySQLDialect extends Dialect {
|
|
5
5
|
connection = null;
|
|
6
|
+
pool = null;
|
|
7
|
+
usePool = false;
|
|
6
8
|
constructor(config) {
|
|
7
9
|
super('mysql', config);
|
|
10
|
+
this.usePool = !!config.pool;
|
|
8
11
|
}
|
|
9
12
|
// Connection management
|
|
10
13
|
isConnected() {
|
|
11
|
-
return this.connection !== null;
|
|
14
|
+
return this.usePool ? this.pool !== null : this.connection !== null;
|
|
12
15
|
}
|
|
13
16
|
async connect() {
|
|
14
17
|
try {
|
|
15
|
-
|
|
16
|
-
|
|
18
|
+
if (this.usePool) {
|
|
19
|
+
const { createPool } = await import('mysql2/promise');
|
|
20
|
+
const poolConfig = {
|
|
21
|
+
...this.config,
|
|
22
|
+
waitForConnections: true,
|
|
23
|
+
connectionLimit: this.config.pool?.max ?? 10,
|
|
24
|
+
queueLimit: 0,
|
|
25
|
+
idleTimeout: this.config.pool?.idleTimeoutMillis ?? 60000,
|
|
26
|
+
};
|
|
27
|
+
this.pool = createPool(poolConfig);
|
|
28
|
+
console.log(`MySQL 连接池已创建 (max: ${poolConfig.connectionLimit})`);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
const { createConnection } = await import('mysql2/promise');
|
|
32
|
+
this.connection = await createConnection(this.config);
|
|
33
|
+
}
|
|
17
34
|
}
|
|
18
35
|
catch (error) {
|
|
19
36
|
console.error('forgot install mysql2 ?');
|
|
@@ -21,20 +38,51 @@ export class MySQLDialect extends Dialect {
|
|
|
21
38
|
}
|
|
22
39
|
}
|
|
23
40
|
async disconnect() {
|
|
24
|
-
this.
|
|
41
|
+
if (this.usePool && this.pool) {
|
|
42
|
+
await this.pool.end();
|
|
43
|
+
this.pool = null;
|
|
44
|
+
console.log('MySQL 连接池已关闭');
|
|
45
|
+
}
|
|
46
|
+
else if (this.connection) {
|
|
47
|
+
await this.connection.end();
|
|
48
|
+
this.connection = null;
|
|
49
|
+
}
|
|
25
50
|
}
|
|
26
51
|
async healthCheck() {
|
|
27
|
-
|
|
52
|
+
if (!this.isConnected())
|
|
53
|
+
return false;
|
|
54
|
+
try {
|
|
55
|
+
await this.query('SELECT 1');
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
28
61
|
}
|
|
29
62
|
async query(sql, params) {
|
|
30
|
-
|
|
31
|
-
|
|
63
|
+
if (this.usePool) {
|
|
64
|
+
const [rows] = await this.pool.execute(sql, params);
|
|
65
|
+
return rows;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
const [rows] = await this.connection.execute(sql, params);
|
|
69
|
+
return rows;
|
|
70
|
+
}
|
|
32
71
|
}
|
|
33
72
|
async dispose() {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
73
|
+
await this.disconnect();
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* 获取连接池统计信息(仅在使用连接池时有效)
|
|
77
|
+
*/
|
|
78
|
+
getPoolStats() {
|
|
79
|
+
if (!this.usePool || !this.pool)
|
|
80
|
+
return null;
|
|
81
|
+
return {
|
|
82
|
+
total: this.pool.pool?._allConnections?.length ?? 0,
|
|
83
|
+
idle: this.pool.pool?._freeConnections?.length ?? 0,
|
|
84
|
+
waiting: this.pool.pool?._connectionQueue?.length ?? 0,
|
|
85
|
+
};
|
|
38
86
|
}
|
|
39
87
|
// SQL generation methods
|
|
40
88
|
mapColumnType(type) {
|
|
@@ -99,7 +147,7 @@ export class MySQLDialect extends Dialect {
|
|
|
99
147
|
return `LIMIT ${offset}, ${limit}`;
|
|
100
148
|
}
|
|
101
149
|
formatCreateTable(tableName, columns) {
|
|
102
|
-
return `CREATE TABLE IF NOT EXISTS ${this.quoteIdentifier(tableName)} (${columns.join(', ')}) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4`;
|
|
150
|
+
return `CREATE TABLE IF NOT EXISTS ${this.quoteIdentifier(String(tableName))} (${columns.join(', ')}) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4`;
|
|
103
151
|
}
|
|
104
152
|
formatColumnDefinition(field, column) {
|
|
105
153
|
const name = this.quoteIdentifier(String(field));
|
|
@@ -115,18 +163,89 @@ export class MySQLDialect extends Dialect {
|
|
|
115
163
|
return `${name} ${type}${length}${primary}${unique}${autoIncrement}${nullable}${defaultVal}`;
|
|
116
164
|
}
|
|
117
165
|
formatAlterTable(tableName, alterations) {
|
|
118
|
-
return `ALTER TABLE ${this.quoteIdentifier(tableName)} ${alterations.join(', ')}`;
|
|
166
|
+
return `ALTER TABLE ${this.quoteIdentifier(String(tableName))} ${alterations.join(', ')}`;
|
|
119
167
|
}
|
|
120
168
|
formatDropTable(tableName, ifExists) {
|
|
121
169
|
const ifExistsClause = ifExists ? 'IF EXISTS ' : '';
|
|
122
|
-
return `DROP TABLE ${ifExistsClause}${this.quoteIdentifier(tableName)}`;
|
|
170
|
+
return `DROP TABLE ${ifExistsClause}${this.quoteIdentifier(String(tableName))}`;
|
|
123
171
|
}
|
|
124
172
|
formatDropIndex(indexName, tableName, ifExists) {
|
|
125
173
|
const ifExistsClause = ifExists ? 'IF EXISTS ' : '';
|
|
126
|
-
return `DROP INDEX ${ifExistsClause}${this.quoteIdentifier(indexName)} ON ${this.quoteIdentifier(tableName)}`;
|
|
174
|
+
return `DROP INDEX ${ifExistsClause}${this.quoteIdentifier(indexName)} ON ${this.quoteIdentifier(String(tableName))}`;
|
|
175
|
+
}
|
|
176
|
+
// ============================================================================
|
|
177
|
+
// Transaction Support
|
|
178
|
+
// ============================================================================
|
|
179
|
+
/**
|
|
180
|
+
* MySQL 支持事务
|
|
181
|
+
*/
|
|
182
|
+
supportsTransactions() {
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* 开始事务
|
|
187
|
+
* 在连接池模式下,会获取一个专用连接用于事务
|
|
188
|
+
*/
|
|
189
|
+
async beginTransaction(options) {
|
|
190
|
+
if (this.usePool) {
|
|
191
|
+
// 从连接池获取一个连接用于事务
|
|
192
|
+
const connection = await this.pool.getConnection();
|
|
193
|
+
// 设置隔离级别
|
|
194
|
+
if (options?.isolationLevel) {
|
|
195
|
+
await connection.execute(`SET TRANSACTION ISOLATION LEVEL ${this.formatIsolationLevel(options.isolationLevel)}`);
|
|
196
|
+
}
|
|
197
|
+
// 开始事务
|
|
198
|
+
await connection.execute('START TRANSACTION');
|
|
199
|
+
return {
|
|
200
|
+
async commit() {
|
|
201
|
+
try {
|
|
202
|
+
await connection.execute('COMMIT');
|
|
203
|
+
}
|
|
204
|
+
finally {
|
|
205
|
+
connection.release(); // 归还连接到池
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
async rollback() {
|
|
209
|
+
try {
|
|
210
|
+
await connection.execute('ROLLBACK');
|
|
211
|
+
}
|
|
212
|
+
finally {
|
|
213
|
+
connection.release(); // 归还连接到池
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
async query(sql, params) {
|
|
217
|
+
const [rows] = await connection.execute(sql, params);
|
|
218
|
+
return rows;
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
// 单连接模式
|
|
224
|
+
const dialect = this;
|
|
225
|
+
// 设置隔离级别
|
|
226
|
+
if (options?.isolationLevel) {
|
|
227
|
+
await this.query(`SET TRANSACTION ISOLATION LEVEL ${this.formatIsolationLevel(options.isolationLevel)}`);
|
|
228
|
+
}
|
|
229
|
+
// 开始事务
|
|
230
|
+
await this.query('START TRANSACTION');
|
|
231
|
+
return {
|
|
232
|
+
async commit() {
|
|
233
|
+
await dialect.query('COMMIT');
|
|
234
|
+
},
|
|
235
|
+
async rollback() {
|
|
236
|
+
await dialect.query('ROLLBACK');
|
|
237
|
+
},
|
|
238
|
+
async query(sql, params) {
|
|
239
|
+
return dialect.query(sql, params);
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
export class MySQL extends RelatedDatabase {
|
|
246
|
+
constructor(config, definitions) {
|
|
247
|
+
super(new MySQLDialect(config), definitions);
|
|
127
248
|
}
|
|
128
249
|
}
|
|
129
|
-
Registry.register('mysql',
|
|
130
|
-
return new RelatedDatabase(new MySQLDialect(config), definitions);
|
|
131
|
-
});
|
|
250
|
+
Registry.register('mysql', MySQL);
|
|
132
251
|
//# sourceMappingURL=mysql.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../src/dialects/mysql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAC,eAAe,EAAC,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../src/dialects/mysql.ts"],"names":[],"mappings":"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"}
|
package/lib/dialects/pg.d.ts
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import { Dialect } from '../base/index.js';
|
|
2
|
+
import { RelatedDatabase } from "../type/related/database.js";
|
|
3
|
+
import { Database } from "../base/index.js";
|
|
2
4
|
import type { ClientConfig } from 'pg';
|
|
3
|
-
import { Column } from "../types.js";
|
|
5
|
+
import { Column, Transaction, TransactionOptions, PoolConfig } from "../types.js";
|
|
4
6
|
export interface PostgreSQLDialectConfig extends ClientConfig {
|
|
7
|
+
/**
|
|
8
|
+
* 连接池配置
|
|
9
|
+
* 如果提供此选项,将使用连接池而不是单连接
|
|
10
|
+
*/
|
|
11
|
+
pool?: PoolConfig;
|
|
5
12
|
}
|
|
6
|
-
export declare class PostgreSQLDialect extends Dialect<PostgreSQLDialectConfig, string> {
|
|
13
|
+
export declare class PostgreSQLDialect<S extends Record<string, object> = Record<string, object>> extends Dialect<PostgreSQLDialectConfig, S, string> {
|
|
7
14
|
private connection;
|
|
15
|
+
private pool;
|
|
16
|
+
private usePool;
|
|
8
17
|
constructor(config: PostgreSQLDialectConfig);
|
|
9
18
|
isConnected(): boolean;
|
|
10
19
|
connect(): Promise<void>;
|
|
@@ -12,6 +21,14 @@ export declare class PostgreSQLDialect extends Dialect<PostgreSQLDialectConfig,
|
|
|
12
21
|
healthCheck(): Promise<boolean>;
|
|
13
22
|
query<U = any>(sql: string, params?: any[]): Promise<U>;
|
|
14
23
|
dispose(): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* 获取连接池统计信息(仅在使用连接池时有效)
|
|
26
|
+
*/
|
|
27
|
+
getPoolStats(): {
|
|
28
|
+
total: number;
|
|
29
|
+
idle: number;
|
|
30
|
+
waiting: number;
|
|
31
|
+
} | null;
|
|
15
32
|
mapColumnType(type: string): string;
|
|
16
33
|
quoteIdentifier(identifier: string): string;
|
|
17
34
|
getParameterPlaceholder(index: number): string;
|
|
@@ -24,10 +41,22 @@ export declare class PostgreSQLDialect extends Dialect<PostgreSQLDialectConfig,
|
|
|
24
41
|
formatLimit(limit: number): string;
|
|
25
42
|
formatOffset(offset: number): string;
|
|
26
43
|
formatLimitOffset(limit: number, offset: number): string;
|
|
27
|
-
formatCreateTable(tableName:
|
|
44
|
+
formatCreateTable<T extends keyof S>(tableName: T, columns: string[]): string;
|
|
28
45
|
formatColumnDefinition(field: string, column: Column<any>): string;
|
|
29
|
-
formatAlterTable(tableName:
|
|
30
|
-
formatDropTable(tableName:
|
|
31
|
-
formatDropIndex(indexName: string, tableName:
|
|
46
|
+
formatAlterTable<T extends keyof S>(tableName: T, alterations: string[]): string;
|
|
47
|
+
formatDropTable<T extends keyof S>(tableName: T, ifExists?: boolean): string;
|
|
48
|
+
formatDropIndex<T extends keyof S>(indexName: string, tableName: T, ifExists?: boolean): string;
|
|
49
|
+
/**
|
|
50
|
+
* PostgreSQL 支持事务
|
|
51
|
+
*/
|
|
52
|
+
supportsTransactions(): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* 开始事务
|
|
55
|
+
* 在连接池模式下,会获取一个专用连接用于事务
|
|
56
|
+
*/
|
|
57
|
+
beginTransaction(options?: TransactionOptions): Promise<Transaction>;
|
|
58
|
+
}
|
|
59
|
+
export declare class PG<S extends Record<string, object> = Record<string, object>> extends RelatedDatabase<PostgreSQLDialectConfig, S> {
|
|
60
|
+
constructor(config: PostgreSQLDialectConfig, definitions?: Database.DefinitionObj<S>);
|
|
32
61
|
}
|
|
33
62
|
//# sourceMappingURL=pg.d.ts.map
|
package/lib/dialects/pg.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pg.d.ts","sourceRoot":"","sources":["../../src/dialects/pg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"pg.d.ts","sourceRoot":"","sources":["../../src/dialects/pg.ts"],"names":[],"mappings":"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"}
|
package/lib/dialects/pg.js
CHANGED
|
@@ -3,18 +3,35 @@ import { RelatedDatabase } from "../type/related/database.js";
|
|
|
3
3
|
import { Registry } from "../registry.js";
|
|
4
4
|
export class PostgreSQLDialect extends Dialect {
|
|
5
5
|
connection = null;
|
|
6
|
+
pool = null;
|
|
7
|
+
usePool = false;
|
|
6
8
|
constructor(config) {
|
|
7
9
|
super('pg', config);
|
|
10
|
+
this.usePool = !!config.pool;
|
|
8
11
|
}
|
|
9
12
|
// Connection management
|
|
10
13
|
isConnected() {
|
|
11
|
-
return this.connection !== null;
|
|
14
|
+
return this.usePool ? this.pool !== null : this.connection !== null;
|
|
12
15
|
}
|
|
13
16
|
async connect() {
|
|
14
17
|
try {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
if (this.usePool) {
|
|
19
|
+
const { Pool } = await import('pg');
|
|
20
|
+
const poolConfig = {
|
|
21
|
+
...this.config,
|
|
22
|
+
max: this.config.pool?.max ?? 10,
|
|
23
|
+
min: this.config.pool?.min ?? 2,
|
|
24
|
+
idleTimeoutMillis: this.config.pool?.idleTimeoutMillis ?? 30000,
|
|
25
|
+
connectionTimeoutMillis: this.config.pool?.acquireTimeoutMillis ?? 10000,
|
|
26
|
+
};
|
|
27
|
+
this.pool = new Pool(poolConfig);
|
|
28
|
+
console.log(`PostgreSQL 连接池已创建 (max: ${poolConfig.max})`);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
const { Client } = await import('pg');
|
|
32
|
+
this.connection = new Client(this.config);
|
|
33
|
+
await this.connection.connect();
|
|
34
|
+
}
|
|
18
35
|
}
|
|
19
36
|
catch (error) {
|
|
20
37
|
console.error('forgot install pg ?');
|
|
@@ -22,20 +39,51 @@ export class PostgreSQLDialect extends Dialect {
|
|
|
22
39
|
}
|
|
23
40
|
}
|
|
24
41
|
async disconnect() {
|
|
25
|
-
this.
|
|
42
|
+
if (this.usePool && this.pool) {
|
|
43
|
+
await this.pool.end();
|
|
44
|
+
this.pool = null;
|
|
45
|
+
console.log('PostgreSQL 连接池已关闭');
|
|
46
|
+
}
|
|
47
|
+
else if (this.connection) {
|
|
48
|
+
await this.connection.end();
|
|
49
|
+
this.connection = null;
|
|
50
|
+
}
|
|
26
51
|
}
|
|
27
52
|
async healthCheck() {
|
|
28
|
-
|
|
53
|
+
if (!this.isConnected())
|
|
54
|
+
return false;
|
|
55
|
+
try {
|
|
56
|
+
await this.query('SELECT 1');
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
29
62
|
}
|
|
30
63
|
async query(sql, params) {
|
|
31
|
-
|
|
32
|
-
|
|
64
|
+
if (this.usePool) {
|
|
65
|
+
const result = await this.pool.query(sql, params);
|
|
66
|
+
return result.rows;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
const result = await this.connection.query(sql, params);
|
|
70
|
+
return result.rows;
|
|
71
|
+
}
|
|
33
72
|
}
|
|
34
73
|
async dispose() {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
74
|
+
await this.disconnect();
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* 获取连接池统计信息(仅在使用连接池时有效)
|
|
78
|
+
*/
|
|
79
|
+
getPoolStats() {
|
|
80
|
+
if (!this.usePool || !this.pool)
|
|
81
|
+
return null;
|
|
82
|
+
return {
|
|
83
|
+
total: this.pool.totalCount ?? 0,
|
|
84
|
+
idle: this.pool.idleCount ?? 0,
|
|
85
|
+
waiting: this.pool.waitingCount ?? 0,
|
|
86
|
+
};
|
|
39
87
|
}
|
|
40
88
|
// SQL generation methods
|
|
41
89
|
mapColumnType(type) {
|
|
@@ -100,7 +148,7 @@ export class PostgreSQLDialect extends Dialect {
|
|
|
100
148
|
return `LIMIT ${limit} OFFSET ${offset}`;
|
|
101
149
|
}
|
|
102
150
|
formatCreateTable(tableName, columns) {
|
|
103
|
-
return `CREATE TABLE IF NOT EXISTS ${this.quoteIdentifier(tableName)} (${columns.join(', ')})`;
|
|
151
|
+
return `CREATE TABLE IF NOT EXISTS ${this.quoteIdentifier(String(tableName))} (${columns.join(', ')})`;
|
|
104
152
|
}
|
|
105
153
|
formatColumnDefinition(field, column) {
|
|
106
154
|
const name = this.quoteIdentifier(String(field));
|
|
@@ -115,18 +163,89 @@ export class PostgreSQLDialect extends Dialect {
|
|
|
115
163
|
return `${name} ${type}${length}${primary}${unique}${nullable}${defaultVal}`;
|
|
116
164
|
}
|
|
117
165
|
formatAlterTable(tableName, alterations) {
|
|
118
|
-
return `ALTER TABLE ${this.quoteIdentifier(tableName)} ${alterations.join(', ')}`;
|
|
166
|
+
return `ALTER TABLE ${this.quoteIdentifier(String(tableName))} ${alterations.join(', ')}`;
|
|
119
167
|
}
|
|
120
168
|
formatDropTable(tableName, ifExists) {
|
|
121
169
|
const ifExistsClause = ifExists ? 'IF EXISTS ' : '';
|
|
122
|
-
return `DROP TABLE ${ifExistsClause}${this.quoteIdentifier(tableName)}`;
|
|
170
|
+
return `DROP TABLE ${ifExistsClause}${this.quoteIdentifier(String(tableName))}`;
|
|
123
171
|
}
|
|
124
172
|
formatDropIndex(indexName, tableName, ifExists) {
|
|
125
173
|
const ifExistsClause = ifExists ? 'IF EXISTS ' : '';
|
|
126
174
|
return `DROP INDEX ${ifExistsClause}${this.quoteIdentifier(indexName)}`;
|
|
127
175
|
}
|
|
176
|
+
// ============================================================================
|
|
177
|
+
// Transaction Support
|
|
178
|
+
// ============================================================================
|
|
179
|
+
/**
|
|
180
|
+
* PostgreSQL 支持事务
|
|
181
|
+
*/
|
|
182
|
+
supportsTransactions() {
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* 开始事务
|
|
187
|
+
* 在连接池模式下,会获取一个专用连接用于事务
|
|
188
|
+
*/
|
|
189
|
+
async beginTransaction(options) {
|
|
190
|
+
if (this.usePool) {
|
|
191
|
+
// 从连接池获取一个连接用于事务
|
|
192
|
+
const client = await this.pool.connect();
|
|
193
|
+
// 开始事务(可以带隔离级别)
|
|
194
|
+
let beginSql = 'BEGIN';
|
|
195
|
+
if (options?.isolationLevel) {
|
|
196
|
+
beginSql = `BEGIN ISOLATION LEVEL ${this.formatIsolationLevel(options.isolationLevel)}`;
|
|
197
|
+
}
|
|
198
|
+
await client.query(beginSql);
|
|
199
|
+
return {
|
|
200
|
+
async commit() {
|
|
201
|
+
try {
|
|
202
|
+
await client.query('COMMIT');
|
|
203
|
+
}
|
|
204
|
+
finally {
|
|
205
|
+
client.release(); // 归还连接到池
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
async rollback() {
|
|
209
|
+
try {
|
|
210
|
+
await client.query('ROLLBACK');
|
|
211
|
+
}
|
|
212
|
+
finally {
|
|
213
|
+
client.release(); // 归还连接到池
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
async query(sql, params) {
|
|
217
|
+
const result = await client.query(sql, params);
|
|
218
|
+
return result.rows;
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
// 单连接模式
|
|
224
|
+
const dialect = this;
|
|
225
|
+
// 开始事务(可以带隔离级别)
|
|
226
|
+
let beginSql = 'BEGIN';
|
|
227
|
+
if (options?.isolationLevel) {
|
|
228
|
+
beginSql = `BEGIN ISOLATION LEVEL ${this.formatIsolationLevel(options.isolationLevel)}`;
|
|
229
|
+
}
|
|
230
|
+
await this.query(beginSql);
|
|
231
|
+
return {
|
|
232
|
+
async commit() {
|
|
233
|
+
await dialect.query('COMMIT');
|
|
234
|
+
},
|
|
235
|
+
async rollback() {
|
|
236
|
+
await dialect.query('ROLLBACK');
|
|
237
|
+
},
|
|
238
|
+
async query(sql, params) {
|
|
239
|
+
return dialect.query(sql, params);
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
export class PG extends RelatedDatabase {
|
|
246
|
+
constructor(config, definitions) {
|
|
247
|
+
super(new PostgreSQLDialect(config), definitions);
|
|
248
|
+
}
|
|
128
249
|
}
|
|
129
|
-
Registry.register('pg',
|
|
130
|
-
return new RelatedDatabase(new PostgreSQLDialect(config), definitions);
|
|
131
|
-
});
|
|
250
|
+
Registry.register('pg', PG);
|
|
132
251
|
//# sourceMappingURL=pg.js.map
|
package/lib/dialects/pg.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pg.js","sourceRoot":"","sources":["../../src/dialects/pg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAC,eAAe,EAAC,MAAM,6BAA6B,CAAC;AAE5D,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"pg.js","sourceRoot":"","sources":["../../src/dialects/pg.ts"],"names":[],"mappings":"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"}
|
package/lib/dialects/redis.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { Dialect } from "../base/index.js";
|
|
2
|
+
import { KeyValueDatabase } from "../type/keyvalue/database.js";
|
|
3
|
+
import { Database } from "../base/index.js";
|
|
2
4
|
import type { RedisClientOptions } from 'redis';
|
|
3
5
|
import { BuildQueryResult, KeyValueQueryResult, DatabaseDialect, QueryParams } from "../types.js";
|
|
4
6
|
export interface RedisDialectConfig extends RedisClientOptions {
|
|
5
7
|
}
|
|
6
|
-
export declare class RedisDialect extends Dialect<RedisDialectConfig, KeyValueQueryResult> {
|
|
8
|
+
export declare class RedisDialect<S extends Record<string, object> = Record<string, object>> extends Dialect<RedisDialectConfig, S, KeyValueQueryResult> {
|
|
7
9
|
private client;
|
|
8
10
|
constructor(config: RedisDialectConfig);
|
|
9
11
|
/**
|
|
@@ -41,7 +43,7 @@ export declare class RedisDialect extends Dialect<RedisDialectConfig, KeyValueQu
|
|
|
41
43
|
/**
|
|
42
44
|
* 构建查询
|
|
43
45
|
*/
|
|
44
|
-
buildQuery<
|
|
46
|
+
buildQuery<T extends keyof S>(params: QueryParams<S, T>): BuildQueryResult<KeyValueQueryResult>;
|
|
45
47
|
mapColumnType(type: string): string;
|
|
46
48
|
quoteIdentifier(identifier: string): string;
|
|
47
49
|
getParameterPlaceholder(index: number): string;
|
|
@@ -54,10 +56,10 @@ export declare class RedisDialect extends Dialect<RedisDialectConfig, KeyValueQu
|
|
|
54
56
|
formatLimit(limit: number): string;
|
|
55
57
|
formatOffset(offset: number): string;
|
|
56
58
|
formatLimitOffset(limit: number, offset: number): string;
|
|
57
|
-
formatCreateTable(tableName:
|
|
58
|
-
formatAlterTable(tableName:
|
|
59
|
-
formatDropTable(tableName:
|
|
60
|
-
formatDropIndex(indexName: string, tableName:
|
|
59
|
+
formatCreateTable(tableName: keyof S, columns: string[]): string;
|
|
60
|
+
formatAlterTable(tableName: keyof S, alterations: string[]): string;
|
|
61
|
+
formatDropTable(tableName: keyof S, ifExists?: boolean): string;
|
|
62
|
+
formatDropIndex(indexName: string, tableName: keyof S, ifExists?: boolean): string;
|
|
61
63
|
private buildCreateQuery;
|
|
62
64
|
private buildSelectQuery;
|
|
63
65
|
private buildInsertQuery;
|
|
@@ -84,4 +86,7 @@ export declare class RedisDialect extends Dialect<RedisDialectConfig, KeyValueQu
|
|
|
84
86
|
private executeKeysByPattern;
|
|
85
87
|
get dialectInfo(): DatabaseDialect;
|
|
86
88
|
}
|
|
89
|
+
export declare class Redis<S extends Record<string, object> = Record<string, object>> extends KeyValueDatabase<RedisDialectConfig, S> {
|
|
90
|
+
constructor(config: RedisDialectConfig, definitions?: Database.DefinitionObj<S>);
|
|
91
|
+
}
|
|
87
92
|
//# sourceMappingURL=redis.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/dialects/redis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/dialects/redis.ts"],"names":[],"mappings":"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"}
|
package/lib/dialects/redis.js
CHANGED
|
@@ -191,22 +191,22 @@ export class RedisDialect extends Dialect {
|
|
|
191
191
|
return `${limit},${offset}`;
|
|
192
192
|
}
|
|
193
193
|
formatCreateTable(tableName, columns) {
|
|
194
|
-
return `CREATE TABLE ${tableName} (${columns.join(',')})`;
|
|
194
|
+
return `CREATE TABLE ${String(tableName)} (${columns.join(',')})`;
|
|
195
195
|
}
|
|
196
196
|
formatAlterTable(tableName, alterations) {
|
|
197
|
-
return `ALTER TABLE ${tableName} ${alterations.join(',')}`;
|
|
197
|
+
return `ALTER TABLE ${String(tableName)} ${alterations.join(',')}`;
|
|
198
198
|
}
|
|
199
199
|
formatDropTable(tableName, ifExists) {
|
|
200
|
-
return `DROP TABLE ${tableName} ${ifExists ? 'IF EXISTS' : ''}`;
|
|
200
|
+
return `DROP TABLE ${String(tableName)} ${ifExists ? 'IF EXISTS' : ''}`;
|
|
201
201
|
}
|
|
202
202
|
formatDropIndex(indexName, tableName, ifExists) {
|
|
203
|
-
return `DROP INDEX ${indexName} ON ${tableName} ${ifExists ? 'IF EXISTS' : ''}`;
|
|
203
|
+
return `DROP INDEX ${indexName} ON ${String(tableName)} ${ifExists ? 'IF EXISTS' : ''}`;
|
|
204
204
|
}
|
|
205
205
|
// Redis 特定的查询构建方法
|
|
206
206
|
buildCreateQuery(params) {
|
|
207
207
|
return {
|
|
208
208
|
query: {
|
|
209
|
-
bucket: params.tableName,
|
|
209
|
+
bucket: String(params.tableName),
|
|
210
210
|
operation: 'keys'
|
|
211
211
|
},
|
|
212
212
|
params: []
|
|
@@ -494,7 +494,10 @@ export class RedisDialect extends Dialect {
|
|
|
494
494
|
};
|
|
495
495
|
}
|
|
496
496
|
}
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
497
|
+
export class Redis extends KeyValueDatabase {
|
|
498
|
+
constructor(config, definitions) {
|
|
499
|
+
super(new RedisDialect(config), definitions);
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
Registry.register('redis', Redis);
|
|
500
503
|
//# sourceMappingURL=redis.js.map
|