@prairielearn/postgres 1.3.0 → 1.5.0
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 +35 -0
- package/dist/default-pool.d.ts +21 -18
- package/dist/default-pool.js +5 -1
- package/dist/default-pool.js.map +1 -1
- package/dist/default-pool.test.js +1 -0
- package/dist/default-pool.test.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/pool.d.ts +56 -38
- package/dist/pool.js +113 -33
- package/dist/pool.js.map +1 -1
- package/package.json +5 -1
- package/src/default-pool.test.ts +1 -0
- package/src/default-pool.ts +3 -0
- package/src/index.ts +1 -0
- package/src/pool.ts +158 -48
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @prairielearn/postgres
|
|
2
2
|
|
|
3
|
+
## 1.5.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 5d0f08ecc: Don't start nested transactions in `runInTransactionAsync`
|
|
8
|
+
|
|
9
|
+
## 1.4.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- ce16bede7: Add `queryCursor` and `queryValidatedCursor` functions
|
|
14
|
+
|
|
3
15
|
## 1.3.0
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -156,6 +156,41 @@ const { user, course } = await sqldb.runInTransactionAsync(async () => {
|
|
|
156
156
|
|
|
157
157
|
`runInTransaction` will start a transaction and then execute the provided function. Any nested query will use the same client and thus run inside the transaction. If the function throws an error, the transaction is rolled back; otherwise, it is committed.
|
|
158
158
|
|
|
159
|
+
### Cursors
|
|
160
|
+
|
|
161
|
+
For very large queries that don't need to fit in memory all at once, it's possible to use a cursor to read a limited number of rows at a time.
|
|
162
|
+
|
|
163
|
+
```ts
|
|
164
|
+
import { queryCursor } from '@prairielearn/postgres';
|
|
165
|
+
|
|
166
|
+
const cursor = await queryCursor(sql.select_all_users, {});
|
|
167
|
+
for await (const users of cursor.iterate(100)) {
|
|
168
|
+
// `users` will have up to 100 rows in it.
|
|
169
|
+
for (const user of users) {
|
|
170
|
+
console.log(user);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
You can optionally pass a Zod schema to parse and validate each row:
|
|
176
|
+
|
|
177
|
+
```ts
|
|
178
|
+
import { z } from 'zod';
|
|
179
|
+
import { queryValidatedCursor } from '@prairielearn/postgres';
|
|
180
|
+
|
|
181
|
+
const UserSchema = z.object({
|
|
182
|
+
id: z.string(),
|
|
183
|
+
name: z.string(),
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
const cursor = await queryValidatedCursor(sql.select_all_users, {}, UserSchema);
|
|
187
|
+
for await (const users of cursor.iterate(100)) {
|
|
188
|
+
for (const user of users) {
|
|
189
|
+
console.log(user);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
159
194
|
### Callback-style functions
|
|
160
195
|
|
|
161
196
|
For most functions that return promises, there are corresponding versions that work with Node-style callbacks:
|
package/dist/default-pool.d.ts
CHANGED
|
@@ -8,24 +8,24 @@ export declare const close: (callback: (err: NodeJS.ErrnoException) => void) =>
|
|
|
8
8
|
export declare const closeAsync: () => Promise<void>;
|
|
9
9
|
export declare const getClientAsync: () => Promise<import("pg").PoolClient>;
|
|
10
10
|
export declare const getClient: (callback: (error: Error | null, client?: import("pg").PoolClient | undefined, done?: (() => void) | undefined) => void) => void;
|
|
11
|
-
export declare const queryWithClient: (arg1: import("pg").PoolClient, arg2: string, arg3:
|
|
12
|
-
export declare const queryWithClientAsync: (client: import("pg").PoolClient, sql: string, params:
|
|
13
|
-
export declare const queryWithClientOneRow: (arg1: import("pg").PoolClient, arg2: string, arg3:
|
|
14
|
-
export declare const queryWithClientOneRowAsync: (client: import("pg").PoolClient, sql: string, params:
|
|
15
|
-
export declare const queryWithClientZeroOrOneRow: (arg1: import("pg").PoolClient, arg2: string, arg3:
|
|
16
|
-
export declare const queryWithClientZeroOrOneRowAsync: (client: import("pg").PoolClient, sql: string, params:
|
|
11
|
+
export declare const queryWithClient: (arg1: import("pg").PoolClient, arg2: string, arg3: import("./pool").QueryParams, callback: (err: NodeJS.ErrnoException | null, result: import("pg").QueryResult<any>) => void) => void;
|
|
12
|
+
export declare const queryWithClientAsync: (client: import("pg").PoolClient, sql: string, params: import("./pool").QueryParams) => Promise<import("pg").QueryResult<any>>;
|
|
13
|
+
export declare const queryWithClientOneRow: (arg1: import("pg").PoolClient, arg2: string, arg3: import("./pool").QueryParams, callback: (err: NodeJS.ErrnoException | null, result: import("pg").QueryResult<any>) => void) => void;
|
|
14
|
+
export declare const queryWithClientOneRowAsync: (client: import("pg").PoolClient, sql: string, params: import("./pool").QueryParams) => Promise<import("pg").QueryResult<any>>;
|
|
15
|
+
export declare const queryWithClientZeroOrOneRow: (arg1: import("pg").PoolClient, arg2: string, arg3: import("./pool").QueryParams, callback: (err: NodeJS.ErrnoException | null, result: import("pg").QueryResult<any>) => void) => void;
|
|
16
|
+
export declare const queryWithClientZeroOrOneRowAsync: (client: import("pg").PoolClient, sql: string, params: import("./pool").QueryParams) => Promise<import("pg").QueryResult<any>>;
|
|
17
17
|
export declare const rollbackWithClientAsync: (client: import("pg").PoolClient) => Promise<void>;
|
|
18
18
|
export declare const rollbackWithClient: (client: import("pg").PoolClient, _done: (release?: any) => void, callback: (err: Error | null) => void) => void;
|
|
19
19
|
export declare const beginTransactionAsync: () => Promise<import("pg").PoolClient>;
|
|
20
20
|
export declare const endTransactionAsync: (client: import("pg").PoolClient, err: Error | null | undefined) => Promise<void>;
|
|
21
21
|
export declare const endTransaction: (client: import("pg").PoolClient, _done: (rollback?: any) => void, err: Error | null | undefined, callback: (error: Error | null) => void) => void;
|
|
22
22
|
export declare const runInTransactionAsync: <T>(fn: (client: import("pg").PoolClient) => Promise<T>) => Promise<T>;
|
|
23
|
-
export declare const query: (arg1: string, arg2:
|
|
24
|
-
export declare const queryAsync: (sql: string, params:
|
|
25
|
-
export declare const queryOneRow: (arg1: string, arg2:
|
|
26
|
-
export declare const queryOneRowAsync: (sql: string, params:
|
|
27
|
-
export declare const queryZeroOrOneRow: (arg1: string, arg2:
|
|
28
|
-
export declare const queryZeroOrOneRowAsync: (sql: string, params:
|
|
23
|
+
export declare const query: (arg1: string, arg2: import("./pool").QueryParams, callback: (err: NodeJS.ErrnoException | null, result: import("pg").QueryResult<any>) => void) => void;
|
|
24
|
+
export declare const queryAsync: (sql: string, params: import("./pool").QueryParams) => Promise<import("pg").QueryResult<any>>;
|
|
25
|
+
export declare const queryOneRow: (arg1: string, arg2: import("./pool").QueryParams, callback: (err: NodeJS.ErrnoException | null, result: import("pg").QueryResult<any>) => void) => void;
|
|
26
|
+
export declare const queryOneRowAsync: (sql: string, params: import("./pool").QueryParams) => Promise<import("pg").QueryResult<any>>;
|
|
27
|
+
export declare const queryZeroOrOneRow: (arg1: string, arg2: import("./pool").QueryParams, callback: (err: NodeJS.ErrnoException | null, result: import("pg").QueryResult<any>) => void) => void;
|
|
28
|
+
export declare const queryZeroOrOneRowAsync: (sql: string, params: import("./pool").QueryParams) => Promise<import("pg").QueryResult<any>>;
|
|
29
29
|
export declare const call: (arg1: string, arg2: any[], callback: (err: NodeJS.ErrnoException | null, result: import("pg").QueryResult<any>) => void) => void;
|
|
30
30
|
export declare const callAsync: (functionName: string, params: any[]) => Promise<import("pg").QueryResult<any>>;
|
|
31
31
|
export declare const callOneRow: (arg1: string, arg2: any[], callback: (err: NodeJS.ErrnoException | null, result: import("pg").QueryResult<any>) => void) => void;
|
|
@@ -38,15 +38,18 @@ export declare const callWithClientOneRow: (arg1: import("pg").PoolClient, arg2:
|
|
|
38
38
|
export declare const callWithClientOneRowAsync: (client: import("pg").PoolClient, functionName: string, params: any[]) => Promise<import("pg").QueryResult<any>>;
|
|
39
39
|
export declare const callWithClientZeroOrOneRow: (arg1: import("pg").PoolClient, arg2: string, arg3: any[], callback: (err: NodeJS.ErrnoException | null, result: import("pg").QueryResult<any>) => void) => void;
|
|
40
40
|
export declare const callWithClientZeroOrOneRowAsync: (client: import("pg").PoolClient, functionName: string, params: any[]) => Promise<import("pg").QueryResult<any>>;
|
|
41
|
-
export declare const queryValidatedRows: <Model extends import("zod").ZodTypeAny>(query: string, params:
|
|
42
|
-
export declare const queryValidatedOneRow: <Model extends import("zod").ZodTypeAny>(query: string, params:
|
|
43
|
-
export declare const queryValidatedZeroOrOneRow: <Model extends import("zod").ZodTypeAny>(query: string, params:
|
|
44
|
-
export declare const queryValidatedSingleColumnRows: <Model extends import("zod").ZodTypeAny>(query: string, params:
|
|
45
|
-
export declare const queryValidatedSingleColumnOneRow: <Model extends import("zod").ZodTypeAny>(query: string, params:
|
|
46
|
-
export declare const queryValidatedSingleColumnZeroOrOneRow: <Model extends import("zod").ZodTypeAny>(query: string, params:
|
|
41
|
+
export declare const queryValidatedRows: <Model extends import("zod").ZodTypeAny>(query: string, params: import("./pool").QueryParams, model: Model) => Promise<import("zod").TypeOf<Model>[]>;
|
|
42
|
+
export declare const queryValidatedOneRow: <Model extends import("zod").ZodTypeAny>(query: string, params: import("./pool").QueryParams, model: Model) => Promise<import("zod").TypeOf<Model>>;
|
|
43
|
+
export declare const queryValidatedZeroOrOneRow: <Model extends import("zod").ZodTypeAny>(query: string, params: import("./pool").QueryParams, model: Model) => Promise<import("zod").TypeOf<Model> | null>;
|
|
44
|
+
export declare const queryValidatedSingleColumnRows: <Model extends import("zod").ZodTypeAny>(query: string, params: import("./pool").QueryParams, model: Model) => Promise<import("zod").TypeOf<Model>[]>;
|
|
45
|
+
export declare const queryValidatedSingleColumnOneRow: <Model extends import("zod").ZodTypeAny>(query: string, params: import("./pool").QueryParams, model: Model) => Promise<import("zod").TypeOf<Model>>;
|
|
46
|
+
export declare const queryValidatedSingleColumnZeroOrOneRow: <Model extends import("zod").ZodTypeAny>(query: string, params: import("./pool").QueryParams, model: Model) => Promise<import("zod").TypeOf<Model> | null>;
|
|
47
47
|
export declare const callValidatedRows: <Model extends import("zod").ZodTypeAny>(sprocName: string, params: any[], model: Model) => Promise<import("zod").TypeOf<Model>[]>;
|
|
48
48
|
export declare const callValidatedOneRow: <Model extends import("zod").ZodTypeAny>(sprocName: string, params: any[], model: Model) => Promise<import("zod").TypeOf<Model>>;
|
|
49
49
|
export declare const callValidatedZeroOrOneRow: <Model extends import("zod").ZodTypeAny>(sprocName: string, params: any[], model: Model) => Promise<import("zod").TypeOf<Model> | null>;
|
|
50
|
+
export declare const queryCursorWithClient: (client: import("pg").PoolClient, sql: string, params: import("./pool").QueryParams) => Promise<import("pg-cursor")<any>>;
|
|
51
|
+
export declare const queryCursor: <Model extends import("zod").ZodTypeAny>(sql: string, params: import("./pool").QueryParams) => Promise<import("./pool").CursorIterator<import("zod").TypeOf<Model>>>;
|
|
52
|
+
export declare const queryValidatedCursor: <Model extends import("zod").ZodTypeAny>(sql: string, params: import("./pool").QueryParams, model: Model) => Promise<import("./pool").CursorIterator<import("zod").TypeOf<Model>>>;
|
|
50
53
|
export declare const setSearchSchema: (schema: string) => Promise<void>;
|
|
51
54
|
export declare const getSearchSchema: () => string | null;
|
|
52
55
|
export declare const setRandomSearchSchema: (arg1: string, callback: (err: NodeJS.ErrnoException, result: string) => void) => void;
|
package/dist/default-pool.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.setSearchSchema = exports.queryValidatedCursor = exports.queryCursor = exports.queryCursorWithClient = exports.callValidatedZeroOrOneRow = exports.callValidatedOneRow = exports.callValidatedRows = exports.queryValidatedSingleColumnZeroOrOneRow = exports.queryValidatedSingleColumnOneRow = exports.queryValidatedSingleColumnRows = exports.queryValidatedZeroOrOneRow = exports.queryValidatedOneRow = exports.queryValidatedRows = exports.callWithClientZeroOrOneRowAsync = exports.callWithClientZeroOrOneRow = exports.callWithClientOneRowAsync = exports.callWithClientOneRow = exports.callWithClientAsync = exports.callWithClient = exports.callZeroOrOneRowAsync = exports.callZeroOrOneRow = exports.callOneRowAsync = exports.callOneRow = exports.callAsync = exports.call = exports.queryZeroOrOneRowAsync = exports.queryZeroOrOneRow = exports.queryOneRowAsync = exports.queryOneRow = exports.queryAsync = exports.query = exports.runInTransactionAsync = exports.endTransaction = exports.endTransactionAsync = exports.beginTransactionAsync = exports.rollbackWithClient = exports.rollbackWithClientAsync = exports.queryWithClientZeroOrOneRowAsync = exports.queryWithClientZeroOrOneRow = exports.queryWithClientOneRowAsync = exports.queryWithClientOneRow = exports.queryWithClientAsync = exports.queryWithClient = exports.getClient = exports.getClientAsync = exports.closeAsync = exports.close = exports.initAsync = exports.init = exports.defaultPool = void 0;
|
|
4
|
+
exports.setRandomSearchSchemaAsync = exports.setRandomSearchSchema = exports.getSearchSchema = void 0;
|
|
4
5
|
const pool_1 = require("./pool");
|
|
5
6
|
const defaultPool = new pool_1.PostgresPool();
|
|
6
7
|
exports.defaultPool = defaultPool;
|
|
@@ -57,6 +58,9 @@ exports.queryValidatedSingleColumnZeroOrOneRow = defaultPool.queryValidatedSingl
|
|
|
57
58
|
exports.callValidatedRows = defaultPool.callValidatedRows.bind(defaultPool);
|
|
58
59
|
exports.callValidatedOneRow = defaultPool.callValidatedOneRow.bind(defaultPool);
|
|
59
60
|
exports.callValidatedZeroOrOneRow = defaultPool.callValidatedZeroOrOneRow.bind(defaultPool);
|
|
61
|
+
exports.queryCursorWithClient = defaultPool.queryCursorWithClient.bind(defaultPool);
|
|
62
|
+
exports.queryCursor = defaultPool.queryCursor.bind(defaultPool);
|
|
63
|
+
exports.queryValidatedCursor = defaultPool.queryValidatedCursor.bind(defaultPool);
|
|
60
64
|
exports.setSearchSchema = defaultPool.setSearchSchema.bind(defaultPool);
|
|
61
65
|
exports.getSearchSchema = defaultPool.getSearchSchema.bind(defaultPool);
|
|
62
66
|
exports.setRandomSearchSchema = defaultPool.setRandomSearchSchema.bind(defaultPool);
|
package/dist/default-pool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-pool.js","sourceRoot":"","sources":["../src/default-pool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"default-pool.js","sourceRoot":"","sources":["../src/default-pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-pool.test.js","sourceRoot":"","sources":["../src/default-pool.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAA8B;AAC9B,iCAAsC;AACtC,uDAAyC;AAEzC;;;GAGG;AACH,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,kBAAkB;IAClB,MAAM;IACN,WAAW;IACX,cAAc;IACd,aAAa;IACb,UAAU;IACV,YAAY;IACZ,WAAW;IACX,cAAc;IACd,YAAY;CACb,CAAC,CAAC;AAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,IAAI,GAAG,IAAI,mBAAY,EAAE,CAAC;QAEhC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC;aAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACxC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAChB,aAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC9B,aAAM,CAAC,EAAE,CAAE,MAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEL,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;aACpD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACxC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAChB,aAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC9B,aAAM,CAAC,EAAE,CAAE,MAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,IAAI,GAAG,IAAI,mBAAY,EAAE,CAAC;QAEhC,MAAM,eAAe,GAAG;YACtB,GAAG,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC;YACnC,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC1D,cAAc;SACf,CAAC;QAEF,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAChD,aAAM,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"default-pool.test.js","sourceRoot":"","sources":["../src/default-pool.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAA8B;AAC9B,iCAAsC;AACtC,uDAAyC;AAEzC;;;GAGG;AACH,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,kBAAkB;IAClB,MAAM;IACN,WAAW;IACX,cAAc;IACd,aAAa;IACb,8BAA8B;IAC9B,UAAU;IACV,YAAY;IACZ,WAAW;IACX,cAAc;IACd,YAAY;CACb,CAAC,CAAC;AAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,IAAI,GAAG,IAAI,mBAAY,EAAE,CAAC;QAEhC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC;aAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACxC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAChB,aAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC9B,aAAM,CAAC,EAAE,CAAE,MAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEL,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;aACpD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACxC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAChB,aAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC9B,aAAM,CAAC,EAAE,CAAE,MAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,IAAI,GAAG,IAAI,mBAAY,EAAE,CAAC;QAEhC,MAAM,eAAe,GAAG;YACtB,GAAG,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC;YACnC,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC1D,cAAc;SACf,CAAC;QAEF,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAChD,aAAM,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAEA,mCAAiD;AAAxC,iGAAA,OAAO,OAAA;AAAE,sGAAA,YAAY,OAAA;AAC9B,+BAAsC;AAA7B,oGAAA,YAAY,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAEA,mCAAiD;AAAxC,iGAAA,OAAO,OAAA;AAAE,sGAAA,YAAY,OAAA;AAC9B,+BAAsC;AAA7B,oGAAA,YAAY,OAAA;AAErB,iDAA+B"}
|
package/dist/pool.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import pg, { QueryResult } from 'pg';
|
|
3
|
+
import Cursor from 'pg-cursor';
|
|
3
4
|
import { z } from 'zod';
|
|
4
|
-
type
|
|
5
|
+
export type QueryParams = Record<string, any> | any[];
|
|
6
|
+
export interface CursorIterator<T> {
|
|
7
|
+
iterate: (batchSize: number) => AsyncGenerator<T[]>;
|
|
8
|
+
}
|
|
5
9
|
export declare class PostgresError extends Error {
|
|
6
10
|
data: Record<string, any>;
|
|
7
11
|
constructor(message: string, data: Record<string, any>);
|
|
@@ -52,31 +56,31 @@ export declare class PostgresPool {
|
|
|
52
56
|
/**
|
|
53
57
|
* Performs a query with the given client.
|
|
54
58
|
*/
|
|
55
|
-
queryWithClientAsync(client: pg.PoolClient, sql: string, params:
|
|
59
|
+
queryWithClientAsync(client: pg.PoolClient, sql: string, params: QueryParams): Promise<pg.QueryResult>;
|
|
56
60
|
/**
|
|
57
61
|
* Performs a query with the given client.
|
|
58
62
|
*/
|
|
59
|
-
queryWithClient: (arg1: pg.PoolClient, arg2: string, arg3:
|
|
63
|
+
queryWithClient: (arg1: pg.PoolClient, arg2: string, arg3: QueryParams, callback: (err: NodeJS.ErrnoException | null, result: pg.QueryResult<any>) => void) => void;
|
|
60
64
|
/**
|
|
61
65
|
* Performs a query with the given client. Errors if the query returns more
|
|
62
66
|
* than one row.
|
|
63
67
|
*/
|
|
64
|
-
queryWithClientOneRowAsync(client: pg.PoolClient, sql: string, params:
|
|
68
|
+
queryWithClientOneRowAsync(client: pg.PoolClient, sql: string, params: QueryParams): Promise<pg.QueryResult>;
|
|
65
69
|
/**
|
|
66
70
|
* Performs a query with the given client. Errors if the query returns more
|
|
67
71
|
* than one row.
|
|
68
72
|
*/
|
|
69
|
-
queryWithClientOneRow: (arg1: pg.PoolClient, arg2: string, arg3:
|
|
73
|
+
queryWithClientOneRow: (arg1: pg.PoolClient, arg2: string, arg3: QueryParams, callback: (err: NodeJS.ErrnoException | null, result: pg.QueryResult<any>) => void) => void;
|
|
70
74
|
/**
|
|
71
75
|
* Performs a query with the given client. Errors if the query returns more
|
|
72
76
|
* than one row.
|
|
73
77
|
*/
|
|
74
|
-
queryWithClientZeroOrOneRowAsync(client: pg.PoolClient, sql: string, params:
|
|
78
|
+
queryWithClientZeroOrOneRowAsync(client: pg.PoolClient, sql: string, params: QueryParams): Promise<QueryResult>;
|
|
75
79
|
/**
|
|
76
80
|
* Performs a query with the given client. Errors if the query returns more
|
|
77
81
|
* than one row.
|
|
78
82
|
*/
|
|
79
|
-
queryWithClientZeroOrOneRow: (arg1: pg.PoolClient, arg2: string, arg3:
|
|
83
|
+
queryWithClientZeroOrOneRow: (arg1: pg.PoolClient, arg2: string, arg3: QueryParams, callback: (err: NodeJS.ErrnoException | null, result: pg.QueryResult<any>) => void) => void;
|
|
80
84
|
/**
|
|
81
85
|
* Rolls back the current transaction for the given client.
|
|
82
86
|
*/
|
|
@@ -111,31 +115,31 @@ export declare class PostgresPool {
|
|
|
111
115
|
/**
|
|
112
116
|
* Executes a query with the specified parameters.
|
|
113
117
|
*/
|
|
114
|
-
queryAsync(sql: string, params:
|
|
118
|
+
queryAsync(sql: string, params: QueryParams): Promise<QueryResult>;
|
|
115
119
|
/**
|
|
116
120
|
* Executes a query with the specified parameters.
|
|
117
121
|
*/
|
|
118
|
-
query: (arg1: string, arg2:
|
|
122
|
+
query: (arg1: string, arg2: QueryParams, callback: (err: NodeJS.ErrnoException | null, result: pg.QueryResult<any>) => void) => void;
|
|
119
123
|
/**
|
|
120
124
|
* Executes a query with the specified parameters. Errors if the query does
|
|
121
125
|
* not return exactly one row.
|
|
122
126
|
*/
|
|
123
|
-
queryOneRowAsync(sql: string, params:
|
|
127
|
+
queryOneRowAsync(sql: string, params: QueryParams): Promise<pg.QueryResult>;
|
|
124
128
|
/**
|
|
125
129
|
* Executes a query with the specified parameters. Errors if the query does
|
|
126
130
|
* not return exactly one row.
|
|
127
131
|
*/
|
|
128
|
-
queryOneRow: (arg1: string, arg2:
|
|
132
|
+
queryOneRow: (arg1: string, arg2: QueryParams, callback: (err: NodeJS.ErrnoException | null, result: pg.QueryResult<any>) => void) => void;
|
|
129
133
|
/**
|
|
130
134
|
* Executes a query with the specified parameters. Errors if the query
|
|
131
135
|
* returns more than one row.
|
|
132
136
|
*/
|
|
133
|
-
queryZeroOrOneRowAsync(sql: string, params:
|
|
137
|
+
queryZeroOrOneRowAsync(sql: string, params: QueryParams): Promise<pg.QueryResult>;
|
|
134
138
|
/**
|
|
135
139
|
* Executes a query with the specified parameters. Errors if the query
|
|
136
140
|
* returns more than one row.
|
|
137
141
|
*/
|
|
138
|
-
queryZeroOrOneRow: (arg1: string, arg2:
|
|
142
|
+
queryZeroOrOneRow: (arg1: string, arg2: QueryParams, callback: (err: NodeJS.ErrnoException | null, result: pg.QueryResult<any>) => void) => void;
|
|
139
143
|
/**
|
|
140
144
|
* Calls the given function with the specified parameters.
|
|
141
145
|
*/
|
|
@@ -193,55 +197,70 @@ export declare class PostgresPool {
|
|
|
193
197
|
*/
|
|
194
198
|
callWithClientZeroOrOneRow: (arg1: pg.PoolClient, arg2: string, arg3: any[], callback: (err: NodeJS.ErrnoException | null, result: pg.QueryResult<any>) => void) => void;
|
|
195
199
|
/**
|
|
196
|
-
* Wrapper around {@link queryAsync} that
|
|
197
|
-
*
|
|
200
|
+
* Wrapper around {@link queryAsync} that parses the resulting rows with the
|
|
201
|
+
* given Zod schema. Returns only the rows of the query.
|
|
198
202
|
*/
|
|
199
|
-
queryValidatedRows<Model extends z.ZodTypeAny>(query: string, params:
|
|
203
|
+
queryValidatedRows<Model extends z.ZodTypeAny>(query: string, params: QueryParams, model: Model): Promise<z.infer<Model>[]>;
|
|
200
204
|
/**
|
|
201
|
-
* Wrapper around {@link queryOneRowAsync} that
|
|
202
|
-
*
|
|
205
|
+
* Wrapper around {@link queryOneRowAsync} that parses the resulting row with
|
|
206
|
+
* the given Zod schema. Returns only a single row of the query.
|
|
203
207
|
*/
|
|
204
|
-
queryValidatedOneRow<Model extends z.ZodTypeAny>(query: string, params:
|
|
208
|
+
queryValidatedOneRow<Model extends z.ZodTypeAny>(query: string, params: QueryParams, model: Model): Promise<z.infer<Model>>;
|
|
205
209
|
/**
|
|
206
|
-
* Wrapper around {@link queryZeroOrOneRowAsync} that
|
|
207
|
-
*
|
|
208
|
-
* Returns either the single row of the query or `null`.
|
|
210
|
+
* Wrapper around {@link queryZeroOrOneRowAsync} that parses the resulting row
|
|
211
|
+
* (if any) with the given Zod schema. Returns either a single row or `null`.
|
|
209
212
|
*/
|
|
210
|
-
queryValidatedZeroOrOneRow<Model extends z.ZodTypeAny>(query: string, params:
|
|
213
|
+
queryValidatedZeroOrOneRow<Model extends z.ZodTypeAny>(query: string, params: QueryParams, model: Model): Promise<z.infer<Model> | null>;
|
|
211
214
|
/**
|
|
212
215
|
* Wrapper around {@link queryAsync} that validates that only one column is
|
|
213
|
-
* returned and the data in it
|
|
216
|
+
* returned and parses the data in it with the given Zod schema. Returns only
|
|
214
217
|
* the single column of the query as an array.
|
|
215
218
|
*/
|
|
216
|
-
queryValidatedSingleColumnRows<Model extends z.ZodTypeAny>(query: string, params:
|
|
219
|
+
queryValidatedSingleColumnRows<Model extends z.ZodTypeAny>(query: string, params: QueryParams, model: Model): Promise<z.infer<Model>[]>;
|
|
217
220
|
/**
|
|
218
221
|
* Wrapper around {@link queryOneRowAsync} that validates that only one column
|
|
219
|
-
* is returned and the data in it
|
|
222
|
+
* is returned and parses the data in it with the given Zod schema. Returns
|
|
220
223
|
* only the single entry.
|
|
221
224
|
*/
|
|
222
|
-
queryValidatedSingleColumnOneRow<Model extends z.ZodTypeAny>(query: string, params:
|
|
225
|
+
queryValidatedSingleColumnOneRow<Model extends z.ZodTypeAny>(query: string, params: QueryParams, model: Model): Promise<z.infer<Model>>;
|
|
223
226
|
/**
|
|
224
227
|
* Wrapper around {@link queryZeroOrOneRowAsync} that validates that only one
|
|
225
|
-
* column is returned and the data in it
|
|
226
|
-
*
|
|
228
|
+
* column is returned and parses the data in it (if any) with the given Zod
|
|
229
|
+
* schema. Returns either the single row of the query or `null`.
|
|
227
230
|
*/
|
|
228
|
-
queryValidatedSingleColumnZeroOrOneRow<Model extends z.ZodTypeAny>(query: string, params:
|
|
231
|
+
queryValidatedSingleColumnZeroOrOneRow<Model extends z.ZodTypeAny>(query: string, params: QueryParams, model: Model): Promise<z.infer<Model> | null>;
|
|
229
232
|
/**
|
|
230
|
-
* Wrapper around {@link callAsync} that
|
|
231
|
-
*
|
|
233
|
+
* Wrapper around {@link callAsync} that parses the resulting rows with the
|
|
234
|
+
* given Zod schema. Returns only the rows.
|
|
232
235
|
*/
|
|
233
236
|
callValidatedRows<Model extends z.ZodTypeAny>(sprocName: string, params: any[], model: Model): Promise<z.infer<Model>[]>;
|
|
234
237
|
/**
|
|
235
|
-
* Wrapper around {@link callOneRowAsync} that
|
|
236
|
-
*
|
|
238
|
+
* Wrapper around {@link callOneRowAsync} that parses the resulting rows with
|
|
239
|
+
* the given Zod schema. Returns only a single row.
|
|
237
240
|
*/
|
|
238
241
|
callValidatedOneRow<Model extends z.ZodTypeAny>(sprocName: string, params: any[], model: Model): Promise<z.infer<Model>>;
|
|
239
242
|
/**
|
|
240
|
-
* Wrapper around {@link callZeroOrOneRowAsync} that
|
|
241
|
-
*
|
|
242
|
-
* Returns at most a single row.
|
|
243
|
+
* Wrapper around {@link callZeroOrOneRowAsync} that parses the resulting row
|
|
244
|
+
* (if any) with the given Zod schema. Returns at most a single row.
|
|
243
245
|
*/
|
|
244
246
|
callValidatedZeroOrOneRow<Model extends z.ZodTypeAny>(sprocName: string, params: any[], model: Model): Promise<z.infer<Model> | null>;
|
|
247
|
+
/**
|
|
248
|
+
* Returns a {@link Cursor} for the given query. The cursor can be used to
|
|
249
|
+
* read results in batches, which is useful for large result sets.
|
|
250
|
+
*/
|
|
251
|
+
queryCursorWithClient(client: pg.PoolClient, sql: string, params: QueryParams): Promise<Cursor>;
|
|
252
|
+
/**
|
|
253
|
+
* Returns an {@link CursorIterator} that can be used to iterate over the
|
|
254
|
+
* results of the query in batches, which is useful for large result sets.
|
|
255
|
+
*/
|
|
256
|
+
queryCursor<Model extends z.ZodTypeAny>(sql: string, params: QueryParams): Promise<CursorIterator<z.infer<Model>>>;
|
|
257
|
+
/**
|
|
258
|
+
* Returns an {@link CursorIterator} that can be used to iterate over the
|
|
259
|
+
* results of the query in batches, which is useful for large result sets.
|
|
260
|
+
* Each row will be parsed by the given Zod schema.
|
|
261
|
+
*/
|
|
262
|
+
queryValidatedCursor<Model extends z.ZodTypeAny>(sql: string, params: QueryParams, model: Model): Promise<CursorIterator<z.infer<Model>>>;
|
|
263
|
+
private queryValidatedCursorInternal;
|
|
245
264
|
/**
|
|
246
265
|
* Set the schema to use for the search path.
|
|
247
266
|
*
|
|
@@ -274,4 +293,3 @@ export declare class PostgresPool {
|
|
|
274
293
|
/** The total number of queries that have been executed by this pool. */
|
|
275
294
|
get queryCount(): number;
|
|
276
295
|
}
|
|
277
|
-
export {};
|
package/dist/pool.js
CHANGED
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.PostgresPool = exports.PostgresError = void 0;
|
|
7
7
|
const lodash_1 = __importDefault(require("lodash"));
|
|
8
8
|
const pg_1 = __importDefault(require("pg"));
|
|
9
|
+
const pg_cursor_1 = __importDefault(require("pg-cursor"));
|
|
9
10
|
const node_path_1 = __importDefault(require("node:path"));
|
|
10
11
|
const debug_1 = __importDefault(require("debug"));
|
|
11
12
|
const node_util_1 = require("node:util");
|
|
@@ -115,6 +116,19 @@ function escapeIdentifier(identifier) {
|
|
|
115
116
|
// https://www.postgresql.org/docs/12/sql-syntax-lexical.html
|
|
116
117
|
return pg_1.default.Client.prototype.escapeIdentifier(identifier);
|
|
117
118
|
}
|
|
119
|
+
function enhanceError(err, sql, params) {
|
|
120
|
+
// Copy the error so we don't end up with a circular reference in the
|
|
121
|
+
// final error.
|
|
122
|
+
const sqlError = { ...err };
|
|
123
|
+
// `message` is a non-enumerable property, so we need to copy it manually to
|
|
124
|
+
// the error object.
|
|
125
|
+
sqlError.message = err.message;
|
|
126
|
+
return addDataToError(err, {
|
|
127
|
+
sqlError: sqlError,
|
|
128
|
+
sql: sql,
|
|
129
|
+
sqlParams: params,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
118
132
|
class PostgresPool {
|
|
119
133
|
constructor() {
|
|
120
134
|
/** The pool from which clients will be acquired. */
|
|
@@ -320,14 +334,7 @@ class PostgresPool {
|
|
|
320
334
|
return result;
|
|
321
335
|
}
|
|
322
336
|
catch (err) {
|
|
323
|
-
|
|
324
|
-
const sqlError = JSON.parse(JSON.stringify(err));
|
|
325
|
-
sqlError.message = err.message;
|
|
326
|
-
throw addDataToError(err, {
|
|
327
|
-
sqlError: sqlError,
|
|
328
|
-
sql: sql,
|
|
329
|
-
sqlParams: params,
|
|
330
|
-
});
|
|
337
|
+
throw enhanceError(err, sql, params);
|
|
331
338
|
}
|
|
332
339
|
}
|
|
333
340
|
/**
|
|
@@ -461,19 +468,32 @@ class PostgresPool {
|
|
|
461
468
|
* will be committed otherwise.
|
|
462
469
|
*/
|
|
463
470
|
async runInTransactionAsync(fn) {
|
|
464
|
-
|
|
471
|
+
// Check if we're already inside a transaction. If so, we won't start another one,
|
|
472
|
+
// as Postgres doesn't support nested transactions.
|
|
473
|
+
let client = this.alsClient.getStore();
|
|
474
|
+
const isNestedTransaction = client !== undefined;
|
|
475
|
+
const transactionClient = client ?? (await this.beginTransactionAsync());
|
|
465
476
|
let result;
|
|
466
477
|
try {
|
|
467
|
-
result = await this.alsClient.run(
|
|
478
|
+
result = await this.alsClient.run(transactionClient, () => fn(transactionClient));
|
|
468
479
|
}
|
|
469
480
|
catch (err) {
|
|
470
|
-
|
|
481
|
+
if (!isNestedTransaction) {
|
|
482
|
+
// If we're inside another transaction, we assume that the root transaction
|
|
483
|
+
// will catch this error and roll back the transaction.
|
|
484
|
+
await this.endTransactionAsync(transactionClient, err);
|
|
485
|
+
}
|
|
471
486
|
throw err;
|
|
472
487
|
}
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
488
|
+
if (!isNestedTransaction) {
|
|
489
|
+
// If we're inside another transaction; don't commit it prematurely. Allow
|
|
490
|
+
// the root transaction to commit it instead.
|
|
491
|
+
//
|
|
492
|
+
// Note that we don't invoke `endTransactionAsync` inside the `try` block
|
|
493
|
+
// because we don't want an error thrown by it to trigger *another* call
|
|
494
|
+
// to `endTransactionAsync` in the `catch` block.
|
|
495
|
+
await this.endTransactionAsync(transactionClient, null);
|
|
496
|
+
}
|
|
477
497
|
return result;
|
|
478
498
|
}
|
|
479
499
|
/**
|
|
@@ -620,25 +640,24 @@ class PostgresPool {
|
|
|
620
640
|
return result;
|
|
621
641
|
}
|
|
622
642
|
/**
|
|
623
|
-
* Wrapper around {@link queryAsync} that
|
|
624
|
-
*
|
|
643
|
+
* Wrapper around {@link queryAsync} that parses the resulting rows with the
|
|
644
|
+
* given Zod schema. Returns only the rows of the query.
|
|
625
645
|
*/
|
|
626
646
|
async queryValidatedRows(query, params, model) {
|
|
627
647
|
const results = await this.queryAsync(query, params);
|
|
628
648
|
return zod_1.z.array(model).parse(results.rows);
|
|
629
649
|
}
|
|
630
650
|
/**
|
|
631
|
-
* Wrapper around {@link queryOneRowAsync} that
|
|
632
|
-
*
|
|
651
|
+
* Wrapper around {@link queryOneRowAsync} that parses the resulting row with
|
|
652
|
+
* the given Zod schema. Returns only a single row of the query.
|
|
633
653
|
*/
|
|
634
654
|
async queryValidatedOneRow(query, params, model) {
|
|
635
655
|
const results = await this.queryOneRowAsync(query, params);
|
|
636
656
|
return model.parse(results.rows[0]);
|
|
637
657
|
}
|
|
638
658
|
/**
|
|
639
|
-
* Wrapper around {@link queryZeroOrOneRowAsync} that
|
|
640
|
-
*
|
|
641
|
-
* Returns either the single row of the query or `null`.
|
|
659
|
+
* Wrapper around {@link queryZeroOrOneRowAsync} that parses the resulting row
|
|
660
|
+
* (if any) with the given Zod schema. Returns either a single row or `null`.
|
|
642
661
|
*/
|
|
643
662
|
async queryValidatedZeroOrOneRow(query, params, model) {
|
|
644
663
|
const results = await this.queryZeroOrOneRowAsync(query, params);
|
|
@@ -651,7 +670,7 @@ class PostgresPool {
|
|
|
651
670
|
}
|
|
652
671
|
/**
|
|
653
672
|
* Wrapper around {@link queryAsync} that validates that only one column is
|
|
654
|
-
* returned and the data in it
|
|
673
|
+
* returned and parses the data in it with the given Zod schema. Returns only
|
|
655
674
|
* the single column of the query as an array.
|
|
656
675
|
*/
|
|
657
676
|
async queryValidatedSingleColumnRows(query, params, model) {
|
|
@@ -665,7 +684,7 @@ class PostgresPool {
|
|
|
665
684
|
}
|
|
666
685
|
/**
|
|
667
686
|
* Wrapper around {@link queryOneRowAsync} that validates that only one column
|
|
668
|
-
* is returned and the data in it
|
|
687
|
+
* is returned and parses the data in it with the given Zod schema. Returns
|
|
669
688
|
* only the single entry.
|
|
670
689
|
*/
|
|
671
690
|
async queryValidatedSingleColumnOneRow(query, params, model) {
|
|
@@ -678,8 +697,8 @@ class PostgresPool {
|
|
|
678
697
|
}
|
|
679
698
|
/**
|
|
680
699
|
* Wrapper around {@link queryZeroOrOneRowAsync} that validates that only one
|
|
681
|
-
* column is returned and the data in it
|
|
682
|
-
*
|
|
700
|
+
* column is returned and parses the data in it (if any) with the given Zod
|
|
701
|
+
* schema. Returns either the single row of the query or `null`.
|
|
683
702
|
*/
|
|
684
703
|
async queryValidatedSingleColumnZeroOrOneRow(query, params, model) {
|
|
685
704
|
const results = await this.queryZeroOrOneRowAsync(query, params);
|
|
@@ -695,25 +714,24 @@ class PostgresPool {
|
|
|
695
714
|
}
|
|
696
715
|
}
|
|
697
716
|
/**
|
|
698
|
-
* Wrapper around {@link callAsync} that
|
|
699
|
-
*
|
|
717
|
+
* Wrapper around {@link callAsync} that parses the resulting rows with the
|
|
718
|
+
* given Zod schema. Returns only the rows.
|
|
700
719
|
*/
|
|
701
720
|
async callValidatedRows(sprocName, params, model) {
|
|
702
721
|
const results = await this.callAsync(sprocName, params);
|
|
703
722
|
return zod_1.z.array(model).parse(results.rows);
|
|
704
723
|
}
|
|
705
724
|
/**
|
|
706
|
-
* Wrapper around {@link callOneRowAsync} that
|
|
707
|
-
*
|
|
725
|
+
* Wrapper around {@link callOneRowAsync} that parses the resulting rows with
|
|
726
|
+
* the given Zod schema. Returns only a single row.
|
|
708
727
|
*/
|
|
709
728
|
async callValidatedOneRow(sprocName, params, model) {
|
|
710
729
|
const results = await this.callOneRowAsync(sprocName, params);
|
|
711
730
|
return model.parse(results.rows[0]);
|
|
712
731
|
}
|
|
713
732
|
/**
|
|
714
|
-
* Wrapper around {@link callZeroOrOneRowAsync} that
|
|
715
|
-
*
|
|
716
|
-
* Returns at most a single row.
|
|
733
|
+
* Wrapper around {@link callZeroOrOneRowAsync} that parses the resulting row
|
|
734
|
+
* (if any) with the given Zod schema. Returns at most a single row.
|
|
717
735
|
*/
|
|
718
736
|
async callValidatedZeroOrOneRow(sprocName, params, model) {
|
|
719
737
|
const results = await this.callZeroOrOneRowAsync(sprocName, params);
|
|
@@ -724,6 +742,68 @@ class PostgresPool {
|
|
|
724
742
|
return model.parse(results.rows[0]);
|
|
725
743
|
}
|
|
726
744
|
}
|
|
745
|
+
/**
|
|
746
|
+
* Returns a {@link Cursor} for the given query. The cursor can be used to
|
|
747
|
+
* read results in batches, which is useful for large result sets.
|
|
748
|
+
*/
|
|
749
|
+
async queryCursorWithClient(client, sql, params) {
|
|
750
|
+
this._queryCount += 1;
|
|
751
|
+
debug('queryCursorWithClient()', 'sql:', debugString(sql));
|
|
752
|
+
debug('queryCursorWithClient()', 'params:', debugParams(params));
|
|
753
|
+
const { processedSql, paramsArray } = paramsToArray(sql, params);
|
|
754
|
+
lastQueryMap.set(client, processedSql);
|
|
755
|
+
return client.query(new pg_cursor_1.default(processedSql, paramsArray));
|
|
756
|
+
}
|
|
757
|
+
/**
|
|
758
|
+
* Returns an {@link CursorIterator} that can be used to iterate over the
|
|
759
|
+
* results of the query in batches, which is useful for large result sets.
|
|
760
|
+
*/
|
|
761
|
+
async queryCursor(sql, params) {
|
|
762
|
+
return this.queryValidatedCursorInternal(sql, params);
|
|
763
|
+
}
|
|
764
|
+
/**
|
|
765
|
+
* Returns an {@link CursorIterator} that can be used to iterate over the
|
|
766
|
+
* results of the query in batches, which is useful for large result sets.
|
|
767
|
+
* Each row will be parsed by the given Zod schema.
|
|
768
|
+
*/
|
|
769
|
+
async queryValidatedCursor(sql, params, model) {
|
|
770
|
+
return this.queryValidatedCursorInternal(sql, params, model);
|
|
771
|
+
}
|
|
772
|
+
async queryValidatedCursorInternal(sql, params, model) {
|
|
773
|
+
const client = await this.getClientAsync();
|
|
774
|
+
const cursor = await this.queryCursorWithClient(client, sql, params);
|
|
775
|
+
let iterateCalled = false;
|
|
776
|
+
return {
|
|
777
|
+
iterate: async function* (batchSize) {
|
|
778
|
+
// Safety check: if someone calls iterate multiple times, they're
|
|
779
|
+
// definitely doing something wrong.
|
|
780
|
+
if (iterateCalled) {
|
|
781
|
+
throw new Error('iterate() called multiple times');
|
|
782
|
+
}
|
|
783
|
+
iterateCalled = true;
|
|
784
|
+
try {
|
|
785
|
+
while (true) {
|
|
786
|
+
const rows = await cursor.read(batchSize);
|
|
787
|
+
if (rows.length === 0) {
|
|
788
|
+
break;
|
|
789
|
+
}
|
|
790
|
+
if (model) {
|
|
791
|
+
yield zod_1.z.array(model).parse(rows);
|
|
792
|
+
}
|
|
793
|
+
else {
|
|
794
|
+
yield rows;
|
|
795
|
+
}
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
catch (err) {
|
|
799
|
+
throw enhanceError(err, sql, params);
|
|
800
|
+
}
|
|
801
|
+
finally {
|
|
802
|
+
client.release();
|
|
803
|
+
}
|
|
804
|
+
},
|
|
805
|
+
};
|
|
806
|
+
}
|
|
727
807
|
/**
|
|
728
808
|
* Set the schema to use for the search path.
|
|
729
809
|
*
|
package/dist/pool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prairielearn/postgres",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "tsc",
|
|
@@ -18,6 +18,10 @@
|
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@types/debug": "^4.1.7",
|
|
20
20
|
"@types/lodash": "^4.14.191",
|
|
21
|
+
"@types/pg-cursor": "^2.7.0",
|
|
22
|
+
"pg": "^8.10.0",
|
|
23
|
+
"pg-cursor": "^2.9.0",
|
|
24
|
+
"pg-pool": "^3.6.0",
|
|
21
25
|
"zod": "^3.20.6"
|
|
22
26
|
}
|
|
23
27
|
}
|
package/src/default-pool.test.ts
CHANGED
package/src/default-pool.ts
CHANGED
|
@@ -62,6 +62,9 @@ export const queryValidatedSingleColumnZeroOrOneRow =
|
|
|
62
62
|
export const callValidatedRows = defaultPool.callValidatedRows.bind(defaultPool);
|
|
63
63
|
export const callValidatedOneRow = defaultPool.callValidatedOneRow.bind(defaultPool);
|
|
64
64
|
export const callValidatedZeroOrOneRow = defaultPool.callValidatedZeroOrOneRow.bind(defaultPool);
|
|
65
|
+
export const queryCursorWithClient = defaultPool.queryCursorWithClient.bind(defaultPool);
|
|
66
|
+
export const queryCursor = defaultPool.queryCursor.bind(defaultPool);
|
|
67
|
+
export const queryValidatedCursor = defaultPool.queryValidatedCursor.bind(defaultPool);
|
|
65
68
|
export const setSearchSchema = defaultPool.setSearchSchema.bind(defaultPool);
|
|
66
69
|
export const getSearchSchema = defaultPool.getSearchSchema.bind(defaultPool);
|
|
67
70
|
export const setRandomSearchSchema = defaultPool.setRandomSearchSchema.bind(defaultPool);
|
package/src/index.ts
CHANGED
package/src/pool.ts
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import _ from 'lodash';
|
|
2
2
|
import pg, { QueryResult } from 'pg';
|
|
3
|
+
import Cursor from 'pg-cursor';
|
|
3
4
|
import path from 'node:path';
|
|
4
5
|
import debugFactory from 'debug';
|
|
5
6
|
import { callbackify } from 'node:util';
|
|
6
7
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
7
8
|
import { z } from 'zod';
|
|
8
9
|
|
|
9
|
-
type
|
|
10
|
+
export type QueryParams = Record<string, any> | any[];
|
|
11
|
+
|
|
12
|
+
export interface CursorIterator<T> {
|
|
13
|
+
iterate: (batchSize: number) => AsyncGenerator<T[]>;
|
|
14
|
+
}
|
|
10
15
|
|
|
11
16
|
const debug = debugFactory('prairielib:' + path.basename(__filename, '.js'));
|
|
12
17
|
const lastQueryMap: WeakMap<pg.PoolClient, string> = new WeakMap();
|
|
@@ -44,7 +49,7 @@ function debugString(s: string): string {
|
|
|
44
49
|
/**
|
|
45
50
|
* Formats a set of params for debugging.
|
|
46
51
|
*/
|
|
47
|
-
function debugParams(params:
|
|
52
|
+
function debugParams(params: QueryParams): string {
|
|
48
53
|
let s;
|
|
49
54
|
try {
|
|
50
55
|
s = JSON.stringify(params);
|
|
@@ -58,7 +63,10 @@ function debugParams(params: Params): string {
|
|
|
58
63
|
* Given an SQL string and params, creates an array of params and an SQL string
|
|
59
64
|
* with any named dollar-sign placeholders replaced with parameters.
|
|
60
65
|
*/
|
|
61
|
-
function paramsToArray(
|
|
66
|
+
function paramsToArray(
|
|
67
|
+
sql: string,
|
|
68
|
+
params: QueryParams
|
|
69
|
+
): { processedSql: string; paramsArray: any } {
|
|
62
70
|
if (typeof sql !== 'string') throw new Error('SQL must be a string');
|
|
63
71
|
if (Array.isArray(params)) {
|
|
64
72
|
return {
|
|
@@ -114,6 +122,22 @@ function escapeIdentifier(identifier: string): string {
|
|
|
114
122
|
return pg.Client.prototype.escapeIdentifier(identifier);
|
|
115
123
|
}
|
|
116
124
|
|
|
125
|
+
function enhanceError(err: Error, sql: string, params: QueryParams): Error {
|
|
126
|
+
// Copy the error so we don't end up with a circular reference in the
|
|
127
|
+
// final error.
|
|
128
|
+
const sqlError = { ...err };
|
|
129
|
+
|
|
130
|
+
// `message` is a non-enumerable property, so we need to copy it manually to
|
|
131
|
+
// the error object.
|
|
132
|
+
sqlError.message = err.message;
|
|
133
|
+
|
|
134
|
+
return addDataToError(err, {
|
|
135
|
+
sqlError: sqlError,
|
|
136
|
+
sql: sql,
|
|
137
|
+
sqlParams: params,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
|
|
117
141
|
export class PostgresPool {
|
|
118
142
|
/** The pool from which clients will be acquired. */
|
|
119
143
|
private pool: pg.Pool | null = null;
|
|
@@ -262,7 +286,7 @@ export class PostgresPool {
|
|
|
262
286
|
async queryWithClientAsync(
|
|
263
287
|
client: pg.PoolClient,
|
|
264
288
|
sql: string,
|
|
265
|
-
params:
|
|
289
|
+
params: QueryParams
|
|
266
290
|
): Promise<pg.QueryResult> {
|
|
267
291
|
this._queryCount += 1;
|
|
268
292
|
debug('queryWithClient()', 'sql:', debugString(sql));
|
|
@@ -274,14 +298,7 @@ export class PostgresPool {
|
|
|
274
298
|
debug('queryWithClient() success', 'rowCount:', result.rowCount);
|
|
275
299
|
return result;
|
|
276
300
|
} catch (err: any) {
|
|
277
|
-
|
|
278
|
-
const sqlError = JSON.parse(JSON.stringify(err));
|
|
279
|
-
sqlError.message = err.message;
|
|
280
|
-
throw addDataToError(err, {
|
|
281
|
-
sqlError: sqlError,
|
|
282
|
-
sql: sql,
|
|
283
|
-
sqlParams: params,
|
|
284
|
-
});
|
|
301
|
+
throw enhanceError(err, sql, params);
|
|
285
302
|
}
|
|
286
303
|
}
|
|
287
304
|
|
|
@@ -297,7 +314,7 @@ export class PostgresPool {
|
|
|
297
314
|
async queryWithClientOneRowAsync(
|
|
298
315
|
client: pg.PoolClient,
|
|
299
316
|
sql: string,
|
|
300
|
-
params:
|
|
317
|
+
params: QueryParams
|
|
301
318
|
): Promise<pg.QueryResult> {
|
|
302
319
|
debug('queryWithClientOneRow()', 'sql:', debugString(sql));
|
|
303
320
|
debug('queryWithClientOneRow()', 'params:', debugParams(params));
|
|
@@ -326,7 +343,7 @@ export class PostgresPool {
|
|
|
326
343
|
async queryWithClientZeroOrOneRowAsync(
|
|
327
344
|
client: pg.PoolClient,
|
|
328
345
|
sql: string,
|
|
329
|
-
params:
|
|
346
|
+
params: QueryParams
|
|
330
347
|
): Promise<QueryResult> {
|
|
331
348
|
debug('queryWithClientZeroOrOneRow()', 'sql:', debugString(sql));
|
|
332
349
|
debug('queryWithClientZeroOrOneRow()', 'params:', debugParams(params));
|
|
@@ -453,19 +470,33 @@ export class PostgresPool {
|
|
|
453
470
|
* will be committed otherwise.
|
|
454
471
|
*/
|
|
455
472
|
async runInTransactionAsync<T>(fn: (client: pg.PoolClient) => Promise<T>): Promise<T> {
|
|
456
|
-
|
|
473
|
+
// Check if we're already inside a transaction. If so, we won't start another one,
|
|
474
|
+
// as Postgres doesn't support nested transactions.
|
|
475
|
+
let client = this.alsClient.getStore();
|
|
476
|
+
const isNestedTransaction = client !== undefined;
|
|
477
|
+
const transactionClient = client ?? (await this.beginTransactionAsync());
|
|
478
|
+
|
|
457
479
|
let result: T;
|
|
458
480
|
try {
|
|
459
|
-
result = await this.alsClient.run(
|
|
481
|
+
result = await this.alsClient.run(transactionClient, () => fn(transactionClient));
|
|
460
482
|
} catch (err: any) {
|
|
461
|
-
|
|
483
|
+
if (!isNestedTransaction) {
|
|
484
|
+
// If we're inside another transaction, we assume that the root transaction
|
|
485
|
+
// will catch this error and roll back the transaction.
|
|
486
|
+
await this.endTransactionAsync(transactionClient, err);
|
|
487
|
+
}
|
|
462
488
|
throw err;
|
|
463
489
|
}
|
|
464
490
|
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
491
|
+
if (!isNestedTransaction) {
|
|
492
|
+
// If we're inside another transaction; don't commit it prematurely. Allow
|
|
493
|
+
// the root transaction to commit it instead.
|
|
494
|
+
//
|
|
495
|
+
// Note that we don't invoke `endTransactionAsync` inside the `try` block
|
|
496
|
+
// because we don't want an error thrown by it to trigger *another* call
|
|
497
|
+
// to `endTransactionAsync` in the `catch` block.
|
|
498
|
+
await this.endTransactionAsync(transactionClient, null);
|
|
499
|
+
}
|
|
469
500
|
|
|
470
501
|
return result;
|
|
471
502
|
}
|
|
@@ -473,7 +504,7 @@ export class PostgresPool {
|
|
|
473
504
|
/**
|
|
474
505
|
* Executes a query with the specified parameters.
|
|
475
506
|
*/
|
|
476
|
-
async queryAsync(sql: string, params:
|
|
507
|
+
async queryAsync(sql: string, params: QueryParams): Promise<QueryResult> {
|
|
477
508
|
debug('query()', 'sql:', debugString(sql));
|
|
478
509
|
debug('query()', 'params:', debugParams(params));
|
|
479
510
|
const client = await this.getClientAsync();
|
|
@@ -496,7 +527,7 @@ export class PostgresPool {
|
|
|
496
527
|
* Executes a query with the specified parameters. Errors if the query does
|
|
497
528
|
* not return exactly one row.
|
|
498
529
|
*/
|
|
499
|
-
async queryOneRowAsync(sql: string, params:
|
|
530
|
+
async queryOneRowAsync(sql: string, params: QueryParams): Promise<pg.QueryResult> {
|
|
500
531
|
debug('queryOneRow()', 'sql:', debugString(sql));
|
|
501
532
|
debug('queryOneRow()', 'params:', debugParams(params));
|
|
502
533
|
const result = await this.queryAsync(sql, params);
|
|
@@ -520,7 +551,7 @@ export class PostgresPool {
|
|
|
520
551
|
* Executes a query with the specified parameters. Errors if the query
|
|
521
552
|
* returns more than one row.
|
|
522
553
|
*/
|
|
523
|
-
async queryZeroOrOneRowAsync(sql: string, params:
|
|
554
|
+
async queryZeroOrOneRowAsync(sql: string, params: QueryParams): Promise<pg.QueryResult> {
|
|
524
555
|
debug('queryZeroOrOneRow()', 'sql:', debugString(sql));
|
|
525
556
|
debug('queryZeroOrOneRow()', 'params:', debugParams(params));
|
|
526
557
|
const result = await this.queryAsync(sql, params);
|
|
@@ -685,12 +716,12 @@ export class PostgresPool {
|
|
|
685
716
|
callWithClientZeroOrOneRow = callbackify(this.callWithClientZeroOrOneRowAsync);
|
|
686
717
|
|
|
687
718
|
/**
|
|
688
|
-
* Wrapper around {@link queryAsync} that
|
|
689
|
-
*
|
|
719
|
+
* Wrapper around {@link queryAsync} that parses the resulting rows with the
|
|
720
|
+
* given Zod schema. Returns only the rows of the query.
|
|
690
721
|
*/
|
|
691
722
|
async queryValidatedRows<Model extends z.ZodTypeAny>(
|
|
692
723
|
query: string,
|
|
693
|
-
params:
|
|
724
|
+
params: QueryParams,
|
|
694
725
|
model: Model
|
|
695
726
|
): Promise<z.infer<Model>[]> {
|
|
696
727
|
const results = await this.queryAsync(query, params);
|
|
@@ -698,12 +729,12 @@ export class PostgresPool {
|
|
|
698
729
|
}
|
|
699
730
|
|
|
700
731
|
/**
|
|
701
|
-
* Wrapper around {@link queryOneRowAsync} that
|
|
702
|
-
*
|
|
732
|
+
* Wrapper around {@link queryOneRowAsync} that parses the resulting row with
|
|
733
|
+
* the given Zod schema. Returns only a single row of the query.
|
|
703
734
|
*/
|
|
704
735
|
async queryValidatedOneRow<Model extends z.ZodTypeAny>(
|
|
705
736
|
query: string,
|
|
706
|
-
params:
|
|
737
|
+
params: QueryParams,
|
|
707
738
|
model: Model
|
|
708
739
|
): Promise<z.infer<Model>> {
|
|
709
740
|
const results = await this.queryOneRowAsync(query, params);
|
|
@@ -711,13 +742,12 @@ export class PostgresPool {
|
|
|
711
742
|
}
|
|
712
743
|
|
|
713
744
|
/**
|
|
714
|
-
* Wrapper around {@link queryZeroOrOneRowAsync} that
|
|
715
|
-
*
|
|
716
|
-
* Returns either the single row of the query or `null`.
|
|
745
|
+
* Wrapper around {@link queryZeroOrOneRowAsync} that parses the resulting row
|
|
746
|
+
* (if any) with the given Zod schema. Returns either a single row or `null`.
|
|
717
747
|
*/
|
|
718
748
|
async queryValidatedZeroOrOneRow<Model extends z.ZodTypeAny>(
|
|
719
749
|
query: string,
|
|
720
|
-
params:
|
|
750
|
+
params: QueryParams,
|
|
721
751
|
model: Model
|
|
722
752
|
): Promise<z.infer<Model> | null> {
|
|
723
753
|
const results = await this.queryZeroOrOneRowAsync(query, params);
|
|
@@ -730,12 +760,12 @@ export class PostgresPool {
|
|
|
730
760
|
|
|
731
761
|
/**
|
|
732
762
|
* Wrapper around {@link queryAsync} that validates that only one column is
|
|
733
|
-
* returned and the data in it
|
|
763
|
+
* returned and parses the data in it with the given Zod schema. Returns only
|
|
734
764
|
* the single column of the query as an array.
|
|
735
765
|
*/
|
|
736
766
|
async queryValidatedSingleColumnRows<Model extends z.ZodTypeAny>(
|
|
737
767
|
query: string,
|
|
738
|
-
params:
|
|
768
|
+
params: QueryParams,
|
|
739
769
|
model: Model
|
|
740
770
|
): Promise<z.infer<Model>[]> {
|
|
741
771
|
const results = await this.queryAsync(query, params);
|
|
@@ -749,12 +779,12 @@ export class PostgresPool {
|
|
|
749
779
|
|
|
750
780
|
/**
|
|
751
781
|
* Wrapper around {@link queryOneRowAsync} that validates that only one column
|
|
752
|
-
* is returned and the data in it
|
|
782
|
+
* is returned and parses the data in it with the given Zod schema. Returns
|
|
753
783
|
* only the single entry.
|
|
754
784
|
*/
|
|
755
785
|
async queryValidatedSingleColumnOneRow<Model extends z.ZodTypeAny>(
|
|
756
786
|
query: string,
|
|
757
|
-
params:
|
|
787
|
+
params: QueryParams,
|
|
758
788
|
model: Model
|
|
759
789
|
): Promise<z.infer<Model>> {
|
|
760
790
|
const results = await this.queryOneRowAsync(query, params);
|
|
@@ -767,12 +797,12 @@ export class PostgresPool {
|
|
|
767
797
|
|
|
768
798
|
/**
|
|
769
799
|
* Wrapper around {@link queryZeroOrOneRowAsync} that validates that only one
|
|
770
|
-
* column is returned and the data in it
|
|
771
|
-
*
|
|
800
|
+
* column is returned and parses the data in it (if any) with the given Zod
|
|
801
|
+
* schema. Returns either the single row of the query or `null`.
|
|
772
802
|
*/
|
|
773
803
|
async queryValidatedSingleColumnZeroOrOneRow<Model extends z.ZodTypeAny>(
|
|
774
804
|
query: string,
|
|
775
|
-
params:
|
|
805
|
+
params: QueryParams,
|
|
776
806
|
model: Model
|
|
777
807
|
): Promise<z.infer<Model> | null> {
|
|
778
808
|
const results = await this.queryZeroOrOneRowAsync(query, params);
|
|
@@ -788,8 +818,8 @@ export class PostgresPool {
|
|
|
788
818
|
}
|
|
789
819
|
|
|
790
820
|
/**
|
|
791
|
-
* Wrapper around {@link callAsync} that
|
|
792
|
-
*
|
|
821
|
+
* Wrapper around {@link callAsync} that parses the resulting rows with the
|
|
822
|
+
* given Zod schema. Returns only the rows.
|
|
793
823
|
*/
|
|
794
824
|
async callValidatedRows<Model extends z.ZodTypeAny>(
|
|
795
825
|
sprocName: string,
|
|
@@ -801,8 +831,8 @@ export class PostgresPool {
|
|
|
801
831
|
}
|
|
802
832
|
|
|
803
833
|
/**
|
|
804
|
-
* Wrapper around {@link callOneRowAsync} that
|
|
805
|
-
*
|
|
834
|
+
* Wrapper around {@link callOneRowAsync} that parses the resulting rows with
|
|
835
|
+
* the given Zod schema. Returns only a single row.
|
|
806
836
|
*/
|
|
807
837
|
async callValidatedOneRow<Model extends z.ZodTypeAny>(
|
|
808
838
|
sprocName: string,
|
|
@@ -814,9 +844,8 @@ export class PostgresPool {
|
|
|
814
844
|
}
|
|
815
845
|
|
|
816
846
|
/**
|
|
817
|
-
* Wrapper around {@link callZeroOrOneRowAsync} that
|
|
818
|
-
*
|
|
819
|
-
* Returns at most a single row.
|
|
847
|
+
* Wrapper around {@link callZeroOrOneRowAsync} that parses the resulting row
|
|
848
|
+
* (if any) with the given Zod schema. Returns at most a single row.
|
|
820
849
|
*/
|
|
821
850
|
async callValidatedZeroOrOneRow<Model extends z.ZodTypeAny>(
|
|
822
851
|
sprocName: string,
|
|
@@ -831,6 +860,87 @@ export class PostgresPool {
|
|
|
831
860
|
}
|
|
832
861
|
}
|
|
833
862
|
|
|
863
|
+
/**
|
|
864
|
+
* Returns a {@link Cursor} for the given query. The cursor can be used to
|
|
865
|
+
* read results in batches, which is useful for large result sets.
|
|
866
|
+
*/
|
|
867
|
+
async queryCursorWithClient(
|
|
868
|
+
client: pg.PoolClient,
|
|
869
|
+
sql: string,
|
|
870
|
+
params: QueryParams
|
|
871
|
+
): Promise<Cursor> {
|
|
872
|
+
this._queryCount += 1;
|
|
873
|
+
debug('queryCursorWithClient()', 'sql:', debugString(sql));
|
|
874
|
+
debug('queryCursorWithClient()', 'params:', debugParams(params));
|
|
875
|
+
const { processedSql, paramsArray } = paramsToArray(sql, params);
|
|
876
|
+
lastQueryMap.set(client, processedSql);
|
|
877
|
+
return client.query(new Cursor(processedSql, paramsArray));
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
/**
|
|
881
|
+
* Returns an {@link CursorIterator} that can be used to iterate over the
|
|
882
|
+
* results of the query in batches, which is useful for large result sets.
|
|
883
|
+
*/
|
|
884
|
+
async queryCursor<Model extends z.ZodTypeAny>(
|
|
885
|
+
sql: string,
|
|
886
|
+
params: QueryParams
|
|
887
|
+
): Promise<CursorIterator<z.infer<Model>>> {
|
|
888
|
+
return this.queryValidatedCursorInternal(sql, params);
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
/**
|
|
892
|
+
* Returns an {@link CursorIterator} that can be used to iterate over the
|
|
893
|
+
* results of the query in batches, which is useful for large result sets.
|
|
894
|
+
* Each row will be parsed by the given Zod schema.
|
|
895
|
+
*/
|
|
896
|
+
async queryValidatedCursor<Model extends z.ZodTypeAny>(
|
|
897
|
+
sql: string,
|
|
898
|
+
params: QueryParams,
|
|
899
|
+
model: Model
|
|
900
|
+
): Promise<CursorIterator<z.infer<Model>>> {
|
|
901
|
+
return this.queryValidatedCursorInternal(sql, params, model);
|
|
902
|
+
}
|
|
903
|
+
|
|
904
|
+
private async queryValidatedCursorInternal<Model extends z.ZodTypeAny>(
|
|
905
|
+
sql: string,
|
|
906
|
+
params: QueryParams,
|
|
907
|
+
model?: Model
|
|
908
|
+
): Promise<CursorIterator<z.infer<Model>>> {
|
|
909
|
+
const client = await this.getClientAsync();
|
|
910
|
+
const cursor = await this.queryCursorWithClient(client, sql, params);
|
|
911
|
+
|
|
912
|
+
let iterateCalled = false;
|
|
913
|
+
return {
|
|
914
|
+
iterate: async function* (batchSize: number) {
|
|
915
|
+
// Safety check: if someone calls iterate multiple times, they're
|
|
916
|
+
// definitely doing something wrong.
|
|
917
|
+
if (iterateCalled) {
|
|
918
|
+
throw new Error('iterate() called multiple times');
|
|
919
|
+
}
|
|
920
|
+
iterateCalled = true;
|
|
921
|
+
|
|
922
|
+
try {
|
|
923
|
+
while (true) {
|
|
924
|
+
const rows = await cursor.read(batchSize);
|
|
925
|
+
if (rows.length === 0) {
|
|
926
|
+
break;
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
if (model) {
|
|
930
|
+
yield z.array(model).parse(rows);
|
|
931
|
+
} else {
|
|
932
|
+
yield rows;
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
} catch (err: any) {
|
|
936
|
+
throw enhanceError(err, sql, params);
|
|
937
|
+
} finally {
|
|
938
|
+
client.release();
|
|
939
|
+
}
|
|
940
|
+
},
|
|
941
|
+
};
|
|
942
|
+
}
|
|
943
|
+
|
|
834
944
|
/**
|
|
835
945
|
* Set the schema to use for the search path.
|
|
836
946
|
*
|