@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.
@@ -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;;;;;;;;;;;;;;GAcG;AAEH,sEAAsE;AACtE,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;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;CAC7D;AAED,wEAAwE;AACxE,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;AA8CpE,4FAA4F;AAC5F,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CA+BrD;AAyHD,iFAAiF;AACjF,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,mGAAmG;IACnG,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAYlD;YAEa,OAAO;IAuBrB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,aAAa;IAWrB,sEAAsE;YACxD,cAAc;IAK5B,OAAO,CAAC,OAAO;IAsBf,mEAAmE;YACrD,WAAW;YAqBX,QAAQ;IA+BtB,6GAA6G;YAC/F,cAAc;YAed,GAAG;YAQH,IAAI;CA6ElB"}
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; // a datum's length before its skipped bytes
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; // `(b 3)`: an outer join can null it
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": // subquery
266
+ case "1":
314
267
  return this.queryColumn(rte["subquery"], attno);
315
- case "2": // join alias variable
268
+ case "2":
316
269
  return this.expr(list(rte["joinaliasvars"])[attno - 1], query);
317
- case "3": // function in FROM
270
+ case "3":
318
271
  return this.functionColumn(rte, attno);
319
- case "9": // PostgreSQL 18 GROUP BY expressions
272
+ case "9":
320
273
  return this.expr(list(rte["groupexprs"])[attno - 1], query);
321
274
  }
322
- return false; // VALUES, CTEs, table functions, ...
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": // EXISTS (0) and ARRAY (6) sublinks are never NULL
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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"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"type-map.d.ts","sourceRoot":"","sources":["../src/type-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEzE;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,WAAW,SAChB,SAAQ,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtE,sDAAsD;IACtD,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,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,WAAW,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,cAAe,SAAQ,mBAAmB;CAAG"}
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.8",
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.7.5"
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
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env node
2
- /** `typesql`: `typesql introspect` writes the TypeSQL schema of a live database. */
3
2
  import { main } from "./introspect/cli.js";
4
3
 
5
4
  process.exitCode = await main(process.argv.slice(2));
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, TransactionalSql } from "@typesql/core";
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,