linkgress-orm 0.1.17 → 0.1.19
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/dist/database/database-client.interface.d.ts +29 -0
- package/dist/database/database-client.interface.d.ts.map +1 -1
- package/dist/database/database-client.interface.js +45 -1
- package/dist/database/database-client.interface.js.map +1 -1
- package/dist/database/pg-client.d.ts +5 -0
- package/dist/database/pg-client.d.ts.map +1 -1
- package/dist/database/pg-client.js +27 -0
- package/dist/database/pg-client.js.map +1 -1
- package/dist/database/postgres-client.d.ts +6 -0
- package/dist/database/postgres-client.d.ts.map +1 -1
- package/dist/database/postgres-client.js +17 -0
- package/dist/database/postgres-client.js.map +1 -1
- package/dist/entity/db-column.d.ts +17 -0
- package/dist/entity/db-column.d.ts.map +1 -1
- package/dist/entity/db-column.js.map +1 -1
- package/dist/entity/db-context.d.ts +134 -25
- package/dist/entity/db-context.d.ts.map +1 -1
- package/dist/entity/db-context.js +237 -174
- package/dist/entity/db-context.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/query/cte-builder.d.ts +1 -1
- package/dist/query/cte-builder.js +8 -8
- package/dist/query/cte-builder.js.map +1 -1
- package/dist/query/grouped-query.d.ts +8 -0
- package/dist/query/grouped-query.d.ts.map +1 -1
- package/dist/query/grouped-query.js +12 -0
- package/dist/query/grouped-query.js.map +1 -1
- package/dist/query/query-builder.d.ts +13 -2
- package/dist/query/query-builder.d.ts.map +1 -1
- package/dist/query/query-builder.js +128 -42
- package/dist/query/query-builder.js.map +1 -1
- package/dist/query/sql-utils.d.ts +2 -0
- package/dist/query/sql-utils.d.ts.map +1 -1
- package/dist/query/sql-utils.js +24 -7
- package/dist/query/sql-utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -28,6 +28,10 @@ export interface PooledConnection {
|
|
|
28
28
|
* Base database client interface that all drivers must implement
|
|
29
29
|
*/
|
|
30
30
|
export declare abstract class DatabaseClient {
|
|
31
|
+
/**
|
|
32
|
+
* Whether this client is currently in a transaction
|
|
33
|
+
*/
|
|
34
|
+
isInTransaction(): boolean;
|
|
31
35
|
/**
|
|
32
36
|
* Execute a query with optional parameters and execution options
|
|
33
37
|
*/
|
|
@@ -44,6 +48,14 @@ export declare abstract class DatabaseClient {
|
|
|
44
48
|
* Get the driver name (postgres, pg, mysql, etc.)
|
|
45
49
|
*/
|
|
46
50
|
abstract getDriverName(): string;
|
|
51
|
+
/**
|
|
52
|
+
* Execute a callback within a transaction.
|
|
53
|
+
* The transaction is automatically committed on success or rolled back on error.
|
|
54
|
+
*
|
|
55
|
+
* @param callback - Function to execute within the transaction. Receives a query function.
|
|
56
|
+
* @returns The result of the callback
|
|
57
|
+
*/
|
|
58
|
+
abstract transaction<T>(callback: (query: (sql: string, params?: any[]) => Promise<QueryResult>) => Promise<T>): Promise<T>;
|
|
47
59
|
/**
|
|
48
60
|
* Check if the driver supports executing multiple SQL statements in a single query
|
|
49
61
|
* and returning multiple result sets.
|
|
@@ -58,4 +70,21 @@ export declare abstract class DatabaseClient {
|
|
|
58
70
|
*/
|
|
59
71
|
supportsBinaryProtocol(): boolean;
|
|
60
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* A wrapper client that routes queries through a transactional connection.
|
|
75
|
+
* Used internally to ensure all operations within a transaction use the same connection.
|
|
76
|
+
*/
|
|
77
|
+
export declare class TransactionalClient extends DatabaseClient {
|
|
78
|
+
private queryFn;
|
|
79
|
+
private parentClient;
|
|
80
|
+
constructor(queryFn: (sql: string, params?: any[]) => Promise<QueryResult>, parentClient: DatabaseClient);
|
|
81
|
+
isInTransaction(): boolean;
|
|
82
|
+
query<T = any>(sql: string, params?: any[], _options?: QueryExecutionOptions): Promise<QueryResult<T>>;
|
|
83
|
+
connect(): Promise<PooledConnection>;
|
|
84
|
+
end(): Promise<void>;
|
|
85
|
+
getDriverName(): string;
|
|
86
|
+
transaction<T>(_callback: (query: (sql: string, params?: any[]) => Promise<QueryResult>) => Promise<T>): Promise<T>;
|
|
87
|
+
supportsMultiStatementQueries(): boolean;
|
|
88
|
+
supportsBinaryProtocol(): boolean;
|
|
89
|
+
}
|
|
61
90
|
//# sourceMappingURL=database-client.interface.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database-client.interface.d.ts","sourceRoot":"","sources":["../../src/database/database-client.interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG;IAClC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACtG,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,8BAAsB,cAAc;IAClC;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAE9G;;OAEG;IACH,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAE7C;;OAEG;IACH,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,aAAa,IAAI,MAAM;IAEhC;;;;;;OAMG;IACH,6BAA6B,IAAI,OAAO;IAIxC;;;OAGG;IACH,sBAAsB,IAAI,OAAO;CAGlC"}
|
|
1
|
+
{"version":3,"file":"database-client.interface.d.ts","sourceRoot":"","sources":["../../src/database/database-client.interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG;IAClC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACtG,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,8BAAsB,cAAc;IAClC;;OAEG;IACH,eAAe,IAAI,OAAO;IAG1B;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAE9G;;OAEG;IACH,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAE7C;;OAEG;IACH,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,aAAa,IAAI,MAAM;IAEhC;;;;;;OAMG;IACH,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAE3H;;;;;;OAMG;IACH,6BAA6B,IAAI,OAAO;IAIxC;;;OAGG;IACH,sBAAsB,IAAI,OAAO;CAGlC;AAED;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,cAAc;IAEnD,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,YAAY;gBADZ,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC,EAC9D,YAAY,EAAE,cAAc;IAKtC,eAAe,IAAI,OAAO;IAIpB,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAItG,OAAO,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAKpC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAI1B,aAAa,IAAI,MAAM;IAIjB,WAAW,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAKzH,6BAA6B,IAAI,OAAO;IAIxC,sBAAsB,IAAI,OAAO;CAGlC"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DatabaseClient = void 0;
|
|
3
|
+
exports.TransactionalClient = exports.DatabaseClient = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* Base database client interface that all drivers must implement
|
|
6
6
|
*/
|
|
7
7
|
class DatabaseClient {
|
|
8
|
+
/**
|
|
9
|
+
* Whether this client is currently in a transaction
|
|
10
|
+
*/
|
|
11
|
+
isInTransaction() {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
8
14
|
/**
|
|
9
15
|
* Check if the driver supports executing multiple SQL statements in a single query
|
|
10
16
|
* and returning multiple result sets.
|
|
@@ -24,4 +30,42 @@ class DatabaseClient {
|
|
|
24
30
|
}
|
|
25
31
|
}
|
|
26
32
|
exports.DatabaseClient = DatabaseClient;
|
|
33
|
+
/**
|
|
34
|
+
* A wrapper client that routes queries through a transactional connection.
|
|
35
|
+
* Used internally to ensure all operations within a transaction use the same connection.
|
|
36
|
+
*/
|
|
37
|
+
class TransactionalClient extends DatabaseClient {
|
|
38
|
+
constructor(queryFn, parentClient) {
|
|
39
|
+
super();
|
|
40
|
+
this.queryFn = queryFn;
|
|
41
|
+
this.parentClient = parentClient;
|
|
42
|
+
}
|
|
43
|
+
isInTransaction() {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
async query(sql, params, _options) {
|
|
47
|
+
return await this.queryFn(sql, params);
|
|
48
|
+
}
|
|
49
|
+
async connect() {
|
|
50
|
+
// In a transaction, we shouldn't allow getting a new connection
|
|
51
|
+
throw new Error('Cannot get a new connection while in a transaction');
|
|
52
|
+
}
|
|
53
|
+
async end() {
|
|
54
|
+
// No-op - the parent client manages the connection lifecycle
|
|
55
|
+
}
|
|
56
|
+
getDriverName() {
|
|
57
|
+
return this.parentClient.getDriverName();
|
|
58
|
+
}
|
|
59
|
+
async transaction(_callback) {
|
|
60
|
+
// Nested transactions not supported - could implement savepoints in the future
|
|
61
|
+
throw new Error('Nested transactions are not supported');
|
|
62
|
+
}
|
|
63
|
+
supportsMultiStatementQueries() {
|
|
64
|
+
return this.parentClient.supportsMultiStatementQueries();
|
|
65
|
+
}
|
|
66
|
+
supportsBinaryProtocol() {
|
|
67
|
+
return this.parentClient.supportsBinaryProtocol();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.TransactionalClient = TransactionalClient;
|
|
27
71
|
//# sourceMappingURL=database-client.interface.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database-client.interface.js","sourceRoot":"","sources":["../../src/database/database-client.interface.ts"],"names":[],"mappings":";;;AA6BA;;GAEG;AACH,MAAsB,cAAc;
|
|
1
|
+
{"version":3,"file":"database-client.interface.js","sourceRoot":"","sources":["../../src/database/database-client.interface.ts"],"names":[],"mappings":";;;AA6BA;;GAEG;AACH,MAAsB,cAAc;IAClC;;OAEG;IACH,eAAe;QACb,OAAO,KAAK,CAAC;IACf,CAAC;IA8BD;;;;;;OAMG;IACH,6BAA6B;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACH,sBAAsB;QACpB,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAtDD,wCAsDC;AAED;;;GAGG;AACH,MAAa,mBAAoB,SAAQ,cAAc;IACrD,YACU,OAA8D,EAC9D,YAA4B;QAEpC,KAAK,EAAE,CAAC;QAHA,YAAO,GAAP,OAAO,CAAuD;QAC9D,iBAAY,GAAZ,YAAY,CAAgB;IAGtC,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAK,CAAU,GAAW,EAAE,MAAc,EAAE,QAAgC;QAChF,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAmB,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,OAAO;QACX,gEAAgE;QAChE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,GAAG;QACP,6DAA6D;IAC/D,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,WAAW,CAAI,SAAuF;QAC1G,+EAA+E;QAC/E,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,6BAA6B;QAC3B,OAAO,IAAI,CAAC,YAAY,CAAC,6BAA6B,EAAE,CAAC;IAC3D,CAAC;IAED,sBAAsB;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC;IACpD,CAAC;CACF;AAzCD,kDAyCC"}
|
|
@@ -20,6 +20,11 @@ export declare class PgClient extends DatabaseClient {
|
|
|
20
20
|
connect(): Promise<PooledConnection>;
|
|
21
21
|
end(): Promise<void>;
|
|
22
22
|
getDriverName(): string;
|
|
23
|
+
/**
|
|
24
|
+
* Execute a callback within a transaction.
|
|
25
|
+
* Uses pg's connection-based transaction with BEGIN/COMMIT/ROLLBACK.
|
|
26
|
+
*/
|
|
27
|
+
transaction<T>(callback: (query: (sql: string, params?: any[]) => Promise<QueryResult>) => Promise<T>): Promise<T>;
|
|
23
28
|
/**
|
|
24
29
|
* pg library does NOT support retrieving ALL result sets from multi-statement queries
|
|
25
30
|
* It only returns the last result, making it unsuitable for the fully optimized approach
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pg-client.d.ts","sourceRoot":"","sources":["../../src/database/pg-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACnH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C,KAAK,IAAI,GAAG,GAAG,CAAC;AAmChB;;;;;;GAMG;AACH,qBAAa,QAAS,SAAQ,cAAc;IAC1C,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,cAAc,CAAU;IAEhC;;;OAGG;gBACS,MAAM,EAAE,UAAU,GAAG,IAAI;IAsB/B,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAcrG,OAAO,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAKpC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAO1B,aAAa,IAAI,MAAM;IAIvB;;;;OAIG;IACH,6BAA6B,IAAI,OAAO;IAIxC;;OAEG;IACH,sBAAsB,IAAI,OAAO;IAIjC;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB"}
|
|
1
|
+
{"version":3,"file":"pg-client.d.ts","sourceRoot":"","sources":["../../src/database/pg-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACnH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C,KAAK,IAAI,GAAG,GAAG,CAAC;AAmChB;;;;;;GAMG;AACH,qBAAa,QAAS,SAAQ,cAAc;IAC1C,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,cAAc,CAAU;IAEhC;;;OAGG;gBACS,MAAM,EAAE,UAAU,GAAG,IAAI;IAsB/B,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAcrG,OAAO,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAKpC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAO1B,aAAa,IAAI,MAAM;IAIvB;;;OAGG;IACG,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAyBxH;;;;OAIG;IACH,6BAA6B,IAAI,OAAO;IAIxC;;OAEG;IACH,sBAAsB,IAAI,OAAO;IAIjC;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB"}
|
|
@@ -86,6 +86,33 @@ class PgClient extends database_client_interface_1.DatabaseClient {
|
|
|
86
86
|
getDriverName() {
|
|
87
87
|
return 'pg';
|
|
88
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* Execute a callback within a transaction.
|
|
91
|
+
* Uses pg's connection-based transaction with BEGIN/COMMIT/ROLLBACK.
|
|
92
|
+
*/
|
|
93
|
+
async transaction(callback) {
|
|
94
|
+
const client = await this.pool.connect();
|
|
95
|
+
try {
|
|
96
|
+
await client.query('BEGIN');
|
|
97
|
+
const queryFn = async (sql, params) => {
|
|
98
|
+
const result = await client.query(sql, params);
|
|
99
|
+
return {
|
|
100
|
+
rows: result.rows,
|
|
101
|
+
rowCount: result.rowCount,
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
const result = await callback(queryFn);
|
|
105
|
+
await client.query('COMMIT');
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
await client.query('ROLLBACK');
|
|
110
|
+
throw error;
|
|
111
|
+
}
|
|
112
|
+
finally {
|
|
113
|
+
client.release();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
89
116
|
/**
|
|
90
117
|
* pg library does NOT support retrieving ALL result sets from multi-statement queries
|
|
91
118
|
* It only returns the last result, making it unsuitable for the fully optimized approach
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pg-client.js","sourceRoot":"","sources":["../../src/database/pg-client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pg-client.js","sourceRoot":"","sources":["../../src/database/pg-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,8 +38,14 @@ export declare class PostgresClient extends DatabaseClient {
|
|
|
38
38
|
querySimpleMulti(sql: string): Promise<QueryResult[]>;
|
|
39
39
|
/**
|
|
40
40
|
* Begin a transaction using postgres library's built-in transaction support
|
|
41
|
+
* @deprecated Use transaction() method instead for cross-driver compatibility
|
|
41
42
|
*/
|
|
42
43
|
begin<T>(callback: (sql: Sql) => Promise<T>): Promise<T>;
|
|
44
|
+
/**
|
|
45
|
+
* Execute a callback within a transaction.
|
|
46
|
+
* Uses postgres library's built-in sql.begin() for proper transaction handling.
|
|
47
|
+
*/
|
|
48
|
+
transaction<T>(callback: (query: (sql: string, params?: any[]) => Promise<QueryResult>) => Promise<T>): Promise<T>;
|
|
43
49
|
/**
|
|
44
50
|
* postgres library automatically uses binary protocol where appropriate
|
|
45
51
|
* No explicit toggle needed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-client.d.ts","sourceRoot":"","sources":["../../src/database/postgres-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACnH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG/C,KAAK,GAAG,GAAG,GAAG,CAAC;AAgCf;;;;;;GAMG;AACH,qBAAa,cAAe,SAAQ,cAAc;IAChD,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,cAAc,CAAU;IAEhC;;;OAGG;gBACS,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,GAAG;IAsB5C,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAWrG,OAAO,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAOpC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAO1B,aAAa,IAAI,MAAM;IAIvB;;;OAGG;IACH,6BAA6B,IAAI,OAAO;IAIxC;;;;OAIG;IACG,WAAW,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAahE;;;OAGG;IACG,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAU3D
|
|
1
|
+
{"version":3,"file":"postgres-client.d.ts","sourceRoot":"","sources":["../../src/database/postgres-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACnH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG/C,KAAK,GAAG,GAAG,GAAG,CAAC;AAgCf;;;;;;GAMG;AACH,qBAAa,cAAe,SAAQ,cAAc;IAChD,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,cAAc,CAAU;IAEhC;;;OAGG;gBACS,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,GAAG;IAsB5C,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAWrG,OAAO,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAOpC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAO1B,aAAa,IAAI,MAAM;IAIvB;;;OAGG;IACH,6BAA6B,IAAI,OAAO;IAIxC;;;;OAIG;IACG,WAAW,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAahE;;;OAGG;IACG,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAU3D;;;OAGG;IACG,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI9D;;;OAGG;IACG,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAcxH;;;OAGG;IACH,sBAAsB,IAAI,OAAO;IAIjC;;OAEG;IACH,MAAM,IAAI,GAAG;CAGd"}
|
|
@@ -121,10 +121,27 @@ class PostgresClient extends database_client_interface_1.DatabaseClient {
|
|
|
121
121
|
}
|
|
122
122
|
/**
|
|
123
123
|
* Begin a transaction using postgres library's built-in transaction support
|
|
124
|
+
* @deprecated Use transaction() method instead for cross-driver compatibility
|
|
124
125
|
*/
|
|
125
126
|
async begin(callback) {
|
|
126
127
|
return await this.sql.begin(callback);
|
|
127
128
|
}
|
|
129
|
+
/**
|
|
130
|
+
* Execute a callback within a transaction.
|
|
131
|
+
* Uses postgres library's built-in sql.begin() for proper transaction handling.
|
|
132
|
+
*/
|
|
133
|
+
async transaction(callback) {
|
|
134
|
+
return await this.sql.begin(async (sql) => {
|
|
135
|
+
const queryFn = async (sqlStr, params) => {
|
|
136
|
+
const result = await sql.unsafe(sqlStr, params || []);
|
|
137
|
+
return {
|
|
138
|
+
rows: result,
|
|
139
|
+
rowCount: result.count ?? null,
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
return await callback(queryFn);
|
|
143
|
+
});
|
|
144
|
+
}
|
|
128
145
|
/**
|
|
129
146
|
* postgres library automatically uses binary protocol where appropriate
|
|
130
147
|
* No explicit toggle needed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-client.js","sourceRoot":"","sources":["../../src/database/postgres-client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"postgres-client.js","sourceRoot":"","sources":["../../src/database/postgres-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -81,6 +81,23 @@ type UnwrapOptionalDbColumn<T> = T extends DbColumn<infer V> | undefined ? V : T
|
|
|
81
81
|
export type ExtractDbColumns<T> = {
|
|
82
82
|
[K in keyof T as IncludesDbColumn<T[K]> extends true ? K : never]: UnwrapOptionalDbColumn<T[K]>;
|
|
83
83
|
};
|
|
84
|
+
/**
|
|
85
|
+
* Type helper to extract just the keys of DbColumn properties from an entity.
|
|
86
|
+
* Returns a union of string literal types representing the column property names.
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```typescript
|
|
90
|
+
* interface User {
|
|
91
|
+
* id: DbColumn<number>;
|
|
92
|
+
* username: DbColumn<string>;
|
|
93
|
+
* posts: Post[]; // navigation property
|
|
94
|
+
* }
|
|
95
|
+
*
|
|
96
|
+
* type UserColumnKeys = ExtractDbColumnKeys<User>;
|
|
97
|
+
* // Result: 'id' | 'username'
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
export type ExtractDbColumnKeys<T> = keyof ExtractDbColumns<T> & string;
|
|
84
101
|
/**
|
|
85
102
|
* Type for insert data - only includes DbColumn properties, unwrapped to their values
|
|
86
103
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-column.d.ts","sourceRoot":"","sources":["../../src/entity/db-column.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"db-column.d.ts","sourceRoot":"","sources":["../../src/entity/db-column.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-column.js","sourceRoot":"","sources":["../../src/entity/db-column.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"db-column.js","sourceRoot":"","sources":["../../src/entity/db-column.ts"],"names":[],"mappings":";;;AAgKA,gCAEC;AAlKD;;;;;GAKG;AACH,MAAa,QAAQ;IAanB;IACE,gBAAgB;IAChB,UAAkB;QAdpB,gBAAgB;QACP,iBAAY,GAAG,IAAI,CAAC;QAe3B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;IACnC,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;CACF;AA5BD,4BA4BC;AA2HD;;GAEG;AACH,SAAgB,UAAU,CAAC,KAAU;IACnC,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC;AAC3E,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DatabaseClient, QueryResult } from '../database/database-client.interface';
|
|
2
2
|
import { TableBuilder, TableSchema, InferTableType } from '../schema/table-builder';
|
|
3
|
-
import { UnwrapDbColumns, InsertData, ExtractDbColumns } from './db-column';
|
|
3
|
+
import { UnwrapDbColumns, InsertData, ExtractDbColumns, ExtractDbColumnKeys } from './db-column';
|
|
4
4
|
import { DbEntity, EntityConstructor } from './entity-base';
|
|
5
5
|
import { DbModelConfig } from './model-config';
|
|
6
6
|
import { Condition, SqlFragment, UnwrapSelection, FieldRef } from '../query/conditions';
|
|
@@ -13,6 +13,40 @@ import type { DbCte } from '../query/cte-builder';
|
|
|
13
13
|
* Collection aggregation strategy type
|
|
14
14
|
*/
|
|
15
15
|
export type CollectionStrategyType = 'cte' | 'temptable' | 'lateral';
|
|
16
|
+
/**
|
|
17
|
+
* Column information returned by getColumns()
|
|
18
|
+
*
|
|
19
|
+
* @typeParam TEntity - The entity type, used to strongly type propertyName as one of the entity's column keys
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* // With typed entity
|
|
24
|
+
* const columns: ColumnInfo<User>[] = db.users.getColumns();
|
|
25
|
+
* columns[0].propertyName; // Type: 'id' | 'username' | 'email' | ... (only column keys)
|
|
26
|
+
*
|
|
27
|
+
* // Get just the property names as a typed array
|
|
28
|
+
* const keys = db.users.getColumnKeys();
|
|
29
|
+
* // Type: Array<'id' | 'username' | 'email' | ...>
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export interface ColumnInfo<TEntity = any> {
|
|
33
|
+
/** Property name in the entity class (TypeScript name) - typed as keyof entity columns */
|
|
34
|
+
propertyName: ExtractDbColumnKeys<TEntity>;
|
|
35
|
+
/** Column name in the database */
|
|
36
|
+
columnName: string;
|
|
37
|
+
/** SQL type (e.g., 'integer', 'varchar', 'timestamp') */
|
|
38
|
+
type: string;
|
|
39
|
+
/** Whether the column is a primary key */
|
|
40
|
+
isPrimaryKey: boolean;
|
|
41
|
+
/** Whether the column is auto-incremented (identity) */
|
|
42
|
+
isAutoIncrement: boolean;
|
|
43
|
+
/** Whether the column is nullable */
|
|
44
|
+
isNullable: boolean;
|
|
45
|
+
/** Whether the column has a unique constraint */
|
|
46
|
+
isUnique: boolean;
|
|
47
|
+
/** Default value if any */
|
|
48
|
+
defaultValue?: any;
|
|
49
|
+
}
|
|
16
50
|
/**
|
|
17
51
|
* Order direction for orderBy clauses
|
|
18
52
|
*/
|
|
@@ -185,6 +219,10 @@ export interface InsertConfig {
|
|
|
185
219
|
* Use OVERRIDING SYSTEM VALUE to allow inserting into identity/serial columns
|
|
186
220
|
*/
|
|
187
221
|
overridingSystemValue?: boolean;
|
|
222
|
+
/**
|
|
223
|
+
* Skip rows that would violate unique constraints (ON CONFLICT DO NOTHING)
|
|
224
|
+
*/
|
|
225
|
+
onConflictDoNothing?: boolean;
|
|
188
226
|
}
|
|
189
227
|
/**
|
|
190
228
|
* Upsert configuration
|
|
@@ -301,6 +339,8 @@ export interface FluentUpsert<TEntity extends DbEntity> extends PromiseLike<void
|
|
|
301
339
|
* Used with db.table.where(...).delete()
|
|
302
340
|
*/
|
|
303
341
|
export interface FluentDelete<TSelection> extends PromiseLike<void> {
|
|
342
|
+
/** Return the number of deleted rows */
|
|
343
|
+
affectedCount(): PromiseLike<number>;
|
|
304
344
|
/** Return all columns from the deleted rows */
|
|
305
345
|
returning(): PromiseLike<TSelection[]>;
|
|
306
346
|
/** Return selected columns from the deleted rows */
|
|
@@ -311,6 +351,8 @@ export interface FluentDelete<TSelection> extends PromiseLike<void> {
|
|
|
311
351
|
* Used with db.table.where(...).update(data)
|
|
312
352
|
*/
|
|
313
353
|
export interface FluentQueryUpdate<TSelection> extends PromiseLike<void> {
|
|
354
|
+
/** Return the number of updated rows */
|
|
355
|
+
affectedCount(): PromiseLike<number>;
|
|
314
356
|
/** Return all columns from the updated rows */
|
|
315
357
|
returning(): PromiseLike<TSelection[]>;
|
|
316
358
|
/** Return selected columns from the updated rows */
|
|
@@ -447,10 +489,6 @@ export declare class TableAccessor<TBuilder extends TableBuilder<any>> {
|
|
|
447
489
|
* Upsert a single chunk (internal method)
|
|
448
490
|
*/
|
|
449
491
|
private upsertBulkSingle;
|
|
450
|
-
/**
|
|
451
|
-
* Bulk insert multiple rows (simple version, kept for compatibility)
|
|
452
|
-
*/
|
|
453
|
-
insertMany(dataArray: Partial<InferTableType<TableSchema>>[]): Promise<InferTableType<TableSchema>[]>;
|
|
454
492
|
/**
|
|
455
493
|
* Insert with conflict resolution (upsert)
|
|
456
494
|
*/
|
|
@@ -496,6 +534,7 @@ export declare class DataContext<TSchema extends ContextSchema = any> {
|
|
|
496
534
|
private initializeSchema;
|
|
497
535
|
/**
|
|
498
536
|
* Get table accessor by name
|
|
537
|
+
* When in a transaction, creates a fresh accessor with the transactional client
|
|
499
538
|
*/
|
|
500
539
|
getTable<K extends keyof TSchema>(name: K): InferContextSchema<TSchema>[K];
|
|
501
540
|
/**
|
|
@@ -516,6 +555,8 @@ export declare class DataContext<TSchema extends ContextSchema = any> {
|
|
|
516
555
|
query<T = any>(sql: string, params?: any[]): Promise<T[]>;
|
|
517
556
|
/**
|
|
518
557
|
* Execute in transaction
|
|
558
|
+
* Uses the database client's native transaction support for proper handling
|
|
559
|
+
* across different drivers (pg uses BEGIN/COMMIT, postgres uses sql.begin())
|
|
519
560
|
*/
|
|
520
561
|
transaction<TResult>(fn: (ctx: this) => Promise<TResult>): Promise<TResult>;
|
|
521
562
|
/**
|
|
@@ -630,7 +671,8 @@ export interface EntityCollectionQuery<TEntity extends DbEntity> {
|
|
|
630
671
|
count(): SqlFragment<number>;
|
|
631
672
|
toNumberList(asName?: string): number[];
|
|
632
673
|
toStringList(asName?: string): string[];
|
|
633
|
-
toList(asName
|
|
674
|
+
toList(asName?: string): TEntity[];
|
|
675
|
+
firstOrDefault(asName?: string): TEntity | null;
|
|
634
676
|
}
|
|
635
677
|
export interface EntityCollectionQueryWithSelect<TEntity extends DbEntity, TSelection> {
|
|
636
678
|
where(condition: (item: EntityQuery<TEntity>) => Condition): this;
|
|
@@ -645,7 +687,8 @@ export interface EntityCollectionQueryWithSelect<TEntity extends DbEntity, TSele
|
|
|
645
687
|
count(): Promise<number>;
|
|
646
688
|
toNumberList(asName?: string): number[];
|
|
647
689
|
toStringList(asName?: string): string[];
|
|
648
|
-
toList(asName
|
|
690
|
+
toList(asName?: string): TSelection[];
|
|
691
|
+
firstOrDefault(asName?: string): TSelection | null;
|
|
649
692
|
}
|
|
650
693
|
/**
|
|
651
694
|
* Interface for queryable entity collections that can be filtered with .where()
|
|
@@ -819,6 +862,86 @@ export declare class DbEntityTable<TEntity extends DbEntity> {
|
|
|
819
862
|
* @internal
|
|
820
863
|
*/
|
|
821
864
|
_getCollectionStrategy(): CollectionStrategyType | undefined;
|
|
865
|
+
/**
|
|
866
|
+
* Get information about all columns in this table.
|
|
867
|
+
* This method returns metadata about database columns only, excluding navigation properties.
|
|
868
|
+
*
|
|
869
|
+
* @param options - Optional configuration
|
|
870
|
+
* @param options.includeNavigation - If false (default), only returns database columns.
|
|
871
|
+
* Navigation properties are never included as they are not columns.
|
|
872
|
+
*
|
|
873
|
+
* @returns Array of column information objects
|
|
874
|
+
*
|
|
875
|
+
* @example
|
|
876
|
+
* ```typescript
|
|
877
|
+
* // Get all columns
|
|
878
|
+
* const columns = db.users.getColumns();
|
|
879
|
+
* // Returns: [
|
|
880
|
+
* // { propertyName: 'id', columnName: 'id', type: 'integer', isPrimaryKey: true, ... },
|
|
881
|
+
* // { propertyName: 'username', columnName: 'username', type: 'varchar', ... },
|
|
882
|
+
* // { propertyName: 'email', columnName: 'email', type: 'text', ... },
|
|
883
|
+
* // ]
|
|
884
|
+
*
|
|
885
|
+
* // Get column names only
|
|
886
|
+
* const columnNames = db.users.getColumns().map(c => c.propertyName);
|
|
887
|
+
* // Returns: ['id', 'username', 'email', ...]
|
|
888
|
+
*
|
|
889
|
+
* // Get database column names
|
|
890
|
+
* const dbColumnNames = db.users.getColumns().map(c => c.columnName);
|
|
891
|
+
* // Returns: ['id', 'username', 'email', ...]
|
|
892
|
+
* ```
|
|
893
|
+
*/
|
|
894
|
+
getColumns(): ColumnInfo<TEntity>[];
|
|
895
|
+
/**
|
|
896
|
+
* Get an array of all column property names (keys) for this entity.
|
|
897
|
+
* Returns a strongly typed array where each element is a valid column key of TEntity.
|
|
898
|
+
*
|
|
899
|
+
* This is a convenience method equivalent to `getColumns().map(c => c.propertyName)`
|
|
900
|
+
* but with better type inference.
|
|
901
|
+
*
|
|
902
|
+
* @returns Array of column property names typed as ExtractDbColumnKeys<TEntity>
|
|
903
|
+
*
|
|
904
|
+
* @example
|
|
905
|
+
* ```typescript
|
|
906
|
+
* // Get all column keys
|
|
907
|
+
* const keys = db.users.getColumnKeys();
|
|
908
|
+
* // Type: ExtractDbColumnKeys<User>[] which is ('id' | 'username' | 'email' | ...)[]
|
|
909
|
+
*
|
|
910
|
+
* // Use for dynamic property access
|
|
911
|
+
* const user = await db.users.findOne(u => eq(u.id, 1));
|
|
912
|
+
* for (const key of db.users.getColumnKeys()) {
|
|
913
|
+
* console.log(`${key}: ${user[key]}`); // TypeScript knows key is valid
|
|
914
|
+
* }
|
|
915
|
+
*
|
|
916
|
+
* // Use for building dynamic queries
|
|
917
|
+
* const columnKeys = db.users.getColumnKeys();
|
|
918
|
+
* // columnKeys[0] is typed as 'id' | 'username' | 'email' | ...
|
|
919
|
+
* ```
|
|
920
|
+
*/
|
|
921
|
+
getColumnKeys(): ExtractDbColumnKeys<TEntity>[];
|
|
922
|
+
/**
|
|
923
|
+
* Get an object containing all entity properties as DbColumn references.
|
|
924
|
+
* Useful for building dynamic queries or accessing column metadata.
|
|
925
|
+
*
|
|
926
|
+
* @param options - Optional configuration
|
|
927
|
+
* @param options.excludeNavigation - If true (default), excludes navigation properties.
|
|
928
|
+
* Set to false to include navigation properties.
|
|
929
|
+
*
|
|
930
|
+
* @returns Object with property names as keys and their DbColumn/navigation references as values
|
|
931
|
+
*
|
|
932
|
+
* @example
|
|
933
|
+
* ```typescript
|
|
934
|
+
* // Get all column properties (excludes navigation by default)
|
|
935
|
+
* const cols = db.users.props();
|
|
936
|
+
* // Use in select: db.users.select(u => ({ id: cols.id, name: cols.username }))
|
|
937
|
+
*
|
|
938
|
+
* // Include navigation properties
|
|
939
|
+
* const allProps = db.users.props({ excludeNavigation: false });
|
|
940
|
+
* ```
|
|
941
|
+
*/
|
|
942
|
+
props(options?: {
|
|
943
|
+
excludeNavigation?: boolean;
|
|
944
|
+
}): EntityQuery<TEntity>;
|
|
822
945
|
/**
|
|
823
946
|
* Get qualified table name with schema prefix if specified
|
|
824
947
|
* @internal
|
|
@@ -926,23 +1049,6 @@ export declare class DbEntityTable<TEntity extends DbEntity> {
|
|
|
926
1049
|
* ```
|
|
927
1050
|
*/
|
|
928
1051
|
insert(data: InsertData<TEntity>): FluentInsert<TEntity>;
|
|
929
|
-
/**
|
|
930
|
-
* Insert multiple records
|
|
931
|
-
* Returns a fluent builder that can be awaited directly or chained with .returning()
|
|
932
|
-
*
|
|
933
|
-
* @example
|
|
934
|
-
* ```typescript
|
|
935
|
-
* // No returning (default) - returns void
|
|
936
|
-
* await db.users.insertMany([{ username: 'alice' }, { username: 'bob' }]);
|
|
937
|
-
*
|
|
938
|
-
* // With returning() - returns full entities
|
|
939
|
-
* const users = await db.users.insertMany([{ username: 'alice' }]).returning();
|
|
940
|
-
*
|
|
941
|
-
* // With returning(selector) - returns selected columns
|
|
942
|
-
* const results = await db.users.insertMany([{ username: 'alice' }]).returning(u => ({ id: u.id }));
|
|
943
|
-
* ```
|
|
944
|
-
*/
|
|
945
|
-
insertMany(data: InsertData<TEntity>[]): FluentInsertMany<TEntity>;
|
|
946
1052
|
/**
|
|
947
1053
|
* Upsert (insert or update on conflict)
|
|
948
1054
|
* Returns a fluent builder that can be awaited directly or chained with .returning()
|
|
@@ -973,8 +1079,11 @@ export declare class DbEntityTable<TEntity extends DbEntity> {
|
|
|
973
1079
|
* // With returning(selector) - returns selected columns
|
|
974
1080
|
* const results = await db.users.insertBulk([{ username: 'alice' }]).returning(u => ({ id: u.id }));
|
|
975
1081
|
*
|
|
976
|
-
* // With
|
|
1082
|
+
* // With chunk size
|
|
977
1083
|
* await db.users.insertBulk([{ username: 'alice' }], { chunkSize: 100 });
|
|
1084
|
+
*
|
|
1085
|
+
* // Skip duplicates (ON CONFLICT DO NOTHING)
|
|
1086
|
+
* await db.users.insertBulk([{ username: 'alice' }], { onConflictDoNothing: true });
|
|
978
1087
|
* ```
|
|
979
1088
|
*/
|
|
980
1089
|
insertBulk(value: InsertData<TEntity> | InsertData<TEntity>[], options?: InsertConfig): FluentInsertMany<TEntity>;
|