@typesql/pg 0.2.8 → 0.2.10
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 +20 -0
- package/README.md +1 -2
- package/dist/bin.js +0 -1
- package/dist/bin.js.map +1 -1
- package/dist/client.d.ts +0 -19
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +0 -22
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +2 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/introspect/cli.d.ts +0 -5
- package/dist/introspect/cli.d.ts.map +1 -1
- package/dist/introspect/cli.js +1 -2
- package/dist/introspect/cli.js.map +1 -1
- package/dist/introspect/emit.d.ts +0 -19
- package/dist/introspect/emit.d.ts.map +1 -1
- package/dist/introspect/emit.js +1 -12
- package/dist/introspect/emit.js.map +1 -1
- package/dist/introspect/introspect.d.ts +0 -27
- package/dist/introspect/introspect.d.ts.map +1 -1
- package/dist/introspect/introspect.js +0 -11
- package/dist/introspect/introspect.js.map +1 -1
- package/dist/introspect/nullability.d.ts +0 -27
- package/dist/introspect/nullability.d.ts.map +1 -1
- package/dist/introspect/nullability.js +9 -61
- package/dist/introspect/nullability.js.map +1 -1
- package/dist/type-map.d.ts +1 -66
- package/dist/type-map.d.ts.map +1 -1
- package/package.json +4 -6
- package/src/bin.ts +0 -1
- package/src/client.ts +0 -31
- package/src/index.ts +8 -9
- package/src/introspect/cli.ts +1 -6
- package/src/introspect/emit.ts +1 -26
- package/src/introspect/introspect.ts +0 -35
- package/src/introspect/nullability.ts +8 -70
- package/src/type-map.ts +4 -66
|
@@ -1,38 +1,15 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Nullability of view columns, derived from the view's query tree.
|
|
3
|
-
*
|
|
4
|
-
* Postgres records no NOT NULL information for view (or materialized view) columns. Its rewrite
|
|
5
|
-
* rule (`pg_rewrite.ev_action`, the `_RETURN` rule) holds the parsed query, though, and from
|
|
6
|
-
* PostgreSQL 16 every column reference in it carries `varnullingrels`, the outer joins that can
|
|
7
|
-
* null it. A view column is NOT NULL here only when its expression provably cannot be NULL: a
|
|
8
|
-
* NOT NULL table column that no outer join nulls, a non-NULL constant, a cast or a strict
|
|
9
|
-
* operator over such values, a CASE whose every branch is NOT NULL, `count(*)`, ... Anything
|
|
10
|
-
* else (function calls outside a short list, scalar subqueries, set-returning function columns)
|
|
11
|
-
* is nullable. On PostgreSQL 15 and older every column reference counts as nullable.
|
|
12
|
-
*
|
|
13
|
-
* This module has no imports so that scripts/pg-catalog-from-pg.ts can load it with Node's
|
|
14
|
-
* type stripping.
|
|
15
|
-
*/
|
|
16
|
-
/** Runs a query: node-postgres' `client.query(text, values)` fits. */
|
|
17
1
|
export type QueryFn = (text: string, values?: unknown[]) => Promise<{
|
|
18
2
|
readonly rows: readonly any[];
|
|
19
3
|
}>;
|
|
20
4
|
export interface NullabilityOptions {
|
|
21
|
-
/**
|
|
22
|
-
* Columns known never to be NULL that the analysis cannot prove (typically columns of a
|
|
23
|
-
* set-returning function). Called with the view's name and the column's name.
|
|
24
|
-
*/
|
|
25
5
|
readonly notNull?: (view: string, column: string) => boolean;
|
|
26
6
|
}
|
|
27
|
-
/** A node of a parsed `pg_node_tree`: `{ _: "VAR", varno: "1", … }`. */
|
|
28
7
|
export interface Node {
|
|
29
8
|
readonly _: string;
|
|
30
9
|
readonly [field: string]: NodeValue;
|
|
31
10
|
}
|
|
32
11
|
export type NodeValue = Node | readonly NodeValue[] | string | null;
|
|
33
|
-
/** Parse a node tree into plain values: nodes as objects, lists as arrays, `<>` as null. */
|
|
34
12
|
export declare function parseNodeTree(text: string): NodeValue;
|
|
35
|
-
/** Per-column NOT NULL of views and materialized views; caches what it reads. */
|
|
36
13
|
export declare class ViewNullability {
|
|
37
14
|
private readonly query;
|
|
38
15
|
private readonly options;
|
|
@@ -42,18 +19,14 @@ export declare class ViewNullability {
|
|
|
42
19
|
private procs;
|
|
43
20
|
private operators;
|
|
44
21
|
constructor(query: QueryFn, options?: NullabilityOptions);
|
|
45
|
-
/** NOT NULL flags of the view's columns, in column order. `relid` is the view's `pg_class.oid`. */
|
|
46
22
|
notNull(relid: string | number): Promise<boolean[]>;
|
|
47
23
|
private analyze;
|
|
48
24
|
private loadProcs;
|
|
49
25
|
private loadOperators;
|
|
50
|
-
/** A built-in operator that returns a value for non-NULL operands. */
|
|
51
26
|
private strictOperator;
|
|
52
27
|
private columns;
|
|
53
|
-
/** Is output column `attno` (1-based) of a (sub)query NOT NULL? */
|
|
54
28
|
private queryColumn;
|
|
55
29
|
private variable;
|
|
56
|
-
/** Column `attno` of a single set-returning function in FROM (`WITH ORDINALITY` adds a NOT NULL counter). */
|
|
57
30
|
private functionColumn;
|
|
58
31
|
private all;
|
|
59
32
|
private expr;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nullability.d.ts","sourceRoot":"","sources":["../../src/introspect/nullability.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"nullability.d.ts","sourceRoot":"","sources":["../../src/introspect/nullability.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,CACrB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,OAAO,EAAE,KACd,OAAO,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,EAAE,CAAA;CAAE,CAAC,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;CAC7D;AAED,MAAM,WAAW,IAAI;IACpB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AACD,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,SAAS,SAAS,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC;AA2CpE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CA+BrD;AAsGD,qBAAa,eAAe;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyC;IAC/D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqC;IAC1D,OAAO,CAAC,KAAK,CAA2C;IACxD,OAAO,CAAC,SAAS,CAA2C;IAE5D,YAAY,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,kBAAuB,EAG3D;IAED,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAUlD;YAEa,OAAO;IAuBrB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,aAAa;YAWP,cAAc;IAK5B,OAAO,CAAC,OAAO;YAqBD,WAAW;YAmBX,QAAQ;YA4BR,cAAc;YAed,GAAG;YAQH,IAAI;CAyElB"}
|
|
@@ -1,19 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Nullability of view columns, derived from the view's query tree.
|
|
3
|
-
*
|
|
4
|
-
* Postgres records no NOT NULL information for view (or materialized view) columns. Its rewrite
|
|
5
|
-
* rule (`pg_rewrite.ev_action`, the `_RETURN` rule) holds the parsed query, though, and from
|
|
6
|
-
* PostgreSQL 16 every column reference in it carries `varnullingrels`, the outer joins that can
|
|
7
|
-
* null it. A view column is NOT NULL here only when its expression provably cannot be NULL: a
|
|
8
|
-
* NOT NULL table column that no outer join nulls, a non-NULL constant, a cast or a strict
|
|
9
|
-
* operator over such values, a CASE whose every branch is NOT NULL, `count(*)`, ... Anything
|
|
10
|
-
* else (function calls outside a short list, scalar subqueries, set-returning function columns)
|
|
11
|
-
* is nullable. On PostgreSQL 15 and older every column reference counts as nullable.
|
|
12
|
-
*
|
|
13
|
-
* This module has no imports so that scripts/pg-catalog-from-pg.ts can load it with Node's
|
|
14
|
-
* type stripping.
|
|
15
|
-
*/
|
|
16
|
-
/** Tokens of the text form of a node tree (`outfuncs.c`). `[ … ]` datum bytes are skipped. */
|
|
17
1
|
function tokenize(s) {
|
|
18
2
|
const out = [];
|
|
19
3
|
let i = 0;
|
|
@@ -54,7 +38,6 @@ function tokenize(s) {
|
|
|
54
38
|
}
|
|
55
39
|
return out;
|
|
56
40
|
}
|
|
57
|
-
/** Parse a node tree into plain values: nodes as objects, lists as arrays, `<>` as null. */
|
|
58
41
|
export function parseNodeTree(text) {
|
|
59
42
|
const toks = tokenize(text);
|
|
60
43
|
let p = 0;
|
|
@@ -66,7 +49,7 @@ export function parseNodeTree(text) {
|
|
|
66
49
|
while (p < toks.length && toks[p] !== "}") {
|
|
67
50
|
const label = toks[p++];
|
|
68
51
|
if (!isLabel(label))
|
|
69
|
-
continue;
|
|
52
|
+
continue;
|
|
70
53
|
if (toks[p] === "}" || isLabel(toks[p])) {
|
|
71
54
|
node[label.slice(1)] = null;
|
|
72
55
|
continue;
|
|
@@ -92,8 +75,6 @@ export function parseNodeTree(text) {
|
|
|
92
75
|
const list = (x) => Array.isArray(x) ? x : [];
|
|
93
76
|
const node = (x) => x !== null && typeof x === "object" && !Array.isArray(x) ? x : null;
|
|
94
77
|
const str = (x) => typeof x === "string" ? x : null;
|
|
95
|
-
// ───────────────────────────── function knowledge ─────────────────────────────
|
|
96
|
-
/** `pg_catalog` functions that return a non-NULL value for non-NULL arguments. */
|
|
97
78
|
const NON_NULL_FUNCTIONS = new Set([
|
|
98
79
|
"current_database",
|
|
99
80
|
"current_user",
|
|
@@ -137,7 +118,6 @@ const NON_NULL_FUNCTIONS = new Set([
|
|
|
137
118
|
"date_trunc",
|
|
138
119
|
"age",
|
|
139
120
|
]);
|
|
140
|
-
/** `pg_stat_get_*` accessors returning a number report 0 when no statistics exist, except these. */
|
|
141
121
|
const NULLABLE_STAT_FUNCTIONS = new Set([
|
|
142
122
|
"pg_stat_get_db_checksum_failures",
|
|
143
123
|
"pg_stat_get_backend_pid",
|
|
@@ -147,9 +127,7 @@ const NULLABLE_STAT_FUNCTIONS = new Set([
|
|
|
147
127
|
const isNonNullStatFunction = (name, ret) => name.startsWith("pg_stat_get_") &&
|
|
148
128
|
(ret === "int8" || ret === "int4" || ret === "float8") &&
|
|
149
129
|
!NULLABLE_STAT_FUNCTIONS.has(name);
|
|
150
|
-
/** Aggregates that never return NULL. */
|
|
151
130
|
const NON_NULL_AGGREGATES = new Set(["count"]);
|
|
152
|
-
/** Window functions that never return NULL. */
|
|
153
131
|
const NON_NULL_WINDOW_FUNCTIONS = new Set([
|
|
154
132
|
"count",
|
|
155
133
|
"row_number",
|
|
@@ -158,12 +136,6 @@ const NON_NULL_WINDOW_FUNCTIONS = new Set([
|
|
|
158
136
|
"percent_rank",
|
|
159
137
|
"cume_dist",
|
|
160
138
|
]);
|
|
161
|
-
/**
|
|
162
|
-
* Set-returning functions in FROM and their output columns (1-based) that are never NULL. A
|
|
163
|
-
* strict set-returning function returns no rows for NULL arguments, so the arguments do not
|
|
164
|
-
* matter. `jsonb_each` values are `jsonb` (a JSON null is `'null'::jsonb`, not SQL NULL);
|
|
165
|
-
* the `_text` variants turn a JSON null into SQL NULL.
|
|
166
|
-
*/
|
|
167
139
|
const NON_NULL_SRF_COLUMNS = {
|
|
168
140
|
generate_series: [1],
|
|
169
141
|
generate_subscripts: [1],
|
|
@@ -178,14 +150,7 @@ const NON_NULL_SRF_COLUMNS = {
|
|
|
178
150
|
regexp_matches: [1],
|
|
179
151
|
regexp_split_to_table: [1],
|
|
180
152
|
};
|
|
181
|
-
/**
|
|
182
|
-
* `pg_catalog` operators that can return NULL for non-NULL operands: JSON field and path access
|
|
183
|
-
* (a missing key) and jsonpath matches (an unknown result). Other built-in operators are strict
|
|
184
|
-
* and return a value for non-NULL operands; operators outside `pg_catalog` count as nullable.
|
|
185
|
-
*/
|
|
186
153
|
const NULLABLE_OPERATORS = new Set(["->", "->>", "#>", "#>>", "@@", "@?"]);
|
|
187
|
-
// ───────────────────────────── analysis ─────────────────────────────
|
|
188
|
-
/** Per-column NOT NULL of views and materialized views; caches what it reads. */
|
|
189
154
|
export class ViewNullability {
|
|
190
155
|
query;
|
|
191
156
|
options;
|
|
@@ -198,11 +163,8 @@ export class ViewNullability {
|
|
|
198
163
|
this.query = query;
|
|
199
164
|
this.options = options;
|
|
200
165
|
}
|
|
201
|
-
/** NOT NULL flags of the view's columns, in column order. `relid` is the view's `pg_class.oid`. */
|
|
202
166
|
notNull(relid) {
|
|
203
167
|
const key = String(relid);
|
|
204
|
-
// CREATE OR REPLACE VIEW allows a view that reads itself through others: waiting for its own
|
|
205
|
-
// analysis would never end
|
|
206
168
|
if (this.analyzing.has(key))
|
|
207
169
|
return Promise.resolve([]);
|
|
208
170
|
let cached = this.views.get(key);
|
|
@@ -243,7 +205,6 @@ export class ViewNullability {
|
|
|
243
205
|
FROM pg_operator o`).then(({ rows }) => new Map(rows.map((r) => [r.oid, r])));
|
|
244
206
|
return this.operators;
|
|
245
207
|
}
|
|
246
|
-
/** A built-in operator that returns a value for non-NULL operands. */
|
|
247
208
|
async strictOperator(e) {
|
|
248
209
|
const op = (await this.loadOperators()).get(String(e["opno"]));
|
|
249
210
|
return op?.system === true && !NULLABLE_OPERATORS.has(op.name);
|
|
@@ -251,9 +212,7 @@ export class ViewNullability {
|
|
|
251
212
|
columns(relid) {
|
|
252
213
|
let cached = this.atts.get(relid);
|
|
253
214
|
if (!cached) {
|
|
254
|
-
cached = this.query(
|
|
255
|
-
// NOT NULL: the column's constraint, or a NOT NULL domain anywhere in its domain chain.
|
|
256
|
-
`SELECT a.attnum, c.relkind,
|
|
215
|
+
cached = this.query(`SELECT a.attnum, c.relkind,
|
|
257
216
|
a.attnotnull OR coalesce((
|
|
258
217
|
WITH RECURSIVE chain(oid, nn) AS (
|
|
259
218
|
SELECT t.oid, t.typnotnull FROM pg_type t WHERE t.oid = a.atttypid AND t.typtype = 'd'
|
|
@@ -267,14 +226,11 @@ export class ViewNullability {
|
|
|
267
226
|
}
|
|
268
227
|
return cached;
|
|
269
228
|
}
|
|
270
|
-
/** Is output column `attno` (1-based) of a (sub)query NOT NULL? */
|
|
271
229
|
async queryColumn(value, attno) {
|
|
272
230
|
const query = node(value);
|
|
273
231
|
if (!query)
|
|
274
232
|
return false;
|
|
275
233
|
if (query["setOperations"]) {
|
|
276
|
-
// UNION / INTERSECT / EXCEPT: every arm must be NOT NULL. The range table of a set
|
|
277
|
-
// operation holds its arms, as subqueries, and nothing else.
|
|
278
234
|
for (const r of list(query["rtable"]))
|
|
279
235
|
if (!(await this.queryColumn(node(r)?.["subquery"], attno)))
|
|
280
236
|
return false;
|
|
@@ -287,12 +243,10 @@ export class ViewNullability {
|
|
|
287
243
|
return te ? this.expr(te["expr"], query) : false;
|
|
288
244
|
}
|
|
289
245
|
async variable(v, query) {
|
|
290
|
-
// No varnullingrels (PostgreSQL ≤ 15): outer joins are not visible, so nothing is proven.
|
|
291
246
|
if (!("varnullingrels" in v) || v["varlevelsup"] !== "0")
|
|
292
247
|
return false;
|
|
293
248
|
if (list(v["varnullingrels"]).length > 1)
|
|
294
|
-
return false;
|
|
295
|
-
// ROLLUP / CUBE / GROUPING SETS null the grouped columns (PostgreSQL ≤ 17 does not mark them).
|
|
249
|
+
return false;
|
|
296
250
|
if (list(query["groupingSets"]).length > 0)
|
|
297
251
|
return false;
|
|
298
252
|
const rte = node(list(query["rtable"])[Number(v["varno"]) - 1]);
|
|
@@ -301,7 +255,6 @@ export class ViewNullability {
|
|
|
301
255
|
return false;
|
|
302
256
|
switch (rte["rtekind"]) {
|
|
303
257
|
case "0": {
|
|
304
|
-
// relation
|
|
305
258
|
const relid = str(rte["relid"]);
|
|
306
259
|
const att = (await this.columns(relid)).find((a) => a.attnum === attno);
|
|
307
260
|
if (!att)
|
|
@@ -310,18 +263,17 @@ export class ViewNullability {
|
|
|
310
263
|
return (await this.notNull(relid))[attno - 1] ?? false;
|
|
311
264
|
return att.notnull;
|
|
312
265
|
}
|
|
313
|
-
case "1":
|
|
266
|
+
case "1":
|
|
314
267
|
return this.queryColumn(rte["subquery"], attno);
|
|
315
|
-
case "2":
|
|
268
|
+
case "2":
|
|
316
269
|
return this.expr(list(rte["joinaliasvars"])[attno - 1], query);
|
|
317
|
-
case "3":
|
|
270
|
+
case "3":
|
|
318
271
|
return this.functionColumn(rte, attno);
|
|
319
|
-
case "9":
|
|
272
|
+
case "9":
|
|
320
273
|
return this.expr(list(rte["groupexprs"])[attno - 1], query);
|
|
321
274
|
}
|
|
322
|
-
return false;
|
|
275
|
+
return false;
|
|
323
276
|
}
|
|
324
|
-
/** Column `attno` of a single set-returning function in FROM (`WITH ORDINALITY` adds a NOT NULL counter). */
|
|
325
277
|
async functionColumn(rte, attno) {
|
|
326
278
|
const functions = list(rte["functions"]);
|
|
327
279
|
const only = node(functions[0]);
|
|
@@ -362,10 +314,8 @@ export class ViewNullability {
|
|
|
362
314
|
if (e["funcretset"] !== "false")
|
|
363
315
|
return false;
|
|
364
316
|
const proc = (await this.loadProcs()).get(String(e["funcid"]));
|
|
365
|
-
// format_type(type, typmod) is not strict: a NULL typmod still gives a name.
|
|
366
317
|
if (proc?.system && proc.name === "format_type")
|
|
367
318
|
return this.expr(list(e["args"])[0], query);
|
|
368
|
-
// Explicit and implicit casts (funcformat 1, 2) keep a non-NULL input non-NULL.
|
|
369
319
|
const castLike = e["funcformat"] === "1" || e["funcformat"] === "2";
|
|
370
320
|
const known = proc?.system === true &&
|
|
371
321
|
(NON_NULL_FUNCTIONS.has(proc.name) ||
|
|
@@ -377,8 +327,6 @@ export class ViewNullability {
|
|
|
377
327
|
case "OPEXPR":
|
|
378
328
|
return (await this.strictOperator(e)) && this.all(e["args"], query);
|
|
379
329
|
case "SCALARARRAYOPEXPR": {
|
|
380
|
-
// `x = ANY (arr)` is NULL when there is no match and `arr` holds a NULL: only an
|
|
381
|
-
// `ARRAY[…]` of NOT NULL elements is safe.
|
|
382
330
|
const [left, right] = list(e["args"]);
|
|
383
331
|
const array = node(right);
|
|
384
332
|
return ((await this.strictOperator(e)) &&
|
|
@@ -403,7 +351,7 @@ export class ViewNullability {
|
|
|
403
351
|
if (!(await this.expr(node(w)?.["result"], query)))
|
|
404
352
|
return false;
|
|
405
353
|
return this.expr(e["defresult"], query);
|
|
406
|
-
case "SUBLINK":
|
|
354
|
+
case "SUBLINK":
|
|
407
355
|
return e["subLinkType"] === "0" || e["subLinkType"] === "6";
|
|
408
356
|
case "AGGREF": {
|
|
409
357
|
const proc = (await this.loadProcs()).get(String(e["aggfnoid"]));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nullability.js","sourceRoot":"","sources":["../../src/introspect/nullability.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nullability.js","sourceRoot":"","sources":["../../src/introspect/nullability.ts"],"names":[],"mappings":"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"}
|
package/dist/type-map.d.ts
CHANGED
|
@@ -1,53 +1,6 @@
|
|
|
1
|
-
import type { DefaultParamTypeMap, DefaultTypeMap } from "@typesql/core";
|
|
2
|
-
/**
|
|
3
|
-
* The object node-postgres returns for an `interval` column (package `postgres-interval` 1.x,
|
|
4
|
-
* wired up by `pg-types`). Fields are only present when non-zero; `toPostgres()` renders the
|
|
5
|
-
* value back to Postgres syntax and `toISO()`/`toISOString()` produce an ISO 8601 duration.
|
|
6
|
-
*
|
|
7
|
-
* Written inline in `PgTypeMap` (this alias only reads it back), so row types stay plain
|
|
8
|
-
* object types: declaration emit in a package without a direct `@typesql/pg` dependency does
|
|
9
|
-
* not need to name `PgInterval` (TS2883).
|
|
10
|
-
*/
|
|
1
|
+
import type { DefaultParamTypeMap, DefaultTypeMap } from "@typesql/core/postgres";
|
|
11
2
|
export type PgInterval = PgTypeMap["interval"];
|
|
12
|
-
/**
|
|
13
|
-
* Canonical Postgres type name → TS type as `pg` 8.x returns it with its default type
|
|
14
|
-
* parsers (`pg-types` 2.x, text protocol). Verified against `pg-types/lib/textParsers.js`:
|
|
15
|
-
*
|
|
16
|
-
* number int2 (21), int4 (23), oid (26), float4 (700), float8 (701)
|
|
17
|
-
* string int8 (20) — `parseBigInteger` keeps the digits as a string, numeric (1700),
|
|
18
|
-
* money, text, varchar, bpchar, char, name, uuid, time, timetz, inet, cidr,
|
|
19
|
-
* macaddr, macaddr8, xml, bit, varbit, tsvector, tsquery, every range type,
|
|
20
|
-
* regclass/regtype/regproc, line/lseg/box/path/polygon — anything without a
|
|
21
|
-
* registered parser comes back as the raw text representation
|
|
22
|
-
* boolean bool (16)
|
|
23
|
-
* Date date (1082), timestamp (1114), timestamptz (1184)
|
|
24
|
-
* (`'infinity'`/`'-infinity'` come back as the numbers Infinity/-Infinity)
|
|
25
|
-
* unknown json (114), jsonb (3802): `JSON.parse`d
|
|
26
|
-
* Buffer bytea (17)
|
|
27
|
-
* object interval (1186) → PgInterval, point (600) → { x, y }, circle (718) → { x, y, radius }
|
|
28
|
-
*
|
|
29
|
-
* `DefaultTypeMap` in core already describes pg; this interface only narrows the entries
|
|
30
|
-
* that differ in detail (`Buffer` instead of `Uint8Array`, the interval object's methods,
|
|
31
|
-
* `record`/`void` as their raw text).
|
|
32
|
-
*
|
|
33
|
-
* Arrays: core maps `T[]` element-wise (`TsTypeOf` checks the `[]` suffix before the map),
|
|
34
|
-
* which matches pg for the array types that `pg-types` registers: bool[], bytea[], int2[],
|
|
35
|
-
* int4[], int8[] (string[]), oid[], float4[], float8[], point[], bpchar[], varchar[], text[],
|
|
36
|
-
* macaddr[], inet[], cidr[], date[], timestamp[], timestamptz[], interval[], json[], jsonb[],
|
|
37
|
-
* uuid[], money[], time[], timetz[], numrange[]. Two kinds of mismatch exist and cannot be
|
|
38
|
-
* expressed in this map:
|
|
39
|
-
* - `numeric[]` (1231) is parsed with `parseFloat` → `number[]` at runtime, while the
|
|
40
|
-
* element-wise type says `string[]`.
|
|
41
|
-
* - Array types without a registered parser come back as the raw `{...}` string, not an
|
|
42
|
-
* array: name[], "char"[], xml[], bit[], varbit[], tsvector[], tsquery[], circle[],
|
|
43
|
-
* line[], lseg[], box[], path[], polygon[], int4range[], int8range[], tsrange[],
|
|
44
|
-
* tstzrange[], daterange[], macaddr8[], regclass[]/regtype[]/regproc[], record[].
|
|
45
|
-
* Register your own parser (`pg.types.setTypeParser`) or cast in SQL if you depend on these.
|
|
46
|
-
* The two that `PgCatalog` columns use are declared here as the text pg returns: `aclitem[]`
|
|
47
|
-
* (`relacl`, `datacl`, ...) and `"char"[]` (`proargmodes`).
|
|
48
|
-
*/
|
|
49
3
|
export interface PgTypeMap extends Omit<DefaultTypeMap, "bytea" | "interval" | "record" | "void"> {
|
|
50
|
-
/** What parameters accept on top of the row types. */
|
|
51
4
|
$params: PgParamTypeMap;
|
|
52
5
|
bytea: Buffer;
|
|
53
6
|
interval: {
|
|
@@ -62,29 +15,11 @@ export interface PgTypeMap extends Omit<DefaultTypeMap, "bytea" | "interval" | "
|
|
|
62
15
|
toISO(): string;
|
|
63
16
|
toISOString(): string;
|
|
64
17
|
};
|
|
65
|
-
/** Anonymous `ROW(...)` results have no parser: raw text such as `"(1,foo)"`. */
|
|
66
18
|
record: string;
|
|
67
|
-
/** `void`-returning functions (`pg_sleep`) yield an empty string. */
|
|
68
19
|
void: string;
|
|
69
|
-
/** No array parser: the raw `{...}` text, e.g. `"{postgres=arwdDxtm/postgres}"`. */
|
|
70
20
|
"aclitem[]": string;
|
|
71
|
-
/** No array parser for `"char"[]`: the raw `{...}` text, e.g. `"{i,o}"`. */
|
|
72
21
|
"char[]": string;
|
|
73
22
|
}
|
|
74
|
-
/**
|
|
75
|
-
* TS types `pg` parameters accept on top of the row type (`PgTypeMap["$params"]`). Verified
|
|
76
|
-
* against `pg/lib/utils.js` (`prepareValue`, 8.x): a `Date` is sent as a timestamp with the
|
|
77
|
-
* local offset, `Buffer`/typed arrays as bytea, a `bigint` or number with `toString()`, and
|
|
78
|
-
* objects with `toPostgres()` (such as `PgInterval`) through it; Postgres parses the text.
|
|
79
|
-
*
|
|
80
|
-
* int8, numeric, money number | bigint | string
|
|
81
|
-
* date, timestamp, timestamptz Date | string
|
|
82
|
-
* interval string, besides the `PgInterval` row type
|
|
83
|
-
* bytea Uint8Array, besides `Buffer`
|
|
84
|
-
*
|
|
85
|
-
* Plain objects are `JSON.stringify`d and arrays become Postgres array literals, so neither is
|
|
86
|
-
* listed for other types.
|
|
87
|
-
*/
|
|
88
23
|
export interface PgParamTypeMap extends DefaultParamTypeMap {
|
|
89
24
|
}
|
|
90
25
|
//# sourceMappingURL=type-map.d.ts.map
|
package/dist/type-map.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-map.d.ts","sourceRoot":"","sources":["../src/type-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"type-map.d.ts","sourceRoot":"","sources":["../src/type-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,mBAAmB,EACnB,cAAc,EACd,MAAM,wBAAwB,CAAC;AAEhC,MAAM,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;AAE/C,MAAM,WAAW,SAChB,SAAQ,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtE,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,UAAU,IAAI,MAAM,CAAC;QACrB,KAAK,IAAI,MAAM,CAAC;QAChB,WAAW,IAAI,MAAM,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAe,SAAQ,mBAAmB;CAAG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@typesql/pg",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.10",
|
|
4
4
|
"description": "node-postgres (pg) adapter for TypeSQL, with `typesql introspect` to generate a schema from a live database.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"access": "public"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@typesql/core": "0.
|
|
38
|
+
"@typesql/core": "0.8.0"
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
41
41
|
"pg": ">=8"
|
|
@@ -44,8 +44,7 @@
|
|
|
44
44
|
"@types/pg": "^8.23.1",
|
|
45
45
|
"pg": "^8.23.1",
|
|
46
46
|
"tsrs": "0.18.0-ts7.1.0-dev.20260929",
|
|
47
|
-
"typescript": "7.1.0-beta"
|
|
48
|
-
"vitest": "^5.0.4"
|
|
47
|
+
"typescript": "7.1.0-beta"
|
|
49
48
|
},
|
|
50
49
|
"homepage": "https://typesql.karsli.net/adapters/pg",
|
|
51
50
|
"bugs": {
|
|
@@ -67,7 +66,6 @@
|
|
|
67
66
|
],
|
|
68
67
|
"scripts": {
|
|
69
68
|
"build": "tsrs -p tsconfig.build.json",
|
|
70
|
-
"typecheck": "tsrs -p tsconfig.json --noEmit"
|
|
71
|
-
"test": "vitest run"
|
|
69
|
+
"typecheck": "tsrs -p tsconfig.json --noEmit"
|
|
72
70
|
}
|
|
73
71
|
}
|
package/src/bin.ts
CHANGED
package/src/client.ts
CHANGED
|
@@ -2,53 +2,39 @@ import { createHash } from "node:crypto";
|
|
|
2
2
|
import type { Executor } from "@typesql/core";
|
|
3
3
|
import { runTransaction, type SqlDriver } from "@typesql/core/adapter";
|
|
4
4
|
|
|
5
|
-
/** The subset of a `pg` query result the adapter relies on. */
|
|
6
5
|
export interface PgResult {
|
|
7
6
|
readonly rows: unknown[];
|
|
8
7
|
readonly rowCount: number | null;
|
|
9
8
|
}
|
|
10
9
|
|
|
11
|
-
/**
|
|
12
|
-
* Anything with node-postgres' `query(text, values)` method: `Pool`, `Client`, `PoolClient`,
|
|
13
|
-
* or a fake in tests. Prepared queries use the named query config form.
|
|
14
|
-
*/
|
|
15
10
|
export interface PgQueryable {
|
|
16
11
|
query(text: string | PgQueryConfig, values?: unknown[]): Promise<PgResult>;
|
|
17
12
|
}
|
|
18
13
|
|
|
19
|
-
/** A named node-postgres statement. Names are derived from the final SQL text. */
|
|
20
14
|
export interface PgQueryConfig {
|
|
21
15
|
readonly name: string;
|
|
22
16
|
readonly text: string;
|
|
23
17
|
readonly values: unknown[];
|
|
24
18
|
}
|
|
25
19
|
|
|
26
|
-
/** A client checked out of a pool (`pg.PoolClient`): queryable and releasable. */
|
|
27
20
|
export interface PgTransactionClient extends PgQueryable {
|
|
28
21
|
release(err?: Error | boolean): void;
|
|
29
22
|
}
|
|
30
23
|
|
|
31
|
-
/** Anything with `pg.Pool`'s `connect()`. */
|
|
32
24
|
export interface PgPoolLike<
|
|
33
25
|
C extends PgTransactionClient = PgTransactionClient,
|
|
34
26
|
> {
|
|
35
27
|
connect(): Promise<C>;
|
|
36
28
|
}
|
|
37
29
|
|
|
38
|
-
/**
|
|
39
|
-
* An `Executor` for core's `q.execute()`: runs queries on `client` and resolves to
|
|
40
|
-
* `{ rows, rowCount }` (pg's `rowCount`, so `q.executeCount()` works).
|
|
41
|
-
*/
|
|
42
30
|
export function executor(client: PgQueryable): Executor {
|
|
43
31
|
return Object.assign(
|
|
44
32
|
async (text: string, values: readonly unknown[]) => {
|
|
45
|
-
// `pg` requires a mutable array (`QueryConfigValues<I>` matches `Array<U>` only).
|
|
46
33
|
const { rows, rowCount } = await client.query(text, Array.from(values));
|
|
47
34
|
return { rows, rowCount };
|
|
48
35
|
},
|
|
49
36
|
{
|
|
50
37
|
prepare: (text: string): Executor => {
|
|
51
|
-
// Keep names stable across factories and connections, within PostgreSQL's 63-byte limit.
|
|
52
38
|
const name = `typesql_${createHash("sha256").update(text).digest("hex").slice(0, 48)}`;
|
|
53
39
|
return async (text, values) => {
|
|
54
40
|
const { rows, rowCount } = await client.query({
|
|
@@ -64,7 +50,6 @@ export function executor(client: PgQueryable): Executor {
|
|
|
64
50
|
}
|
|
65
51
|
|
|
66
52
|
function isPool(client: PgQueryable): client is PgQueryable & PgPoolLike {
|
|
67
|
-
// `pg.Client` has `connect()` too (it opens the socket), and `processID`; a `PoolClient` has `release()`.
|
|
68
53
|
return (
|
|
69
54
|
typeof (client as Partial<PgPoolLike>).connect === "function" &&
|
|
70
55
|
!("release" in client) &&
|
|
@@ -78,10 +63,6 @@ function isConnection(client: PgQueryable): boolean {
|
|
|
78
63
|
|
|
79
64
|
const on = (c: PgQueryable) => (statement: string) => c.query(statement);
|
|
80
65
|
|
|
81
|
-
/**
|
|
82
|
-
* Check out a client, run `fn` with it between `BEGIN` and `COMMIT`, and release it, with the
|
|
83
|
-
* error when `ROLLBACK` fails so the pool discards the connection instead of reusing it.
|
|
84
|
-
*/
|
|
85
66
|
async function inPoolTransaction<C extends PgTransactionClient, T>(
|
|
86
67
|
pool: PgPoolLike<C>,
|
|
87
68
|
fn: (conn: C) => Promise<T>,
|
|
@@ -99,11 +80,6 @@ async function inPoolTransaction<C extends PgTransactionClient, T>(
|
|
|
99
80
|
}
|
|
100
81
|
}
|
|
101
82
|
|
|
102
|
-
/**
|
|
103
|
-
* Run `fn` inside a transaction: on a pool, on a client checked out of it; on a `Client` or
|
|
104
|
-
* `PoolClient`, on that connection. With `depth > 0` the client is already in a transaction,
|
|
105
|
-
* and `fn` runs in a savepoint.
|
|
106
|
-
*/
|
|
107
83
|
function transaction<T>(
|
|
108
84
|
client: PgQueryable,
|
|
109
85
|
depth: number,
|
|
@@ -124,19 +100,12 @@ function transaction<T>(
|
|
|
124
100
|
return runTransaction(on(client), () => fn(client));
|
|
125
101
|
}
|
|
126
102
|
|
|
127
|
-
/** How `createSql(client)` runs queries and transactions. */
|
|
128
103
|
export const driver: SqlDriver<PgQueryable> = { executor, transaction };
|
|
129
104
|
|
|
130
|
-
/** Anything carrying an ordered list of DDL statements, e.g. a `migrations()` builder from core. */
|
|
131
105
|
export interface MigrationSource {
|
|
132
106
|
readonly statements: readonly string[];
|
|
133
107
|
}
|
|
134
108
|
|
|
135
|
-
/**
|
|
136
|
-
* Run a migration's statements in order on one connection, inside a single transaction
|
|
137
|
-
* (all or nothing). Statements are sent as simple queries without parameters, so scripts
|
|
138
|
-
* with `$$`-quoted function bodies work.
|
|
139
|
-
*/
|
|
140
109
|
export async function migrate<C extends PgTransactionClient>(
|
|
141
110
|
pool: PgPoolLike<C>,
|
|
142
111
|
m: MigrationSource,
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import type { RowKeys, SqlOptions
|
|
1
|
+
import type { RowKeys, SqlOptions } from "@typesql/core";
|
|
2
2
|
import { createTransactionalSql } from "@typesql/core/adapter";
|
|
3
|
+
import {
|
|
4
|
+
type Postgres,
|
|
5
|
+
postgres,
|
|
6
|
+
type TransactionalSql,
|
|
7
|
+
} from "@typesql/core/postgres";
|
|
3
8
|
import { driver, type PgQueryable } from "./client.js";
|
|
4
9
|
import type { PgTypeMap } from "./type-map.js";
|
|
5
10
|
|
|
@@ -15,19 +20,12 @@ export {
|
|
|
15
20
|
} from "./client.js";
|
|
16
21
|
export type { PgInterval, PgParamTypeMap, PgTypeMap } from "./type-map.js";
|
|
17
22
|
|
|
18
|
-
/** What `createSql<DB>(client)` returns: core's `Sql` under `PgTypeMap`, with `transaction(fn)`. */
|
|
19
23
|
export type PgSql<DB, Keys extends RowKeys = "preserve"> = TransactionalSql<
|
|
20
24
|
DB,
|
|
21
25
|
PgTypeMap,
|
|
22
26
|
Keys
|
|
23
27
|
>;
|
|
24
28
|
|
|
25
|
-
/**
|
|
26
|
-
* `createSql<DB>()` from core, pre-bound to `PgTypeMap` (`count(*)` is `string`, `int8` is `string`, dates are `Date`).
|
|
27
|
-
* The queries' `execute*` methods run on `client` (a `Pool`, `Client` or `PoolClient`), and
|
|
28
|
-
* `sql.transaction(fn)` runs `fn` with a `sql` bound to one transaction.
|
|
29
|
-
* `{ rowKeys: "camelCase" }` camelCases the rows' keys, in the types and at runtime.
|
|
30
|
-
*/
|
|
31
29
|
export function createSql<DB>(
|
|
32
30
|
client: PgQueryable | undefined,
|
|
33
31
|
options: { readonly rowKeys: "camelCase" },
|
|
@@ -40,7 +38,8 @@ export function createSql<DB>(
|
|
|
40
38
|
client?: PgQueryable,
|
|
41
39
|
options?: SqlOptions,
|
|
42
40
|
): PgSql<DB, RowKeys> {
|
|
43
|
-
return createTransactionalSql<DB, PgTypeMap, PgQueryable>(
|
|
41
|
+
return createTransactionalSql<Postgres, DB, PgTypeMap, PgQueryable>(
|
|
42
|
+
postgres,
|
|
44
43
|
client,
|
|
45
44
|
driver,
|
|
46
45
|
options,
|